]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: mtk_eth_soc: move restoration of SYSCFG0 to mac_finish()
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Wed, 18 May 2022 14:55:17 +0000 (15:55 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 20 May 2022 01:14:30 +0000 (18:14 -0700)
The SGMIISYS configuration is performed while ETHSYS_SYSCFG0 is in a
disabled state. In order to preserve this when we switch to phylink_pcs
we need to move the restoration of this register to the mac_finish()
callback.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mediatek/mtk_eth_soc.c
drivers/net/ethernet/mediatek/mtk_eth_soc.h

index d9947faa2cd329828fff7212630a5fb3dd603259..6dca98de0067b79b0e2a639e4fc56b78836f33f8 100644 (file)
@@ -400,8 +400,8 @@ static void mtk_mac_config(struct phylink_config *config, unsigned int mode,
                if (err)
                        goto init_err;
 
-               regmap_update_bits(eth->ethsys, ETHSYS_SYSCFG0,
-                                  SYSCFG0_SGMII_MASK, val);
+               /* Save the syscfg0 value for mac_finish */
+               mac->syscfg0 = val;
        } else if (phylink_autoneg_inband(mode)) {
                dev_err(eth->dev,
                        "In-band mode not supported in non SGMII mode!\n");
@@ -425,8 +425,15 @@ static int mtk_mac_finish(struct phylink_config *config, unsigned int mode,
 {
        struct mtk_mac *mac = container_of(config, struct mtk_mac,
                                           phylink_config);
+       struct mtk_eth *eth = mac->hw;
        u32 mcr_cur, mcr_new;
 
+       /* Enable SGMII */
+       if (interface == PHY_INTERFACE_MODE_SGMII ||
+           phy_interface_mode_is_8023z(interface))
+               regmap_update_bits(eth->ethsys, ETHSYS_SYSCFG0,
+                                  SYSCFG0_SGMII_MASK, mac->syscfg0);
+
        /* Setup gmac */
        mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
        mcr_new = mcr_cur;
index fa3c085bf7ed0fbd25e1b454fe17ff200b342085..1ad5c26f01fbf390d9ed0c89012d32013f47fc22 100644 (file)
@@ -1001,6 +1001,7 @@ struct mtk_mac {
        struct mtk_hw_stats             *hw_stats;
        __be32                          hwlro_ip[MTK_MAX_LRO_IP_CNT];
        int                             hwlro_ip_cnt;
+       unsigned int                    syscfg0;
 };
 
 /* the struct describing the SoC. these are declared in the soc_xyz.c files */