]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: stmmac: fix EEE supportable interfaces
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 23 Feb 2026 12:17:13 +0000 (12:17 +0000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 26 Feb 2026 02:51:19 +0000 (18:51 -0800)
According to the dwmac v3.74a databook, only MII, GMII and RGMII dwmac
interface modes are supported for EEE. Restrict EEE to these modes, or
the modules supported by a PCS other than the GMAC's integrated PCS.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1vuUsD-0000000Afci-0XxO@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index d7c730179a7f5ea77a06bfe30d7b7a7b5bae8004..b18405626aa58502b45f09789cc52721c59af929 100644 (file)
@@ -1375,9 +1375,21 @@ static int stmmac_phylink_setup(struct stmmac_priv *priv)
                                 pcs->supported_interfaces);
 
        if (priv->dma_cap.eee) {
-               /* Assume all supported interfaces also support LPI */
-               memcpy(config->lpi_interfaces, config->supported_interfaces,
-                      sizeof(config->lpi_interfaces));
+               /* The GMAC 3.74a databook states that EEE is only supported
+                * in MII, GMII, and RGMII interfaces.
+                */
+               __set_bit(PHY_INTERFACE_MODE_MII, config->lpi_interfaces);
+               __set_bit(PHY_INTERFACE_MODE_GMII, config->lpi_interfaces);
+               phy_interface_set_rgmii(config->lpi_interfaces);
+
+               /* If we have a non-integrated PCS, assume that it is connected
+                * to the GMAC using GMII or another EEE compatible interface,
+                * and thus all PCS-supported interfaces support LPI.
+                */
+               if (pcs)
+                       phy_interface_or(config->lpi_interfaces,
+                                        config->lpi_interfaces,
+                                        pcs->supported_interfaces);
 
                /* All full duplex speeds above 100Mbps are supported */
                config->lpi_capabilities = ~(MAC_1000FD - 1) | MAC_100FD;