]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: phy: realtek: Avoid PHYCR2 access if PHYCR2 not present
authorMarek Vasut <marek.vasut@mailbox.org>
Sat, 11 Oct 2025 11:02:49 +0000 (13:02 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 14 Oct 2025 00:46:01 +0000 (17:46 -0700)
The driver is currently checking for PHYCR2 register presence in
rtl8211f_config_init(), but it does so after accessing PHYCR2 to
disable EEE. This was introduced in commit bfc17c165835 ("net:
phy: realtek: disable PHY-mode EEE"). Move the PHYCR2 presence
test before the EEE disablement and simplify the code.

Fixes: bfc17c165835 ("net: phy: realtek: disable PHY-mode EEE")
Signed-off-by: Marek Vasut <marek.vasut@mailbox.org>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/20251011110309.12664-1-marek.vasut@mailbox.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/realtek/realtek_main.c

index 82d8e1335215d3af1fa12d3f9c5160ac4bd8324f..a724b21b4fe73cfb96137b2bf83b9fec987fd45a 100644 (file)
@@ -633,26 +633,25 @@ static int rtl8211f_config_init(struct phy_device *phydev)
                        str_enabled_disabled(val_rxdly));
        }
 
+       if (!priv->has_phycr2)
+               return 0;
+
        /* Disable PHY-mode EEE so LPI is passed to the MAC */
        ret = phy_modify_paged(phydev, RTL8211F_PHYCR_PAGE, RTL8211F_PHYCR2,
                               RTL8211F_PHYCR2_PHY_EEE_ENABLE, 0);
        if (ret)
                return ret;
 
-       if (priv->has_phycr2) {
-               ret = phy_modify_paged(phydev, RTL8211F_PHYCR_PAGE,
-                                      RTL8211F_PHYCR2, RTL8211F_CLKOUT_EN,
-                                      priv->phycr2);
-               if (ret < 0) {
-                       dev_err(dev, "clkout configuration failed: %pe\n",
-                               ERR_PTR(ret));
-                       return ret;
-               }
-
-               return genphy_soft_reset(phydev);
+       ret = phy_modify_paged(phydev, RTL8211F_PHYCR_PAGE,
+                              RTL8211F_PHYCR2, RTL8211F_CLKOUT_EN,
+                              priv->phycr2);
+       if (ret < 0) {
+               dev_err(dev, "clkout configuration failed: %pe\n",
+                       ERR_PTR(ret));
+               return ret;
        }
 
-       return 0;
+       return genphy_soft_reset(phydev);
 }
 
 static int rtl821x_suspend(struct phy_device *phydev)