Commit 21089867 authored by Russell King (Oracle)'s avatar Russell King (Oracle) Committed by Jakub Kicinski

net: mtk_eth_soc: move restoration of SYSCFG0 to mac_finish()

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: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 0e37ad71
...@@ -400,8 +400,8 @@ static void mtk_mac_config(struct phylink_config *config, unsigned int mode, ...@@ -400,8 +400,8 @@ static void mtk_mac_config(struct phylink_config *config, unsigned int mode,
if (err) if (err)
goto init_err; goto init_err;
regmap_update_bits(eth->ethsys, ETHSYS_SYSCFG0, /* Save the syscfg0 value for mac_finish */
SYSCFG0_SGMII_MASK, val); mac->syscfg0 = val;
} else if (phylink_autoneg_inband(mode)) { } else if (phylink_autoneg_inband(mode)) {
dev_err(eth->dev, dev_err(eth->dev,
"In-band mode not supported in non SGMII mode!\n"); "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, ...@@ -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, struct mtk_mac *mac = container_of(config, struct mtk_mac,
phylink_config); phylink_config);
struct mtk_eth *eth = mac->hw;
u32 mcr_cur, mcr_new; 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 */ /* Setup gmac */
mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id)); mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id));
mcr_new = mcr_cur; mcr_new = mcr_cur;
......
...@@ -1001,6 +1001,7 @@ struct mtk_mac { ...@@ -1001,6 +1001,7 @@ struct mtk_mac {
struct mtk_hw_stats *hw_stats; struct mtk_hw_stats *hw_stats;
__be32 hwlro_ip[MTK_MAX_LRO_IP_CNT]; __be32 hwlro_ip[MTK_MAX_LRO_IP_CNT];
int hwlro_ip_cnt; int hwlro_ip_cnt;
unsigned int syscfg0;
}; };
/* the struct describing the SoC. these are declared in the soc_xyz.c files */ /* the struct describing the SoC. these are declared in the soc_xyz.c files */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment