]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: stmmac: move reverse-"pcs" mode setup to stmmac_check_pcs_mode()
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Thu, 16 Oct 2025 14:37:22 +0000 (15:37 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 21 Oct 2025 00:17:15 +0000 (17:17 -0700)
The broken reverse-mode, selected by snps,ps-speed, is configured when
the platform provides a valid port speed and a PCS is being used.

Both these remain constant after the driver has probed, so the software
state doesn't need to be re-initialised each time stmmac_hw_setup() is
called (which is called at open and resume time.)

Move the software setup of reverse-mode to stmmac_check_pcs_mode()
which is called from the driver probe function.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Tested-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/E1v9P6Y-0000000Aolr-0vLH@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index f160c5bd25b2a816724328578bb7f5222383f788..9a8dacf18c14c6031f292322648eb4b74fce8654 100644 (file)
@@ -1091,6 +1091,19 @@ static void stmmac_check_pcs_mode(struct stmmac_priv *priv)
                netdev_dbg(priv->dev, "PCS SGMII support enabled\n");
                priv->hw->pcs = STMMAC_PCS_SGMII;
        }
+
+       /* PS and related bits will be programmed according to the speed */
+       if (priv->hw->pcs) {
+               int speed = priv->plat->mac_port_sel_speed;
+
+               if ((speed == SPEED_10) || (speed == SPEED_100) ||
+                   (speed == SPEED_1000)) {
+                       priv->hw->ps = speed;
+               } else {
+                       dev_warn(priv->device, "invalid port speed\n");
+                       priv->hw->ps = 0;
+               }
+       }
 }
 
 /**
@@ -3435,19 +3448,6 @@ static int stmmac_hw_setup(struct net_device *dev)
        stmmac_set_umac_addr(priv, priv->hw, dev->dev_addr, 0);
        phylink_rx_clk_stop_unblock(priv->phylink);
 
-       /* PS and related bits will be programmed according to the speed */
-       if (priv->hw->pcs) {
-               int speed = priv->plat->mac_port_sel_speed;
-
-               if ((speed == SPEED_10) || (speed == SPEED_100) ||
-                   (speed == SPEED_1000)) {
-                       priv->hw->ps = speed;
-               } else {
-                       dev_warn(priv->device, "invalid port speed\n");
-                       priv->hw->ps = 0;
-               }
-       }
-
        /* Initialize the MAC Core */
        stmmac_core_init(priv, priv->hw, dev);