]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: stmmac: qcom-ethqos: move RGMII_CONFIG2_RX_PROG_SWAP
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 27 Mar 2026 08:44:14 +0000 (08:44 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 31 Mar 2026 00:36:45 +0000 (17:36 -0700)
Move RGMII_CONFIG2_RX_PROG_SWAP out of the switch. 1G speed always
sets this field. 100M and 10M sets it for has_emac_ge_3 devices,
otherwise it is cleared.

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

index 13f4df0a90d7a63b488704793314961c1437ed5f..b4c61cb24e1d9e22252414877f98c7a7f76d820f 100644 (file)
@@ -437,11 +437,15 @@ static int ethqos_rgmii_macro_init(struct qcom_ethqos *ethqos, int speed)
        rgmii_clrmask(ethqos, RGMII_CONFIG2_RSVD_CONFIG15,
                      RGMII_IO_MACRO_CONFIG2);
 
-       switch (speed) {
-       case SPEED_1000:
+       if (speed == SPEED_1000 || ethqos->has_emac_ge_3)
                rgmii_setmask(ethqos, RGMII_CONFIG2_RX_PROG_SWAP,
                              RGMII_IO_MACRO_CONFIG2);
+       else
+               rgmii_clrmask(ethqos, RGMII_CONFIG2_RX_PROG_SWAP,
+                             RGMII_IO_MACRO_CONFIG2);
 
+       switch (speed) {
+       case SPEED_1000:
                /* PRG_RCLK_DLY = TCXO period * TCXO_CYCLES_CNT / 2 * RX delay ns,
                 * in practice this becomes PRG_RCLK_DLY = 52 * 4 / 2 * RX delay ns
                 */
@@ -463,13 +467,6 @@ static int ethqos_rgmii_macro_init(struct qcom_ethqos *ethqos, int speed)
                break;
 
        case SPEED_100:
-               if (ethqos->has_emac_ge_3)
-                       rgmii_setmask(ethqos, RGMII_CONFIG2_RX_PROG_SWAP,
-                                     RGMII_IO_MACRO_CONFIG2);
-               else
-                       rgmii_clrmask(ethqos, RGMII_CONFIG2_RX_PROG_SWAP,
-                                     RGMII_IO_MACRO_CONFIG2);
-
                /* Write 0x5 to PRG_RCLK_DLY_CODE */
                rgmii_updatel(ethqos, SDCC_DDR_CONFIG_EXT_PRG_RCLK_DLY_CODE,
                              FIELD_PREP(SDCC_DDR_CONFIG_EXT_PRG_RCLK_DLY_CODE,
@@ -483,12 +480,6 @@ static int ethqos_rgmii_macro_init(struct qcom_ethqos *ethqos, int speed)
                break;
 
        case SPEED_10:
-               if (ethqos->has_emac_ge_3)
-                       rgmii_setmask(ethqos, RGMII_CONFIG2_RX_PROG_SWAP,
-                                     RGMII_IO_MACRO_CONFIG2);
-               else
-                       rgmii_clrmask(ethqos, RGMII_CONFIG2_RX_PROG_SWAP,
-                                     RGMII_IO_MACRO_CONFIG2);
                /* Write 0x5 to PRG_RCLK_DLY_CODE */
                rgmii_updatel(ethqos, SDCC_DDR_CONFIG_EXT_PRG_RCLK_DLY_CODE,
                              FIELD_PREP(SDCC_DDR_CONFIG_EXT_PRG_RCLK_DLY_CODE,