summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--metadata/md5-cache/sys-kernel/linux-image-redcore-lts-legacy-5.4.107 (renamed from metadata/md5-cache/sys-kernel/linux-image-redcore-lts-legacy-5.4.105)10
-rw-r--r--metadata/md5-cache/sys-kernel/linux-sources-redcore-lts-legacy-5.4.107 (renamed from metadata/md5-cache/sys-kernel/linux-sources-redcore-lts-legacy-5.4.105)6
-rw-r--r--metadata/pkg_desc_index4
-rw-r--r--sys-kernel/linux-image-redcore-lts-legacy/Manifest2
-rw-r--r--sys-kernel/linux-image-redcore-lts-legacy/files/5.4-enable_alx_wol.patch474
-rw-r--r--sys-kernel/linux-image-redcore-lts-legacy/linux-image-redcore-lts-legacy-5.4.107.ebuild (renamed from sys-kernel/linux-image-redcore-lts-legacy/linux-image-redcore-lts-legacy-5.4.105.ebuild)1
-rw-r--r--sys-kernel/linux-sources-redcore-lts-legacy/Manifest2
-rw-r--r--sys-kernel/linux-sources-redcore-lts-legacy/files/5.4-enable_alx_wol.patch474
-rw-r--r--sys-kernel/linux-sources-redcore-lts-legacy/linux-sources-redcore-lts-legacy-5.4.107.ebuild (renamed from sys-kernel/linux-sources-redcore-lts-legacy/linux-sources-redcore-lts-legacy-5.4.105.ebuild)1
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