public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 1/2] net: macb: fix SGMII with inband aneg disabled
@ 2026-02-19 17:01 Charles Perry
  2026-02-19 17:01 ` [PATCH net-next 2/2] net: macb: add support for reporting SGMII inband link status Charles Perry
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Charles Perry @ 2026-02-19 17:01 UTC (permalink / raw)
  To: netdev
  Cc: Sean Anderson, Charles Perry, Nicolas Ferre, Claudiu Beznea,
	Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Russell King, linux-kernel

Make it possible to connect a PHY which does not use inband
autoneg to a gem MAC using phylink's information.

The previous implementation relied on whether or not the link
was a fixed-link to disable SGMII autoneg. This commit extend
this to all link which are not configured for inband
autonegotiation.

Signed-off-by: Charles Perry <charles.perry@microchip.com>
---

Notes:
    I'm testing with a VSC8574 PHY which phylink can configure in outband mode
    or in inband,an-enabled mode if I add a managed = "in-band-status" property
    in the device tree.
    
    The link can work with or without autoneg, as long as the MAC and the PHY
    are configured the same way. This doesn't work with the current MAC driver
    because the MAC inband autoned is always enabled.
    
    This is based on code written by Sean Anderson [1]. Let me know if I
    should add a From: or Co-developed-by: tag.
    
    [1]: https://lore.kernel.org/all/20250610233547.3588356-1-sean.anderson@linux.dev/

 drivers/net/ethernet/cadence/macb_main.c | 35 +++++++++++++-----------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index f72270a39d25..5002087cda09 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -574,6 +574,25 @@ static int macb_pcs_config(struct phylink_pcs *pcs,
 			   const unsigned long *advertising,
 			   bool permit_pause_to_mac)
 {
+	struct macb *bp = container_of(pcs, struct macb, phylink_sgmii_pcs);
+	unsigned long flags;
+	u32 old, new;
+
+	spin_lock_irqsave(&bp->lock, flags);
+	old = gem_readl(bp, PCSANADV);
+	new = phylink_mii_c22_pcs_encode_advertisement(interface, advertising);
+	if (new != -EINVAL && old != new)
+		gem_writel(bp, PCSANADV, new);
+
+	old = gem_readl(bp, PCSCNTRL);
+	if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED)
+		new = old | BMCR_ANENABLE;
+	else
+		new = old & ~BMCR_ANENABLE;
+	if (old != new)
+		gem_writel(bp, PCSCNTRL, new);
+
+	spin_unlock_irqrestore(&bp->lock, flags);
 	return 0;
 }
 
@@ -628,22 +647,6 @@ static void macb_mac_config(struct phylink_config *config, unsigned int mode,
 	if (old_ncr ^ ncr)
 		macb_or_gem_writel(bp, NCR, ncr);
 
-	/* Disable AN for SGMII fixed link configuration, enable otherwise.
-	 * Must be written after PCSSEL is set in NCFGR,
-	 * otherwise writes will not take effect.
-	 */
-	if (macb_is_gem(bp) && state->interface == PHY_INTERFACE_MODE_SGMII) {
-		u32 pcsctrl, old_pcsctrl;
-
-		old_pcsctrl = gem_readl(bp, PCSCNTRL);
-		if (mode == MLO_AN_FIXED)
-			pcsctrl = old_pcsctrl & ~GEM_BIT(PCSAUTONEG);
-		else
-			pcsctrl = old_pcsctrl | GEM_BIT(PCSAUTONEG);
-		if (old_pcsctrl != pcsctrl)
-			gem_writel(bp, PCSCNTRL, pcsctrl);
-	}
-
 	spin_unlock_irqrestore(&bp->lock, flags);
 }
 
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-02-19 17:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-19 17:01 [PATCH net-next 1/2] net: macb: fix SGMII with inband aneg disabled Charles Perry
2026-02-19 17:01 ` [PATCH net-next 2/2] net: macb: add support for reporting SGMII inband link status Charles Perry
2026-02-19 17:15   ` Russell King (Oracle)
2026-02-19 17:13 ` [PATCH net-next 1/2] net: macb: fix SGMII with inband aneg disabled Russell King (Oracle)
2026-02-19 17:19 ` Russell King (Oracle)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox