|
|
@@ -0,0 +1,50 @@
|
|
|
+From ae1737e7339b513f8c2fc21b500a0fc215d155c3 Mon Sep 17 00:00:00 2001
|
|
|
+From: Heiner Kallweit <[email protected]>
|
|
|
+Date: Sat, 22 Nov 2025 15:23:02 +0100
|
|
|
+Subject: r8169: fix RTL8127 hang on suspend/shutdown
|
|
|
+
|
|
|
+There have been reports that RTL8127 hangs on suspend and shutdown,
|
|
|
+partially disappearing from lspci until power-cycling.
|
|
|
+According to Realtek disabling PLL's when switching to D3 should be
|
|
|
+avoided on that chip version. Fix this by aligning disabling PLL's
|
|
|
+with the vendor drivers, what in addition results in PLL's not being
|
|
|
+disabled when switching to D3hot on other chip versions.
|
|
|
+
|
|
|
+Fixes: f24f7b2f3af9 ("r8169: add support for RTL8127A")
|
|
|
+Tested-by: Fabio Baltieri <[email protected]>
|
|
|
+Cc: [email protected]
|
|
|
+Signed-off-by: Heiner Kallweit <[email protected]>
|
|
|
+Link: https://patch.msgid.link/[email protected]
|
|
|
+Signed-off-by: Jakub Kicinski <[email protected]>
|
|
|
+---
|
|
|
+ drivers/net/ethernet/realtek/r8169_main.c | 19 ++++++++++++++-----
|
|
|
+ 1 file changed, 14 insertions(+), 5 deletions(-)
|
|
|
+
|
|
|
+--- a/drivers/net/ethernet/realtek/r8169_main.c
|
|
|
++++ b/drivers/net/ethernet/realtek/r8169_main.c
|
|
|
+@@ -1516,11 +1516,20 @@ static enum rtl_dash_type rtl_get_dash_t
|
|
|
+
|
|
|
+ static void rtl_set_d3_pll_down(struct rtl8169_private *tp, bool enable)
|
|
|
+ {
|
|
|
+- if (tp->mac_version >= RTL_GIGA_MAC_VER_25 &&
|
|
|
+- tp->mac_version != RTL_GIGA_MAC_VER_28 &&
|
|
|
+- tp->mac_version != RTL_GIGA_MAC_VER_31 &&
|
|
|
+- tp->mac_version != RTL_GIGA_MAC_VER_38)
|
|
|
+- r8169_mod_reg8_cond(tp, PMCH, D3_NO_PLL_DOWN, !enable);
|
|
|
++ switch (tp->mac_version) {
|
|
|
++ case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_24:
|
|
|
++ case RTL_GIGA_MAC_VER_28:
|
|
|
++ case RTL_GIGA_MAC_VER_31:
|
|
|
++ case RTL_GIGA_MAC_VER_38:
|
|
|
++ break;
|
|
|
++ case RTL_GIGA_MAC_VER_80:
|
|
|
++ r8169_mod_reg8_cond(tp, PMCH, D3_NO_PLL_DOWN, true);
|
|
|
++ break;
|
|
|
++ default:
|
|
|
++ r8169_mod_reg8_cond(tp, PMCH, D3HOT_NO_PLL_DOWN, true);
|
|
|
++ r8169_mod_reg8_cond(tp, PMCH, D3COLD_NO_PLL_DOWN, !enable);
|
|
|
++ break;
|
|
|
++ }
|
|
|
+ }
|
|
|
+
|
|
|
+ static void rtl_reset_packet_filter(struct rtl8169_private *tp)
|