diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2021-03-21 13:48:37 +0000 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2021-03-21 13:48:37 +0000 |
commit | 5c008599d70c211ae5c6fbf55114022fd7a602c3 (patch) | |
tree | 762502b2fab3154323e7014830b2ef9285f18af1 | |
parent | ff68d802c43d3bebde7fe823b708c3a4ecaf6787 (diff) |
sys-kernel/linux-{image,sources}-redcore-lts-legacy : version bump (v5.4.107)
9 files changed, 12 insertions, 962 deletions
diff --git a/metadata/md5-cache/sys-kernel/linux-image-redcore-lts-legacy-5.4.105 b/metadata/md5-cache/sys-kernel/linux-image-redcore-lts-legacy-5.4.107 index 2d472727..9136c57a 100644 --- a/metadata/md5-cache/sys-kernel/linux-image-redcore-lts-legacy-5.4.105 +++ b/metadata/md5-cache/sys-kernel/linux-image-redcore-lts-legacy-5.4.107 @@ -1,14 +1,14 @@ DEFINED_PHASES=compile install postinst postrm prepare setup -DEPEND=app-arch/lz4 app-arch/xz-utils sys-devel/autoconf sys-devel/bc sys-devel/make cryptsetup? ( sys-fs/cryptsetup ) dmraid? ( sys-fs/dmraid ) dracut? ( >=sys-kernel/dracut-0.44-r8 ) dkms? ( sys-kernel/dkms sys-kernel/linux-sources-redcore-lts-legacy:5.4.105 ) mdadm? ( sys-fs/mdadm ) >=sys-kernel/linux-firmware-20180314 +DEPEND=app-arch/lz4 app-arch/xz-utils sys-devel/autoconf sys-devel/bc sys-devel/make cryptsetup? ( sys-fs/cryptsetup ) dmraid? ( sys-fs/dmraid ) dracut? ( >=sys-kernel/dracut-0.44-r8 ) dkms? ( sys-kernel/dkms sys-kernel/linux-sources-redcore-lts-legacy:5.4.107 ) mdadm? ( sys-fs/mdadm ) >=sys-kernel/linux-firmware-20180314 DESCRIPTION=Redcore Linux Kernel Image (LTS Legacy 5.4) EAPI=6 HOMEPAGE=https://redcorelinux.org IUSE=+cryptsetup +dmraid +dracut +dkms +mdadm KEYWORDS=~amd64 LICENSE=GPL-2 -RDEPEND=app-arch/lz4 app-arch/xz-utils sys-devel/autoconf sys-devel/bc sys-devel/make cryptsetup? ( sys-fs/cryptsetup ) dmraid? ( sys-fs/dmraid ) dracut? ( >=sys-kernel/dracut-0.44-r8 ) dkms? ( sys-kernel/dkms sys-kernel/linux-sources-redcore-lts-legacy:5.4.105 ) mdadm? ( sys-fs/mdadm ) >=sys-kernel/linux-firmware-20180314 +RDEPEND=app-arch/lz4 app-arch/xz-utils sys-devel/autoconf sys-devel/bc sys-devel/make cryptsetup? ( sys-fs/cryptsetup ) dmraid? ( sys-fs/dmraid ) dracut? ( >=sys-kernel/dracut-0.44-r8 ) dkms? ( sys-kernel/dkms sys-kernel/linux-sources-redcore-lts-legacy:5.4.107 ) mdadm? ( sys-fs/mdadm ) >=sys-kernel/linux-firmware-20180314 RESTRICT=binchecks strip mirror -SLOT=5.4.105 -SRC_URI=https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.105.tar.xz +SLOT=5.4.107 +SRC_URI=https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.107.tar.xz _eclasses_=desktop c0d27bf73aa08ca05b663dbd31fbef28 edos2unix 33e347e171066657f91f8b0c72ec8773 epatch e8f1ec13660dc2f44b32775765d85e42 estack 055c42df72f76a4f45ec92b35e83cd56 eutils 2d5b3f4b315094768576b6799e4f926e l10n 8cdd85e169b835d518bc2fd59f780d8e ltprune 4f3f2db5ce3ccbeeacdf3f94954043aa multilib d410501a125f99ffb560b0c523cd3d1e preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs 24921b57d6561d87cbef4916a296ada4 vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf wrapper 4251d4c84c25f59094fd557e0063a974 -_md5_=b8e06ec635b7e35c325335d9baba8d69 +_md5_=365875a906335f0725980ec7ac09753e diff --git a/metadata/md5-cache/sys-kernel/linux-sources-redcore-lts-legacy-5.4.105 b/metadata/md5-cache/sys-kernel/linux-sources-redcore-lts-legacy-5.4.107 index aaef5a8d..628b4110 100644 --- a/metadata/md5-cache/sys-kernel/linux-sources-redcore-lts-legacy-5.4.105 +++ b/metadata/md5-cache/sys-kernel/linux-sources-redcore-lts-legacy-5.4.107 @@ -7,7 +7,7 @@ KEYWORDS=~amd64 LICENSE=GPL-2 RDEPEND=app-arch/lz4 app-arch/xz-utils sys-devel/autoconf sys-devel/bc sys-devel/make RESTRICT=strip mirror -SLOT=5.4.105 -SRC_URI=https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.105.tar.xz +SLOT=5.4.107 +SRC_URI=https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.107.tar.xz _eclasses_=desktop c0d27bf73aa08ca05b663dbd31fbef28 edos2unix 33e347e171066657f91f8b0c72ec8773 epatch e8f1ec13660dc2f44b32775765d85e42 estack 055c42df72f76a4f45ec92b35e83cd56 eutils 2d5b3f4b315094768576b6799e4f926e l10n 8cdd85e169b835d518bc2fd59f780d8e ltprune 4f3f2db5ce3ccbeeacdf3f94954043aa multilib d410501a125f99ffb560b0c523cd3d1e preserve-libs ef207dc62baddfddfd39a164d9797648 toolchain-funcs 24921b57d6561d87cbef4916a296ada4 vcs-clean 2a0f74a496fa2b1552c4f3398258b7bf wrapper 4251d4c84c25f59094fd557e0063a974 -_md5_=c2145c5f9810439a4217bfdf46e8fa05 +_md5_=c231d46ee58eb91bce523fa965b78275 diff --git a/metadata/pkg_desc_index b/metadata/pkg_desc_index index c39efacd..58348022 100644 --- a/metadata/pkg_desc_index +++ b/metadata/pkg_desc_index @@ -65,10 +65,10 @@ sys-kernel/dracutcfg 1337: Redcore Linux Dracut configuration files sys-kernel/linux-headers 5.9-r10: Linux system headers sys-kernel/linux-image-redcore 5.11.6: Redcore Linux Kernel Image sys-kernel/linux-image-redcore-lts 5.10.23: Redcore Linux Kernel Image (LTS) -sys-kernel/linux-image-redcore-lts-legacy 5.4.105: Redcore Linux Kernel Image (LTS Legacy 5.4) +sys-kernel/linux-image-redcore-lts-legacy 5.4.107: Redcore Linux Kernel Image (LTS Legacy 5.4) sys-kernel/linux-sources-redcore 5.11.6: Redcore Linux Kernel Sources sys-kernel/linux-sources-redcore-lts 5.10.23: Redcore Linux Kernel Sources (LTS) -sys-kernel/linux-sources-redcore-lts-legacy 5.4.105: Redcore Linux Kernel Sources (LTS Legacy 5.4) +sys-kernel/linux-sources-redcore-lts-legacy 5.4.107: Redcore Linux Kernel Sources (LTS Legacy 5.4) sys-kernel/nvidia-drivers-dkms 460.56: NVIDIA driver sources for linux sys-kernel/nvidia-drivers-legacy-dkms 390.141-r1: NVIDIA driver sources for linux sys-kernel/rtl8821cu-dkms 5.8.1: Realtek RTL8811CU/RTL8821CU USB Wi-Fi adapter driver for Linux diff --git a/sys-kernel/linux-image-redcore-lts-legacy/Manifest b/sys-kernel/linux-image-redcore-lts-legacy/Manifest index 9877ca4f..6842fd6a 100644 --- a/sys-kernel/linux-image-redcore-lts-legacy/Manifest +++ b/sys-kernel/linux-image-redcore-lts-legacy/Manifest @@ -1 +1 @@ -DIST linux-5.4.105.tar.xz 109086968 BLAKE2B 5a575d3fc8e7f51eeb244194a7e947dd4bf72890d7a4b90aa77f49f1b7c6c9d79bb03d68275608820642af6513402dc26f2179941f311d6357b722983000c457 SHA512 423be7e90bf49a4afa7f6f3dc8a8bfa9a1691b73ccdc081bf5bcfe0612a084b8cb37acdab77a480629d786cf6d66d48cbed84d505bd27d6f4d815934010eafe7 +DIST linux-5.4.107.tar.xz 109090520 BLAKE2B b648ef7f1b921b17cc09be348b5fbd85919bc6d7542dd4e6751817185546a9019d06a336648796ca21bddab8667e4b058da8283779feb1c6d0822a8aeee4b42a SHA512 4e402cbfc9e0f7d357c804984d59577a2af7b4d49255b4e4060d4340e4514087ae40c35726986cd822587339a3025cbf35278e960332c75cafa6813c998557e1 diff --git a/sys-kernel/linux-image-redcore-lts-legacy/files/5.4-enable_alx_wol.patch b/sys-kernel/linux-image-redcore-lts-legacy/files/5.4-enable_alx_wol.patch deleted file mode 100644 index 55505fbd..00000000 --- a/sys-kernel/linux-image-redcore-lts-legacy/files/5.4-enable_alx_wol.patch +++ /dev/null @@ -1,474 +0,0 @@ -diff -Naur linux-5.4.1/drivers/net/ethernet/atheros/alx/ethtool.c linux-5.4.1.new/drivers/net/ethernet/atheros/alx/ethtool.c ---- linux-5.4.1/drivers/net/ethernet/atheros/alx/ethtool.c 2019-11-29 10:10:32.000000000 +0100 -+++ linux-5.4.1.new/drivers/net/ethernet/atheros/alx/ethtool.c 2019-12-03 14:24:48.939847862 +0100 -@@ -310,11 +310,47 @@ - } - } - -+static void alx_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) -+{ -+ struct alx_priv *alx = netdev_priv(netdev); -+ struct alx_hw *hw = &alx->hw; -+ -+ wol->supported = WAKE_MAGIC | WAKE_PHY; -+ wol->wolopts = 0; -+ -+ if (hw->sleep_ctrl & ALX_SLEEP_WOL_MAGIC) -+ wol->wolopts |= WAKE_MAGIC; -+ if (hw->sleep_ctrl & ALX_SLEEP_WOL_PHY) -+ wol->wolopts |= WAKE_PHY; -+} -+ -+static int alx_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) -+{ -+ struct alx_priv *alx = netdev_priv(netdev); -+ struct alx_hw *hw = &alx->hw; -+ -+ if (wol->wolopts & ~(WAKE_MAGIC | WAKE_PHY)) -+ return -EOPNOTSUPP; -+ -+ hw->sleep_ctrl = 0; -+ -+ if (wol->wolopts & WAKE_MAGIC) -+ hw->sleep_ctrl |= ALX_SLEEP_WOL_MAGIC; -+ if (wol->wolopts & WAKE_PHY) -+ hw->sleep_ctrl |= ALX_SLEEP_WOL_PHY; -+ -+ device_set_wakeup_enable(&alx->hw.pdev->dev, hw->sleep_ctrl); -+ -+ return 0; -+} -+ - const struct ethtool_ops alx_ethtool_ops = { - .get_pauseparam = alx_get_pauseparam, - .set_pauseparam = alx_set_pauseparam, - .get_msglevel = alx_get_msglevel, - .set_msglevel = alx_set_msglevel, -+ .get_wol = alx_get_wol, -+ .set_wol = alx_set_wol, - .get_link = ethtool_op_get_link, - .get_strings = alx_get_strings, - .get_sset_count = alx_get_sset_count, -diff -Naur linux-5.4.1/drivers/net/ethernet/atheros/alx/hw.c linux-5.4.1.new/drivers/net/ethernet/atheros/alx/hw.c ---- linux-5.4.1/drivers/net/ethernet/atheros/alx/hw.c 2019-11-29 10:10:32.000000000 +0100 -+++ linux-5.4.1.new/drivers/net/ethernet/atheros/alx/hw.c 2019-12-03 14:24:48.939847862 +0100 -@@ -332,6 +332,16 @@ - alx_write_mem32(hw, ALX_STAD1, val); - } - -+static void alx_enable_osc(struct alx_hw *hw) -+{ -+ u32 val; -+ -+ /* rising edge */ -+ val = alx_read_mem32(hw, ALX_MISC); -+ alx_write_mem32(hw, ALX_MISC, val & ~ALX_MISC_INTNLOSC_OPEN); -+ alx_write_mem32(hw, ALX_MISC, val | ALX_MISC_INTNLOSC_OPEN); -+} -+ - static void alx_reset_osc(struct alx_hw *hw, u8 rev) - { - u32 val, val2; -@@ -848,6 +858,66 @@ - } - } - -+ -+/* NOTE: -+ * 1. phy link must be established before calling this function -+ * 2. wol option (pattern,magic,link,etc.) is configed before call it. -+ */ -+int alx_pre_suspend(struct alx_hw *hw, int speed, u8 duplex) -+{ -+ u32 master, mac, phy, val; -+ int err = 0; -+ -+ master = alx_read_mem32(hw, ALX_MASTER); -+ master &= ~ALX_MASTER_PCLKSEL_SRDS; -+ mac = hw->rx_ctrl; -+ /* 10/100 half */ -+ ALX_SET_FIELD(mac, ALX_MAC_CTRL_SPEED, ALX_MAC_CTRL_SPEED_10_100); -+ mac &= ~(ALX_MAC_CTRL_FULLD | ALX_MAC_CTRL_RX_EN | ALX_MAC_CTRL_TX_EN); -+ -+ phy = alx_read_mem32(hw, ALX_PHY_CTRL); -+ phy &= ~(ALX_PHY_CTRL_DSPRST_OUT | ALX_PHY_CTRL_CLS); -+ phy |= ALX_PHY_CTRL_RST_ANALOG | ALX_PHY_CTRL_HIB_PULSE | -+ ALX_PHY_CTRL_HIB_EN; -+ -+ /* without any activity */ -+ if (!(hw->sleep_ctrl & ALX_SLEEP_ACTIVE)) { -+ err = alx_write_phy_reg(hw, ALX_MII_IER, 0); -+ if (err) -+ return err; -+ phy |= ALX_PHY_CTRL_IDDQ | ALX_PHY_CTRL_POWER_DOWN; -+ } else { -+ if (hw->sleep_ctrl & (ALX_SLEEP_WOL_MAGIC | ALX_SLEEP_CIFS)) -+ mac |= ALX_MAC_CTRL_RX_EN | ALX_MAC_CTRL_BRD_EN; -+ if (hw->sleep_ctrl & ALX_SLEEP_CIFS) -+ mac |= ALX_MAC_CTRL_TX_EN; -+ if (duplex == DUPLEX_FULL) -+ mac |= ALX_MAC_CTRL_FULLD; -+ if (speed == SPEED_1000) -+ ALX_SET_FIELD(mac, ALX_MAC_CTRL_SPEED, -+ ALX_MAC_CTRL_SPEED_1000); -+ phy |= ALX_PHY_CTRL_DSPRST_OUT; -+ err = alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, -+ ALX_MIIEXT_S3DIG10, -+ ALX_MIIEXT_S3DIG10_SL); -+ if (err) -+ return err; -+ } -+ -+ alx_enable_osc(hw); -+ hw->rx_ctrl = mac; -+ alx_write_mem32(hw, ALX_MASTER, master); -+ alx_write_mem32(hw, ALX_MAC_CTRL, mac); -+ alx_write_mem32(hw, ALX_PHY_CTRL, phy); -+ -+ /* set val of PDLL D3PLLOFF */ -+ val = alx_read_mem32(hw, ALX_PDLL_TRNS1); -+ val |= ALX_PDLL_TRNS1_D3PLLOFF_EN; -+ alx_write_mem32(hw, ALX_PDLL_TRNS1, val); -+ -+ return 0; -+} -+ - bool alx_phy_configured(struct alx_hw *hw) - { - u32 cfg, hw_cfg; -@@ -920,6 +990,26 @@ - return alx_read_phy_reg(hw, ALX_MII_ISR, &isr); - } - -+int alx_config_wol(struct alx_hw *hw) -+{ -+ u32 wol = 0; -+ int err = 0; -+ -+ /* turn on magic packet event */ -+ if (hw->sleep_ctrl & ALX_SLEEP_WOL_MAGIC) -+ wol |= ALX_WOL0_MAGIC_EN | ALX_WOL0_PME_MAGIC_EN; -+ -+ /* turn on link up event */ -+ if (hw->sleep_ctrl & ALX_SLEEP_WOL_PHY) { -+ wol |= ALX_WOL0_LINK_EN | ALX_WOL0_PME_LINK; -+ /* only link up can wake up */ -+ err = alx_write_phy_reg(hw, ALX_MII_IER, ALX_IER_LINK_UP); -+ } -+ alx_write_mem32(hw, ALX_WOL0, wol); -+ -+ return err; -+} -+ - void alx_disable_rss(struct alx_hw *hw) - { - u32 ctrl = alx_read_mem32(hw, ALX_RXQ0); -@@ -1045,6 +1135,71 @@ - } - - -+int alx_select_powersaving_speed(struct alx_hw *hw, int *speed, u8 *duplex) -+{ -+ int i, err; -+ u16 lpa; -+ -+ err = alx_read_phy_link(hw); -+ if (err) -+ return err; -+ -+ if (hw->link_speed == SPEED_UNKNOWN) { -+ *speed = SPEED_UNKNOWN; -+ *duplex = DUPLEX_UNKNOWN; -+ return 0; -+ } -+ -+ err = alx_read_phy_reg(hw, MII_LPA, &lpa); -+ if (err) -+ return err; -+ -+ if (!(lpa & LPA_LPACK)) { -+ *speed = hw->link_speed; -+ return 0; -+ } -+ -+ if (lpa & LPA_10FULL) { -+ *speed = SPEED_10; -+ *duplex = DUPLEX_FULL; -+ } else if (lpa & LPA_10HALF) { -+ *speed = SPEED_10; -+ *duplex = DUPLEX_HALF; -+ } else if (lpa & LPA_100FULL) { -+ *speed = SPEED_100; -+ *duplex = DUPLEX_FULL; -+ } else { -+ *speed = SPEED_100; -+ *duplex = DUPLEX_HALF; -+ } -+ -+ if (*speed == hw->link_speed && *duplex == hw->duplex) -+ return 0; -+ err = alx_write_phy_reg(hw, ALX_MII_IER, 0); -+ if (err) -+ return err; -+ err = alx_setup_speed_duplex(hw, alx_speed_to_ethadv(*speed, *duplex) | -+ ADVERTISED_Autoneg, ALX_FC_ANEG | -+ ALX_FC_RX | ALX_FC_TX); -+ if (err) -+ return err; -+ -+ /* wait for linkup */ -+ for (i = 0; i < ALX_MAX_SETUP_LNK_CYCLE; i++) { -+ msleep(100); -+ -+ err = alx_read_phy_link(hw); -+ if (err < 0) -+ return err; -+ if (hw->link_speed != SPEED_UNKNOWN) -+ break; -+ } -+ if (i == ALX_MAX_SETUP_LNK_CYCLE) -+ return -ETIMEDOUT; -+ -+ return 0; -+} -+ - bool alx_get_phy_info(struct alx_hw *hw) - { - u16 devs1, devs2; -diff -Naur linux-5.4.1/drivers/net/ethernet/atheros/alx/hw.h linux-5.4.1.new/drivers/net/ethernet/atheros/alx/hw.h ---- linux-5.4.1/drivers/net/ethernet/atheros/alx/hw.h 2019-11-29 10:10:32.000000000 +0100 -+++ linux-5.4.1.new/drivers/net/ethernet/atheros/alx/hw.h 2019-12-03 14:24:48.940847869 +0100 -@@ -487,6 +487,8 @@ - u8 flowctrl; - u32 adv_cfg; - -+ u32 sleep_ctrl; -+ - spinlock_t mdio_lock; - struct mdio_if_info mdio; - u16 phy_id[2]; -@@ -549,12 +551,14 @@ - void alx_enable_aspm(struct alx_hw *hw, bool l0s_en, bool l1_en); - int alx_setup_speed_duplex(struct alx_hw *hw, u32 ethadv, u8 flowctrl); - void alx_post_phy_link(struct alx_hw *hw); -+int alx_pre_suspend(struct alx_hw *hw, int speed, u8 duplex); - int alx_read_phy_reg(struct alx_hw *hw, u16 reg, u16 *phy_data); - int alx_write_phy_reg(struct alx_hw *hw, u16 reg, u16 phy_data); - int alx_read_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 *pdata); - int alx_write_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 data); - int alx_read_phy_link(struct alx_hw *hw); - int alx_clear_phy_intr(struct alx_hw *hw); -+int alx_config_wol(struct alx_hw *hw); - void alx_cfg_mac_flowcontrol(struct alx_hw *hw, u8 fc); - void alx_start_mac(struct alx_hw *hw); - int alx_reset_mac(struct alx_hw *hw); -@@ -563,6 +567,7 @@ - void alx_configure_basic(struct alx_hw *hw); - void alx_mask_msix(struct alx_hw *hw, int index, bool mask); - void alx_disable_rss(struct alx_hw *hw); -+int alx_select_powersaving_speed(struct alx_hw *hw, int *speed, u8 *duplex); - bool alx_get_phy_info(struct alx_hw *hw); - void alx_update_hw_stats(struct alx_hw *hw); - -diff -Naur linux-5.4.1/drivers/net/ethernet/atheros/alx/main.c linux-5.4.1.new/drivers/net/ethernet/atheros/alx/main.c ---- linux-5.4.1/drivers/net/ethernet/atheros/alx/main.c 2019-11-29 10:10:32.000000000 +0100 -+++ linux-5.4.1.new/drivers/net/ethernet/atheros/alx/main.c 2019-12-03 14:24:48.940847869 +0100 -@@ -1069,6 +1069,7 @@ - alx->dev->max_mtu = ALX_MAX_FRAME_LEN(ALX_MAX_FRAME_SIZE); - alx->tx_ringsz = 256; - alx->rx_ringsz = 512; -+ hw->sleep_ctrl = ALX_SLEEP_WOL_MAGIC | ALX_SLEEP_WOL_PHY; - hw->imt = 200; - alx->int_mask = ALX_ISR_MISC; - hw->dma_chnl = hw->max_dma_chnl; -@@ -1343,6 +1344,66 @@ - return 0; - } - -+static int __alx_shutdown(struct pci_dev *pdev, bool *wol_en) -+{ -+ struct alx_priv *alx = pci_get_drvdata(pdev); -+ struct net_device *netdev = alx->dev; -+ struct alx_hw *hw = &alx->hw; -+ int err, speed; -+ u8 duplex; -+ -+ netif_device_detach(netdev); -+ -+ if (netif_running(netdev)) -+ __alx_stop(alx); -+ -+#ifdef CONFIG_PM_SLEEP -+ err = pci_save_state(pdev); -+ if (err) -+ return err; -+#endif -+ -+ err = alx_select_powersaving_speed(hw, &speed, &duplex); -+ if (err) -+ return err; -+ err = alx_clear_phy_intr(hw); -+ if (err) -+ return err; -+ err = alx_pre_suspend(hw, speed, duplex); -+ if (err) -+ return err; -+ err = alx_config_wol(hw); -+ if (err) -+ return err; -+ -+ *wol_en = false; -+ if (hw->sleep_ctrl & ALX_SLEEP_ACTIVE) { -+ netif_info(alx, wol, netdev, -+ "wol: ctrl=%X, speed=%X\n", -+ hw->sleep_ctrl, speed); -+ device_set_wakeup_enable(&pdev->dev, true); -+ *wol_en = true; -+ } -+ -+ pci_disable_device(pdev); -+ -+ return 0; -+} -+ -+static void alx_shutdown(struct pci_dev *pdev) -+{ -+ int err; -+ bool wol_en; -+ -+ err = __alx_shutdown(pdev, &wol_en); -+ if (!err) { -+ pci_wake_from_d3(pdev, wol_en); -+ pci_set_power_state(pdev, PCI_D3hot); -+ } else { -+ dev_err(&pdev->dev, "shutdown fail %d\n", err); -+ } -+} -+ - static void alx_link_check(struct work_struct *work) - { - struct alx_priv *alx; -@@ -1836,6 +1897,7 @@ - goto out_unmap; - } - -+ device_set_wakeup_enable(&pdev->dev, hw->sleep_ctrl); - netdev_info(netdev, - "Qualcomm Atheros AR816x/AR817x Ethernet [%pM]\n", - netdev->dev_addr); -@@ -1878,37 +1940,70 @@ - static int alx_suspend(struct device *dev) - { - struct alx_priv *alx = dev_get_drvdata(dev); -+ struct pci_dev *pdev = alx->hw.pdev; -+ int err; -+ bool wol_en; - -- if (!netif_running(alx->dev)) -- return 0; -- netif_device_detach(alx->dev); -- __alx_stop(alx); -+ err = __alx_shutdown(pdev, &wol_en); -+ if (err) { -+ dev_err(&pdev->dev, "shutdown fail in suspend %d\n", err); -+ return err; -+ } -+ -+ if (wol_en) { -+ pci_prepare_to_sleep(pdev); -+ } else { -+ pci_wake_from_d3(pdev, false); -+ pci_set_power_state(pdev, PCI_D3hot); -+ } - return 0; - } - - static int alx_resume(struct device *dev) - { - struct alx_priv *alx = dev_get_drvdata(dev); -+ struct net_device *netdev = alx->dev; - struct alx_hw *hw = &alx->hw; -+ struct pci_dev *pdev = hw->pdev; - int err; - -+ pci_set_power_state(pdev, PCI_D0); -+ pci_restore_state(pdev); -+ pci_save_state(pdev); -+ -+ pci_enable_wake(pdev, PCI_D3hot, 0); -+ pci_enable_wake(pdev, PCI_D3cold, 0); -+ -+ hw->link_speed = SPEED_UNKNOWN; -+ alx->int_mask = ALX_ISR_MISC; -+ -+ alx_reset_pcie(hw); - alx_reset_phy(hw); - -- if (!netif_running(alx->dev)) -- return 0; -- netif_device_attach(alx->dev); -+ err = alx_reset_mac(hw); -+ if (err) { -+ netif_err(alx, hw, alx->dev, -+ "resume:reset_mac fail %d\n", err); -+ return -EIO; -+ } - -- rtnl_lock(); -- err = __alx_open(alx, true); -- rtnl_unlock(); -+ err = alx_setup_speed_duplex(hw, hw->adv_cfg, hw->flowctrl); -+ if (err) { -+ netif_err(alx, hw, alx->dev, -+ "resume:setup_speed_duplex fail %d\n", err); -+ return -EIO; -+ } -+ -+ if (netif_running(netdev)) { -+ err = __alx_open(alx, true); -+ if (err) -+ return err; -+ } - -- return err; -+ netif_device_attach(netdev); -+ return err; - } - --static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume); --#define ALX_PM_OPS (&alx_pm_ops) --#else --#define ALX_PM_OPS NULL - #endif - - -@@ -1954,6 +2049,8 @@ - } - - pci_set_master(pdev); -+ pci_enable_wake(pdev, PCI_D3hot, 0); -+ pci_enable_wake(pdev, PCI_D3cold, 0); - - alx_reset_pcie(hw); - if (!alx_reset_mac(hw)) -@@ -2003,11 +2100,20 @@ - {} - }; - -+#ifdef CONFIG_PM_SLEEP -+static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume); -+#define ALX_PM_OPS (&alx_pm_ops) -+#else -+#define ALX_PM_OPS NULL -+#endif -+ -+ - static struct pci_driver alx_driver = { - .name = alx_drv_name, - .id_table = alx_pci_tbl, - .probe = alx_probe, - .remove = alx_remove, -+ .shutdown = alx_shutdown, - .err_handler = &alx_err_handlers, - .driver.pm = ALX_PM_OPS, - }; diff --git a/sys-kernel/linux-image-redcore-lts-legacy/linux-image-redcore-lts-legacy-5.4.105.ebuild b/sys-kernel/linux-image-redcore-lts-legacy/linux-image-redcore-lts-legacy-5.4.107.ebuild index 2c9e5f86..b17b5e6c 100644 --- a/sys-kernel/linux-image-redcore-lts-legacy/linux-image-redcore-lts-legacy-5.4.105.ebuild +++ b/sys-kernel/linux-image-redcore-lts-legacy/linux-image-redcore-lts-legacy-5.4.107.ebuild @@ -34,7 +34,6 @@ DEPEND=" RDEPEND="${DEPEND}" PATCHES=( - "${FILESDIR}"/"${KV_MAJOR}"-enable_alx_wol.patch "${FILESDIR}"/"${KV_MAJOR}"-drop_ancient-and-wrong-msg.patch "${FILESDIR}"/"${KV_MAJOR}"-ata-fix-NCQ-LOG-strings-and-move-to-debug.patch "${FILESDIR}"/"${KV_MAJOR}"-radeon_dp_aux_transfer_native-no-ratelimited_debug.patch diff --git a/sys-kernel/linux-sources-redcore-lts-legacy/Manifest b/sys-kernel/linux-sources-redcore-lts-legacy/Manifest index 9877ca4f..6842fd6a 100644 --- a/sys-kernel/linux-sources-redcore-lts-legacy/Manifest +++ b/sys-kernel/linux-sources-redcore-lts-legacy/Manifest @@ -1 +1 @@ -DIST linux-5.4.105.tar.xz 109086968 BLAKE2B 5a575d3fc8e7f51eeb244194a7e947dd4bf72890d7a4b90aa77f49f1b7c6c9d79bb03d68275608820642af6513402dc26f2179941f311d6357b722983000c457 SHA512 423be7e90bf49a4afa7f6f3dc8a8bfa9a1691b73ccdc081bf5bcfe0612a084b8cb37acdab77a480629d786cf6d66d48cbed84d505bd27d6f4d815934010eafe7 +DIST linux-5.4.107.tar.xz 109090520 BLAKE2B b648ef7f1b921b17cc09be348b5fbd85919bc6d7542dd4e6751817185546a9019d06a336648796ca21bddab8667e4b058da8283779feb1c6d0822a8aeee4b42a SHA512 4e402cbfc9e0f7d357c804984d59577a2af7b4d49255b4e4060d4340e4514087ae40c35726986cd822587339a3025cbf35278e960332c75cafa6813c998557e1 diff --git a/sys-kernel/linux-sources-redcore-lts-legacy/files/5.4-enable_alx_wol.patch b/sys-kernel/linux-sources-redcore-lts-legacy/files/5.4-enable_alx_wol.patch deleted file mode 100644 index 55505fbd..00000000 --- a/sys-kernel/linux-sources-redcore-lts-legacy/files/5.4-enable_alx_wol.patch +++ /dev/null @@ -1,474 +0,0 @@ -diff -Naur linux-5.4.1/drivers/net/ethernet/atheros/alx/ethtool.c linux-5.4.1.new/drivers/net/ethernet/atheros/alx/ethtool.c ---- linux-5.4.1/drivers/net/ethernet/atheros/alx/ethtool.c 2019-11-29 10:10:32.000000000 +0100 -+++ linux-5.4.1.new/drivers/net/ethernet/atheros/alx/ethtool.c 2019-12-03 14:24:48.939847862 +0100 -@@ -310,11 +310,47 @@ - } - } - -+static void alx_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) -+{ -+ struct alx_priv *alx = netdev_priv(netdev); -+ struct alx_hw *hw = &alx->hw; -+ -+ wol->supported = WAKE_MAGIC | WAKE_PHY; -+ wol->wolopts = 0; -+ -+ if (hw->sleep_ctrl & ALX_SLEEP_WOL_MAGIC) -+ wol->wolopts |= WAKE_MAGIC; -+ if (hw->sleep_ctrl & ALX_SLEEP_WOL_PHY) -+ wol->wolopts |= WAKE_PHY; -+} -+ -+static int alx_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) -+{ -+ struct alx_priv *alx = netdev_priv(netdev); -+ struct alx_hw *hw = &alx->hw; -+ -+ if (wol->wolopts & ~(WAKE_MAGIC | WAKE_PHY)) -+ return -EOPNOTSUPP; -+ -+ hw->sleep_ctrl = 0; -+ -+ if (wol->wolopts & WAKE_MAGIC) -+ hw->sleep_ctrl |= ALX_SLEEP_WOL_MAGIC; -+ if (wol->wolopts & WAKE_PHY) -+ hw->sleep_ctrl |= ALX_SLEEP_WOL_PHY; -+ -+ device_set_wakeup_enable(&alx->hw.pdev->dev, hw->sleep_ctrl); -+ -+ return 0; -+} -+ - const struct ethtool_ops alx_ethtool_ops = { - .get_pauseparam = alx_get_pauseparam, - .set_pauseparam = alx_set_pauseparam, - .get_msglevel = alx_get_msglevel, - .set_msglevel = alx_set_msglevel, -+ .get_wol = alx_get_wol, -+ .set_wol = alx_set_wol, - .get_link = ethtool_op_get_link, - .get_strings = alx_get_strings, - .get_sset_count = alx_get_sset_count, -diff -Naur linux-5.4.1/drivers/net/ethernet/atheros/alx/hw.c linux-5.4.1.new/drivers/net/ethernet/atheros/alx/hw.c ---- linux-5.4.1/drivers/net/ethernet/atheros/alx/hw.c 2019-11-29 10:10:32.000000000 +0100 -+++ linux-5.4.1.new/drivers/net/ethernet/atheros/alx/hw.c 2019-12-03 14:24:48.939847862 +0100 -@@ -332,6 +332,16 @@ - alx_write_mem32(hw, ALX_STAD1, val); - } - -+static void alx_enable_osc(struct alx_hw *hw) -+{ -+ u32 val; -+ -+ /* rising edge */ -+ val = alx_read_mem32(hw, ALX_MISC); -+ alx_write_mem32(hw, ALX_MISC, val & ~ALX_MISC_INTNLOSC_OPEN); -+ alx_write_mem32(hw, ALX_MISC, val | ALX_MISC_INTNLOSC_OPEN); -+} -+ - static void alx_reset_osc(struct alx_hw *hw, u8 rev) - { - u32 val, val2; -@@ -848,6 +858,66 @@ - } - } - -+ -+/* NOTE: -+ * 1. phy link must be established before calling this function -+ * 2. wol option (pattern,magic,link,etc.) is configed before call it. -+ */ -+int alx_pre_suspend(struct alx_hw *hw, int speed, u8 duplex) -+{ -+ u32 master, mac, phy, val; -+ int err = 0; -+ -+ master = alx_read_mem32(hw, ALX_MASTER); -+ master &= ~ALX_MASTER_PCLKSEL_SRDS; -+ mac = hw->rx_ctrl; -+ /* 10/100 half */ -+ ALX_SET_FIELD(mac, ALX_MAC_CTRL_SPEED, ALX_MAC_CTRL_SPEED_10_100); -+ mac &= ~(ALX_MAC_CTRL_FULLD | ALX_MAC_CTRL_RX_EN | ALX_MAC_CTRL_TX_EN); -+ -+ phy = alx_read_mem32(hw, ALX_PHY_CTRL); -+ phy &= ~(ALX_PHY_CTRL_DSPRST_OUT | ALX_PHY_CTRL_CLS); -+ phy |= ALX_PHY_CTRL_RST_ANALOG | ALX_PHY_CTRL_HIB_PULSE | -+ ALX_PHY_CTRL_HIB_EN; -+ -+ /* without any activity */ -+ if (!(hw->sleep_ctrl & ALX_SLEEP_ACTIVE)) { -+ err = alx_write_phy_reg(hw, ALX_MII_IER, 0); -+ if (err) -+ return err; -+ phy |= ALX_PHY_CTRL_IDDQ | ALX_PHY_CTRL_POWER_DOWN; -+ } else { -+ if (hw->sleep_ctrl & (ALX_SLEEP_WOL_MAGIC | ALX_SLEEP_CIFS)) -+ mac |= ALX_MAC_CTRL_RX_EN | ALX_MAC_CTRL_BRD_EN; -+ if (hw->sleep_ctrl & ALX_SLEEP_CIFS) -+ mac |= ALX_MAC_CTRL_TX_EN; -+ if (duplex == DUPLEX_FULL) -+ mac |= ALX_MAC_CTRL_FULLD; -+ if (speed == SPEED_1000) -+ ALX_SET_FIELD(mac, ALX_MAC_CTRL_SPEED, -+ ALX_MAC_CTRL_SPEED_1000); -+ phy |= ALX_PHY_CTRL_DSPRST_OUT; -+ err = alx_write_phy_ext(hw, ALX_MIIEXT_ANEG, -+ ALX_MIIEXT_S3DIG10, -+ ALX_MIIEXT_S3DIG10_SL); -+ if (err) -+ return err; -+ } -+ -+ alx_enable_osc(hw); -+ hw->rx_ctrl = mac; -+ alx_write_mem32(hw, ALX_MASTER, master); -+ alx_write_mem32(hw, ALX_MAC_CTRL, mac); -+ alx_write_mem32(hw, ALX_PHY_CTRL, phy); -+ -+ /* set val of PDLL D3PLLOFF */ -+ val = alx_read_mem32(hw, ALX_PDLL_TRNS1); -+ val |= ALX_PDLL_TRNS1_D3PLLOFF_EN; -+ alx_write_mem32(hw, ALX_PDLL_TRNS1, val); -+ -+ return 0; -+} -+ - bool alx_phy_configured(struct alx_hw *hw) - { - u32 cfg, hw_cfg; -@@ -920,6 +990,26 @@ - return alx_read_phy_reg(hw, ALX_MII_ISR, &isr); - } - -+int alx_config_wol(struct alx_hw *hw) -+{ -+ u32 wol = 0; -+ int err = 0; -+ -+ /* turn on magic packet event */ -+ if (hw->sleep_ctrl & ALX_SLEEP_WOL_MAGIC) -+ wol |= ALX_WOL0_MAGIC_EN | ALX_WOL0_PME_MAGIC_EN; -+ -+ /* turn on link up event */ -+ if (hw->sleep_ctrl & ALX_SLEEP_WOL_PHY) { -+ wol |= ALX_WOL0_LINK_EN | ALX_WOL0_PME_LINK; -+ /* only link up can wake up */ -+ err = alx_write_phy_reg(hw, ALX_MII_IER, ALX_IER_LINK_UP); -+ } -+ alx_write_mem32(hw, ALX_WOL0, wol); -+ -+ return err; -+} -+ - void alx_disable_rss(struct alx_hw *hw) - { - u32 ctrl = alx_read_mem32(hw, ALX_RXQ0); -@@ -1045,6 +1135,71 @@ - } - - -+int alx_select_powersaving_speed(struct alx_hw *hw, int *speed, u8 *duplex) -+{ -+ int i, err; -+ u16 lpa; -+ -+ err = alx_read_phy_link(hw); -+ if (err) -+ return err; -+ -+ if (hw->link_speed == SPEED_UNKNOWN) { -+ *speed = SPEED_UNKNOWN; -+ *duplex = DUPLEX_UNKNOWN; -+ return 0; -+ } -+ -+ err = alx_read_phy_reg(hw, MII_LPA, &lpa); -+ if (err) -+ return err; -+ -+ if (!(lpa & LPA_LPACK)) { -+ *speed = hw->link_speed; -+ return 0; -+ } -+ -+ if (lpa & LPA_10FULL) { -+ *speed = SPEED_10; -+ *duplex = DUPLEX_FULL; -+ } else if (lpa & LPA_10HALF) { -+ *speed = SPEED_10; -+ *duplex = DUPLEX_HALF; -+ } else if (lpa & LPA_100FULL) { -+ *speed = SPEED_100; -+ *duplex = DUPLEX_FULL; -+ } else { -+ *speed = SPEED_100; -+ *duplex = DUPLEX_HALF; -+ } -+ -+ if (*speed == hw->link_speed && *duplex == hw->duplex) -+ return 0; -+ err = alx_write_phy_reg(hw, ALX_MII_IER, 0); -+ if (err) -+ return err; -+ err = alx_setup_speed_duplex(hw, alx_speed_to_ethadv(*speed, *duplex) | -+ ADVERTISED_Autoneg, ALX_FC_ANEG | -+ ALX_FC_RX | ALX_FC_TX); -+ if (err) -+ return err; -+ -+ /* wait for linkup */ -+ for (i = 0; i < ALX_MAX_SETUP_LNK_CYCLE; i++) { -+ msleep(100); -+ -+ err = alx_read_phy_link(hw); -+ if (err < 0) -+ return err; -+ if (hw->link_speed != SPEED_UNKNOWN) -+ break; -+ } -+ if (i == ALX_MAX_SETUP_LNK_CYCLE) -+ return -ETIMEDOUT; -+ -+ return 0; -+} -+ - bool alx_get_phy_info(struct alx_hw *hw) - { - u16 devs1, devs2; -diff -Naur linux-5.4.1/drivers/net/ethernet/atheros/alx/hw.h linux-5.4.1.new/drivers/net/ethernet/atheros/alx/hw.h ---- linux-5.4.1/drivers/net/ethernet/atheros/alx/hw.h 2019-11-29 10:10:32.000000000 +0100 -+++ linux-5.4.1.new/drivers/net/ethernet/atheros/alx/hw.h 2019-12-03 14:24:48.940847869 +0100 -@@ -487,6 +487,8 @@ - u8 flowctrl; - u32 adv_cfg; - -+ u32 sleep_ctrl; -+ - spinlock_t mdio_lock; - struct mdio_if_info mdio; - u16 phy_id[2]; -@@ -549,12 +551,14 @@ - void alx_enable_aspm(struct alx_hw *hw, bool l0s_en, bool l1_en); - int alx_setup_speed_duplex(struct alx_hw *hw, u32 ethadv, u8 flowctrl); - void alx_post_phy_link(struct alx_hw *hw); -+int alx_pre_suspend(struct alx_hw *hw, int speed, u8 duplex); - int alx_read_phy_reg(struct alx_hw *hw, u16 reg, u16 *phy_data); - int alx_write_phy_reg(struct alx_hw *hw, u16 reg, u16 phy_data); - int alx_read_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 *pdata); - int alx_write_phy_ext(struct alx_hw *hw, u8 dev, u16 reg, u16 data); - int alx_read_phy_link(struct alx_hw *hw); - int alx_clear_phy_intr(struct alx_hw *hw); -+int alx_config_wol(struct alx_hw *hw); - void alx_cfg_mac_flowcontrol(struct alx_hw *hw, u8 fc); - void alx_start_mac(struct alx_hw *hw); - int alx_reset_mac(struct alx_hw *hw); -@@ -563,6 +567,7 @@ - void alx_configure_basic(struct alx_hw *hw); - void alx_mask_msix(struct alx_hw *hw, int index, bool mask); - void alx_disable_rss(struct alx_hw *hw); -+int alx_select_powersaving_speed(struct alx_hw *hw, int *speed, u8 *duplex); - bool alx_get_phy_info(struct alx_hw *hw); - void alx_update_hw_stats(struct alx_hw *hw); - -diff -Naur linux-5.4.1/drivers/net/ethernet/atheros/alx/main.c linux-5.4.1.new/drivers/net/ethernet/atheros/alx/main.c ---- linux-5.4.1/drivers/net/ethernet/atheros/alx/main.c 2019-11-29 10:10:32.000000000 +0100 -+++ linux-5.4.1.new/drivers/net/ethernet/atheros/alx/main.c 2019-12-03 14:24:48.940847869 +0100 -@@ -1069,6 +1069,7 @@ - alx->dev->max_mtu = ALX_MAX_FRAME_LEN(ALX_MAX_FRAME_SIZE); - alx->tx_ringsz = 256; - alx->rx_ringsz = 512; -+ hw->sleep_ctrl = ALX_SLEEP_WOL_MAGIC | ALX_SLEEP_WOL_PHY; - hw->imt = 200; - alx->int_mask = ALX_ISR_MISC; - hw->dma_chnl = hw->max_dma_chnl; -@@ -1343,6 +1344,66 @@ - return 0; - } - -+static int __alx_shutdown(struct pci_dev *pdev, bool *wol_en) -+{ -+ struct alx_priv *alx = pci_get_drvdata(pdev); -+ struct net_device *netdev = alx->dev; -+ struct alx_hw *hw = &alx->hw; -+ int err, speed; -+ u8 duplex; -+ -+ netif_device_detach(netdev); -+ -+ if (netif_running(netdev)) -+ __alx_stop(alx); -+ -+#ifdef CONFIG_PM_SLEEP -+ err = pci_save_state(pdev); -+ if (err) -+ return err; -+#endif -+ -+ err = alx_select_powersaving_speed(hw, &speed, &duplex); -+ if (err) -+ return err; -+ err = alx_clear_phy_intr(hw); -+ if (err) -+ return err; -+ err = alx_pre_suspend(hw, speed, duplex); -+ if (err) -+ return err; -+ err = alx_config_wol(hw); -+ if (err) -+ return err; -+ -+ *wol_en = false; -+ if (hw->sleep_ctrl & ALX_SLEEP_ACTIVE) { -+ netif_info(alx, wol, netdev, -+ "wol: ctrl=%X, speed=%X\n", -+ hw->sleep_ctrl, speed); -+ device_set_wakeup_enable(&pdev->dev, true); -+ *wol_en = true; -+ } -+ -+ pci_disable_device(pdev); -+ -+ return 0; -+} -+ -+static void alx_shutdown(struct pci_dev *pdev) -+{ -+ int err; -+ bool wol_en; -+ -+ err = __alx_shutdown(pdev, &wol_en); -+ if (!err) { -+ pci_wake_from_d3(pdev, wol_en); -+ pci_set_power_state(pdev, PCI_D3hot); -+ } else { -+ dev_err(&pdev->dev, "shutdown fail %d\n", err); -+ } -+} -+ - static void alx_link_check(struct work_struct *work) - { - struct alx_priv *alx; -@@ -1836,6 +1897,7 @@ - goto out_unmap; - } - -+ device_set_wakeup_enable(&pdev->dev, hw->sleep_ctrl); - netdev_info(netdev, - "Qualcomm Atheros AR816x/AR817x Ethernet [%pM]\n", - netdev->dev_addr); -@@ -1878,37 +1940,70 @@ - static int alx_suspend(struct device *dev) - { - struct alx_priv *alx = dev_get_drvdata(dev); -+ struct pci_dev *pdev = alx->hw.pdev; -+ int err; -+ bool wol_en; - -- if (!netif_running(alx->dev)) -- return 0; -- netif_device_detach(alx->dev); -- __alx_stop(alx); -+ err = __alx_shutdown(pdev, &wol_en); -+ if (err) { -+ dev_err(&pdev->dev, "shutdown fail in suspend %d\n", err); -+ return err; -+ } -+ -+ if (wol_en) { -+ pci_prepare_to_sleep(pdev); -+ } else { -+ pci_wake_from_d3(pdev, false); -+ pci_set_power_state(pdev, PCI_D3hot); -+ } - return 0; - } - - static int alx_resume(struct device *dev) - { - struct alx_priv *alx = dev_get_drvdata(dev); -+ struct net_device *netdev = alx->dev; - struct alx_hw *hw = &alx->hw; -+ struct pci_dev *pdev = hw->pdev; - int err; - -+ pci_set_power_state(pdev, PCI_D0); -+ pci_restore_state(pdev); -+ pci_save_state(pdev); -+ -+ pci_enable_wake(pdev, PCI_D3hot, 0); -+ pci_enable_wake(pdev, PCI_D3cold, 0); -+ -+ hw->link_speed = SPEED_UNKNOWN; -+ alx->int_mask = ALX_ISR_MISC; -+ -+ alx_reset_pcie(hw); - alx_reset_phy(hw); - -- if (!netif_running(alx->dev)) -- return 0; -- netif_device_attach(alx->dev); -+ err = alx_reset_mac(hw); -+ if (err) { -+ netif_err(alx, hw, alx->dev, -+ "resume:reset_mac fail %d\n", err); -+ return -EIO; -+ } - -- rtnl_lock(); -- err = __alx_open(alx, true); -- rtnl_unlock(); -+ err = alx_setup_speed_duplex(hw, hw->adv_cfg, hw->flowctrl); -+ if (err) { -+ netif_err(alx, hw, alx->dev, -+ "resume:setup_speed_duplex fail %d\n", err); -+ return -EIO; -+ } -+ -+ if (netif_running(netdev)) { -+ err = __alx_open(alx, true); -+ if (err) -+ return err; -+ } - -- return err; -+ netif_device_attach(netdev); -+ return err; - } - --static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume); --#define ALX_PM_OPS (&alx_pm_ops) --#else --#define ALX_PM_OPS NULL - #endif - - -@@ -1954,6 +2049,8 @@ - } - - pci_set_master(pdev); -+ pci_enable_wake(pdev, PCI_D3hot, 0); -+ pci_enable_wake(pdev, PCI_D3cold, 0); - - alx_reset_pcie(hw); - if (!alx_reset_mac(hw)) -@@ -2003,11 +2100,20 @@ - {} - }; - -+#ifdef CONFIG_PM_SLEEP -+static SIMPLE_DEV_PM_OPS(alx_pm_ops, alx_suspend, alx_resume); -+#define ALX_PM_OPS (&alx_pm_ops) -+#else -+#define ALX_PM_OPS NULL -+#endif -+ -+ - static struct pci_driver alx_driver = { - .name = alx_drv_name, - .id_table = alx_pci_tbl, - .probe = alx_probe, - .remove = alx_remove, -+ .shutdown = alx_shutdown, - .err_handler = &alx_err_handlers, - .driver.pm = ALX_PM_OPS, - }; diff --git a/sys-kernel/linux-sources-redcore-lts-legacy/linux-sources-redcore-lts-legacy-5.4.105.ebuild b/sys-kernel/linux-sources-redcore-lts-legacy/linux-sources-redcore-lts-legacy-5.4.107.ebuild index 904973ef..512cedd7 100644 --- a/sys-kernel/linux-sources-redcore-lts-legacy/linux-sources-redcore-lts-legacy-5.4.105.ebuild +++ b/sys-kernel/linux-sources-redcore-lts-legacy/linux-sources-redcore-lts-legacy-5.4.107.ebuild @@ -28,7 +28,6 @@ DEPEND=" RDEPEND="${DEPEND}" PATCHES=( - "${FILESDIR}"/"${KV_MAJOR}"-enable_alx_wol.patch "${FILESDIR}"/"${KV_MAJOR}"-drop_ancient-and-wrong-msg.patch "${FILESDIR}"/"${KV_MAJOR}"-ata-fix-NCQ-LOG-strings-and-move-to-debug.patch "${FILESDIR}"/"${KV_MAJOR}"-radeon_dp_aux_transfer_native-no-ratelimited_debug.patch |