]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: phy: dp83867: Disable EEE support as not implemented
authorEmanuele Ghidoli <emanuele.ghidoli@toradex.com>
Thu, 23 Oct 2025 14:48:53 +0000 (16:48 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 25 Oct 2025 02:10:03 +0000 (19:10 -0700)
While the DP83867 PHYs report EEE capability through their feature
registers, the actual hardware does not support EEE (see Links).
When the connected MAC enables EEE, it causes link instability and
communication failures.

The issue is reproducible with a iMX8MP and relevant stmmac ethernet port.
Since the introduction of phylink-managed EEE support in the stmmac driver,
EEE is now enabled by default, leading to issues on systems using the
DP83867 PHY.

Call phy_disable_eee during phy initialization to prevent EEE from being
enabled on DP83867 PHYs.

Link: https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1445244/dp83867ir-dp83867-disable-eee-lpi
Link: https://e2e.ti.com/support/interface-group/interface/f/interface-forum/658638/dp83867ir-eee-energy-efficient-ethernet
Fixes: 2a10154abcb7 ("net: phy: dp83867: Add TI dp83867 phy")
Cc: stable@vger.kernel.org
Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/20251023144857.529566-1-ghidoliemanuele@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/dp83867.c

index deeefb9625664793ede93e6b0d8db3652776f5ac..36a0c1b7f59c77cb001639401b6a04078b2ef17d 100644 (file)
@@ -738,6 +738,12 @@ static int dp83867_config_init(struct phy_device *phydev)
                        return ret;
        }
 
+       /* Although the DP83867 reports EEE capability through the
+        * MDIO_PCS_EEE_ABLE and MDIO_AN_EEE_ADV registers, the feature
+        * is not actually implemented in hardware.
+        */
+       phy_disable_eee(phydev);
+
        if (phy_interface_is_rgmii(phydev) ||
            phydev->interface == PHY_INTERFACE_MODE_SGMII) {
                val = phy_read(phydev, MII_DP83867_PHYCTRL);