diff options
author | Jakub Kicinski <kuba@kernel.org> | 2022-09-23 06:58:53 -0700 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-09-23 06:58:54 -0700 |
commit | 6bf8e846e4bf336db7e451a6b42ca8c02f99fb0f (patch) | |
tree | a74996d7f4b648cd75d0691c33db2b1d6812c61b | |
parent | f8497b3e9650a0d094a3995c644dfedd32e8cde7 (diff) | |
parent | 728c2af6ad8c809f66639b70e4fd8c67c57c66e7 (diff) | |
download | linux-6bf8e846e4bf336db7e451a6b42ca8c02f99fb0f.tar.gz |
Merge branch 'net-mt7531-pll-reset-fixes'
Alexander Couzens says:
====================
net: mt7531: pll & reset fixes
====================
Link: https://lore.kernel.org/r/20220917000734.520253-1-lynxis@fe80.eu
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r-- | drivers/net/dsa/mt7530.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 835807911be0..409d5c3d76ea 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -506,14 +506,19 @@ static bool mt7531_dual_sgmii_supported(struct mt7530_priv *priv) static int mt7531_pad_setup(struct dsa_switch *ds, phy_interface_t interface) { - struct mt7530_priv *priv = ds->priv; + return 0; +} + +static void +mt7531_pll_setup(struct mt7530_priv *priv) +{ u32 top_sig; u32 hwstrap; u32 xtal; u32 val; if (mt7531_dual_sgmii_supported(priv)) - return 0; + return; val = mt7530_read(priv, MT7531_CREV); top_sig = mt7530_read(priv, MT7531_TOP_SIG_SR); @@ -592,8 +597,6 @@ mt7531_pad_setup(struct dsa_switch *ds, phy_interface_t interface) val |= EN_COREPLL; mt7530_write(priv, MT7531_PLLGP_EN, val); usleep_range(25, 35); - - return 0; } static void @@ -2326,11 +2329,17 @@ mt7531_setup(struct dsa_switch *ds) return -ENODEV; } + /* all MACs must be forced link-down before sw reset */ + for (i = 0; i < MT7530_NUM_PORTS; i++) + mt7530_write(priv, MT7530_PMCR_P(i), MT7531_FORCE_LNK); + /* Reset the switch through internal reset */ mt7530_write(priv, MT7530_SYS_CTRL, SYS_CTRL_PHY_RST | SYS_CTRL_SW_RST | SYS_CTRL_REG_RST); + mt7531_pll_setup(priv); + if (mt7531_dual_sgmii_supported(priv)) { priv->p5_intf_sel = P5_INTF_SEL_GMAC5_SGMII; @@ -2887,8 +2896,6 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) case 6: interface = PHY_INTERFACE_MODE_2500BASEX; - mt7531_pad_setup(ds, interface); - priv->p6_interface = interface; break; default: |