From 75fefcaf9ab34553ca14cebfcf52d5d566254280 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Thu, 25 Oct 2018 16:41:36 +0100 Subject: [PATCH] linux (Generic): r8169: fix broken Wake-on-LAN from S5 (poweroff) --- ...-broken-Wake-on-LAN-from-S5-poweroff.patch | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 packages/linux/patches/default/linux-999-r8169-fix-broken-Wake-on-LAN-from-S5-poweroff.patch diff --git a/packages/linux/patches/default/linux-999-r8169-fix-broken-Wake-on-LAN-from-S5-poweroff.patch b/packages/linux/patches/default/linux-999-r8169-fix-broken-Wake-on-LAN-from-S5-poweroff.patch new file mode 100644 index 0000000000..e5dd07e01c --- /dev/null +++ b/packages/linux/patches/default/linux-999-r8169-fix-broken-Wake-on-LAN-from-S5-poweroff.patch @@ -0,0 +1,47 @@ +From f02436d19bfd25e249184f4eff557ae96eed47ab Mon Sep 17 00:00:00 2001 +From: Heiner Kallweit +Date: Thu, 25 Oct 2018 18:40:19 +0200 +Subject: [PATCH] r8169: fix broken Wake-on-LAN from S5 (poweroff) + +It was reported that WoL from S5 is broken (WoL from S3 works) and the +analysis showed that during system shutdown the network interface was +brought down already when the actual kernel shutdown started. +Therefore netif_running() returned false and as a consequence the PHY +was suspended. Obviously WoL wasn't working then. +To fix this the original patch needs to be effectively reverted. +A side effect is that when normally bringing down the interface and +WoL is enabled the PHY will remain powered on (like it was before the +original patch). + +Fixes: fe87bef01f9b ("r8169: don't check WoL when powering down PHY and interface is down") +Reported-by: Neil MacLeod +Signed-off-by: Heiner Kallweit +--- + drivers/net/ethernet/realtek/r8169.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c +index 2c35009..4930e03 100644 +--- a/drivers/net/ethernet/realtek/r8169.c ++++ b/drivers/net/ethernet/realtek/r8169.c +@@ -4175,10 +4175,15 @@ static void rtl_wol_suspend_quirk(struct rtl8169_private *tp) + + static bool rtl_wol_pll_power_down(struct rtl8169_private *tp) + { +- if (!netif_running(tp->dev) || !__rtl8169_get_wol(tp)) ++ struct phy_device *phydev; ++ ++ if (!__rtl8169_get_wol(tp)) + return false; + +- phy_speed_down(tp->dev->phydev, false); ++ /* phydev may not be attached to netdevice */ ++ phydev = mdiobus_get_phy(tp->mii_bus, 0); ++ ++ phy_speed_down(phydev, false); + rtl_wol_suspend_quirk(tp); + + return true; +-- +2.14.1 +