diff options
Diffstat (limited to 'drivers/net/dsa/mt7530.c')
| -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:  | 
