]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: macb: set default_an_inband to true for SGMII
authorCharles Perry <charles.perry@microchip.com>
Fri, 13 Mar 2026 14:21:39 +0000 (07:21 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 17 Mar 2026 03:12:44 +0000 (20:12 -0700)
Most platforms using GEM in SGMII mode use in-band autonegotiation
because it is on by default in GEM's 1G PCS and is always on since
commit e276e5e40e92 ("net: macb: Disable PCS auto-negotiation for SGMII
fixed-link mode"). Leave it on if possible using the "default_an_inband"
flag of "struct phylink_config" so that platforms that lack in-band
autonegotiation configurability at the PHY do not break with commit
1338cfef1ff1 ("net: macb: fix SGMII with inband aneg disabled") which
will turn off in-band autoneg for non hot pluggable PHYs.

Once the majority of the PHY drivers that support SGMII have the
->config_inband() callback, this commit could be reverted so that non
hot pluggable PHY use outband negotiation with macb, like its the case
for other MACs.

Fixes: 1338cfef1ff1 ("net: macb: fix SGMII with inband aneg disabled")
Reported-by: Conor Dooley <conor.dooley@microchip.com>
Closes: https://lore.kernel.org/r/20260304-nebulizer-rounding-40fbc81a2ba1@spud
Signed-off-by: Charles Perry <charles.perry@microchip.com>
Tested-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/20260313142140.4040647-1-charles.perry@microchip.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/cadence/macb_main.c

index 5e27e0e87a553589093e1e8baa3bac35039a360b..63105a5f46a7dcbe6f4fa94ac72609e9da897954 100644 (file)
@@ -1029,6 +1029,12 @@ static int macb_mii_probe(struct net_device *dev)
        if (bp->phy_interface == PHY_INTERFACE_MODE_SGMII) {
                bp->phylink_config.poll_fixed_state = true;
                bp->phylink_config.get_fixed_state = macb_get_pcs_fixed_state;
+               /* The PCSAUTONEG bit in PCSCNTRL is on out of reset. Setting
+                * default_an_inband to true tells phylink to turn it off only
+                * if necessary (e.g. a fixed link or a PHY that doesn't support
+                * inband).
+                */
+               bp->phylink_config.default_an_inband = true;
        }
 
        bp->phylink_config.mac_capabilities = MAC_ASYM_PAUSE |