net: stmmac: move reverse-"pcs" mode setup to stmmac_check_pcs_mode()

JIRA: https://issues.redhat.com/browse/RHEL-128151

commit c7b0d7874de0db6ce24bae3530ee91309aa2ff4e
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Thu Oct 16 15:37:22 2025 +0100

    net: stmmac: move reverse-"pcs" mode setup to stmmac_check_pcs_mode()

    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>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
This commit is contained in:
Izabela Bakollari
2026-04-29 09:46:23 +02:00
parent fc8f210121
commit eb99e8c352
@@ -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);