]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
r8169: copy vendor driver 2.5G/5G EEE advertisement constraints
authorHeiner Kallweit <hkallweit1@gmail.com>
Fri, 8 Nov 2024 07:08:24 +0000 (08:08 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 15 Nov 2024 02:01:37 +0000 (18:01 -0800)
Vendor driver r8125 doesn't advertise 2.5G EEE on RTL8125A, and r8126
doesn't advertise 5G EEE. Likely there are compatibility issues,
therefore do the same in r8169.
With this change we don't have to disable 2.5G EEE advertisement in
rtl8125a_config_eee_phy() any longer.
We use new phylib accessor phy_set_eee_broken() to mark the respective
EEE modes as broken.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://patch.msgid.link/ce185e10-8a2f-4cf8-a49b-fd8fb3c3c8a1@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/realtek/r8169_main.c
drivers/net/ethernet/realtek/r8169_phy_config.c

index 907a482c012f56ba687ba0a9436c59429ce0df04..739707a7b40fb9c44f3c112fe84b4f29eec2c45d 100644 (file)
@@ -5228,6 +5228,12 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
                phy_support_eee(tp->phydev);
        phy_support_asym_pause(tp->phydev);
 
+       /* mimic behavior of r8125/r8126 vendor drivers */
+       if (tp->mac_version == RTL_GIGA_MAC_VER_61)
+               phy_set_eee_broken(tp->phydev,
+                                  ETHTOOL_LINK_MODE_2500baseT_Full_BIT);
+       phy_set_eee_broken(tp->phydev, ETHTOOL_LINK_MODE_5000baseT_Full_BIT);
+
        /* PHY will be woken up in rtl_open() */
        phy_suspend(tp->phydev);
 
index 1d5b33f6c4b5018a962e5a44fde380c9d21b7dc1..5307c6ff4e2523380771181364dc73cdd2485aa7 100644 (file)
@@ -96,15 +96,7 @@ static void rtl8125_common_config_eee_phy(struct phy_device *phydev)
        phy_modify_paged(phydev, 0xa4a, 0x11, 0x0200, 0x0000);
 }
 
-static void rtl8125a_config_eee_phy(struct phy_device *phydev)
-{
-       rtl8168g_config_eee_phy(phydev);
-       /* disable EEE at 2.5Gbps */
-       phy_modify_paged(phydev, 0xa6d, 0x12, 0x0001, 0x0000);
-       rtl8125_common_config_eee_phy(phydev);
-}
-
-static void rtl8125b_config_eee_phy(struct phy_device *phydev)
+static void rtl8125_config_eee_phy(struct phy_device *phydev)
 {
        rtl8168g_config_eee_phy(phydev);
        rtl8125_common_config_eee_phy(phydev);
@@ -1066,7 +1058,7 @@ static void rtl8125a_2_hw_phy_config(struct rtl8169_private *tp,
        rtl8168g_enable_gphy_10m(phydev);
 
        rtl8168g_disable_aldps(phydev);
-       rtl8125a_config_eee_phy(phydev);
+       rtl8125_config_eee_phy(phydev);
 }
 
 static void rtl8125b_hw_phy_config(struct rtl8169_private *tp,
@@ -1106,7 +1098,7 @@ static void rtl8125b_hw_phy_config(struct rtl8169_private *tp,
 
        rtl8125_legacy_force_mode(phydev);
        rtl8168g_disable_aldps(phydev);
-       rtl8125b_config_eee_phy(phydev);
+       rtl8125_config_eee_phy(phydev);
 }
 
 static void rtl8125d_hw_phy_config(struct rtl8169_private *tp,
@@ -1116,7 +1108,7 @@ static void rtl8125d_hw_phy_config(struct rtl8169_private *tp,
        rtl8168g_enable_gphy_10m(phydev);
        rtl8125_legacy_force_mode(phydev);
        rtl8168g_disable_aldps(phydev);
-       rtl8125b_config_eee_phy(phydev);
+       rtl8125_config_eee_phy(phydev);
 }
 
 static void rtl8126a_hw_phy_config(struct rtl8169_private *tp,