]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: stmmac: qcom-ethqos: use phy interface mode for inband
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 23 Feb 2026 09:34:51 +0000 (09:34 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 25 Feb 2026 01:43:23 +0000 (17:43 -0800)
qcom-ethqos currently forces inband to be enabled for the Cisco SGMII
speeds (1G, 100M and 10M) but not for 2500BASE-X (2.5G).

Rather than using the speed to determine the forced inband state, use
phylink's PHY interface mode which will switch between SGMII for the
10M, 100M and 1G speeds, and 2500BASE-X for 2.5G.

Reviewed-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
Tested-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1vuSL5-0000000AScX-2wuM@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c

index e2dd334ffd31cf29e966241d5aa1a1b9b44b4e1a..cd6d1660bdb2885b502176a38bb1c83a47980a02 100644 (file)
@@ -615,30 +615,26 @@ static void ethqos_configure_sgmii(struct qcom_ethqos *ethqos,
 
        switch (speed) {
        case SPEED_2500:
-               rgmii_setmask(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
-                             RGMII_IO_MACRO_CONFIG2);
-               ethqos_set_serdes_speed(ethqos, SPEED_2500);
-               ethqos_pcs_set_inband(priv, false);
-               break;
        case SPEED_1000:
                rgmii_setmask(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
                              RGMII_IO_MACRO_CONFIG2);
-               ethqos_set_serdes_speed(ethqos, SPEED_1000);
-               ethqos_pcs_set_inband(priv, true);
                break;
        case SPEED_100:
-               ethqos_set_serdes_speed(ethqos, SPEED_1000);
-               ethqos_pcs_set_inband(priv, true);
                break;
        case SPEED_10:
                rgmii_updatel(ethqos, RGMII_CONFIG_SGMII_CLK_DVDR,
                              FIELD_PREP(RGMII_CONFIG_SGMII_CLK_DVDR,
                                         SGMII_10M_RX_CLK_DVDR),
                              RGMII_IO_MACRO_CONFIG);
-               ethqos_set_serdes_speed(ethqos, SPEED_1000);
-               ethqos_pcs_set_inband(priv, true);
                break;
        }
+
+       if (interface == PHY_INTERFACE_MODE_SGMII)
+               ethqos_set_serdes_speed(ethqos, SPEED_1000);
+       else
+               ethqos_set_serdes_speed(ethqos, SPEED_2500);
+
+       ethqos_pcs_set_inband(priv, interface == PHY_INTERFACE_MODE_SGMII);
 }
 
 static void ethqos_configure(struct qcom_ethqos *ethqos,