681b234fc5adf79314314eb4a401532186cf141c
[openwrt/staging/stintel.git] /
1 From 2c67301584f2671e320236df6bbe75ae09feb4d0 Mon Sep 17 00:00:00 2001
2 From: Marek Vasut <marek.vasut@mailbox.org>
3 Date: Sat, 11 Oct 2025 13:02:49 +0200
4 Subject: [PATCH] net: phy: realtek: Avoid PHYCR2 access if PHYCR2 not present
5
6 The driver is currently checking for PHYCR2 register presence in
7 rtl8211f_config_init(), but it does so after accessing PHYCR2 to
8 disable EEE. This was introduced in commit bfc17c165835 ("net:
9 phy: realtek: disable PHY-mode EEE"). Move the PHYCR2 presence
10 test before the EEE disablement and simplify the code.
11
12 Fixes: bfc17c165835 ("net: phy: realtek: disable PHY-mode EEE")
13 Signed-off-by: Marek Vasut <marek.vasut@mailbox.org>
14 Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
15 Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
16 Link: https://patch.msgid.link/20251011110309.12664-1-marek.vasut@mailbox.org
17 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
18 ---
19 drivers/net/phy/realtek/realtek_main.c | 23 +++++++++++------------
20 1 file changed, 11 insertions(+), 12 deletions(-)
21
22 --- a/drivers/net/phy/realtek/realtek_main.c
23 +++ b/drivers/net/phy/realtek/realtek_main.c
24 @@ -589,26 +589,25 @@ static int rtl8211f_config_init(struct p
25 str_enabled_disabled(val_rxdly));
26 }
27
28 + if (!priv->has_phycr2)
29 + return 0;
30 +
31 /* Disable PHY-mode EEE so LPI is passed to the MAC */
32 ret = phy_modify_paged(phydev, RTL8211F_PHYCR_PAGE, RTL8211F_PHYCR2,
33 RTL8211F_PHYCR2_PHY_EEE_ENABLE, 0);
34 if (ret)
35 return ret;
36
37 - if (priv->has_phycr2) {
38 - ret = phy_modify_paged(phydev, RTL8211F_PHYCR_PAGE,
39 - RTL8211F_PHYCR2, RTL8211F_CLKOUT_EN,
40 - priv->phycr2);
41 - if (ret < 0) {
42 - dev_err(dev, "clkout configuration failed: %pe\n",
43 - ERR_PTR(ret));
44 - return ret;
45 - }
46 -
47 - return genphy_soft_reset(phydev);
48 + ret = phy_modify_paged(phydev, RTL8211F_PHYCR_PAGE,
49 + RTL8211F_PHYCR2, RTL8211F_CLKOUT_EN,
50 + priv->phycr2);
51 + if (ret < 0) {
52 + dev_err(dev, "clkout configuration failed: %pe\n",
53 + ERR_PTR(ret));
54 + return ret;
55 }
56
57 - return 0;
58 + return genphy_soft_reset(phydev);
59 }
60
61 static int rtl821x_suspend(struct phy_device *phydev)