diff options
Diffstat (limited to 'drivers/net/dsa/microchip/lan937x_main.c')
| -rw-r--r-- | drivers/net/dsa/microchip/lan937x_main.c | 32 | 
1 files changed, 24 insertions, 8 deletions
| diff --git a/drivers/net/dsa/microchip/lan937x_main.c b/drivers/net/dsa/microchip/lan937x_main.c index b479a628b1ae..824d9309a3d3 100644 --- a/drivers/net/dsa/microchip/lan937x_main.c +++ b/drivers/net/dsa/microchip/lan937x_main.c @@ -55,6 +55,9 @@ static int lan937x_vphy_ind_addr_wr(struct ksz_device *dev, int addr, int reg)  	u16 addr_base = REG_PORT_T1_PHY_CTRL_BASE;  	u16 temp; +	if (is_lan937x_tx_phy(dev, addr)) +		addr_base = REG_PORT_TX_PHY_CTRL_BASE; +  	/* get register address based on the logical port */  	temp = PORT_CTRL_ADDR(addr, (addr_base + (reg << 2))); @@ -320,6 +323,9 @@ void lan937x_phylink_get_caps(struct ksz_device *dev, int port,  		/* MII/RMII/RGMII ports */  		config->mac_capabilities |= MAC_ASYM_PAUSE | MAC_SYM_PAUSE |  					    MAC_100HD | MAC_10 | MAC_1000FD; +	} else if (is_lan937x_tx_phy(dev, port)) { +		config->mac_capabilities |= MAC_ASYM_PAUSE | MAC_SYM_PAUSE | +					    MAC_100HD | MAC_10;  	}  } @@ -370,23 +376,33 @@ int lan937x_setup(struct dsa_switch *ds)  	ds->vlan_filtering_is_global = true;  	/* Enable aggressive back off for half duplex & UNH mode */ -	lan937x_cfg(dev, REG_SW_MAC_CTRL_0, -		    (SW_PAUSE_UNH_MODE | SW_NEW_BACKOFF | SW_AGGR_BACKOFF), -		    true); +	ret = lan937x_cfg(dev, REG_SW_MAC_CTRL_0, (SW_PAUSE_UNH_MODE | +						   SW_NEW_BACKOFF | +						   SW_AGGR_BACKOFF), true); +	if (ret < 0) +		return ret;  	/* If NO_EXC_COLLISION_DROP bit is set, the switch will not drop  	 * packets when 16 or more collisions occur  	 */ -	lan937x_cfg(dev, REG_SW_MAC_CTRL_1, NO_EXC_COLLISION_DROP, true); +	ret = lan937x_cfg(dev, REG_SW_MAC_CTRL_1, NO_EXC_COLLISION_DROP, true); +	if (ret < 0) +		return ret;  	/* enable global MIB counter freeze function */ -	lan937x_cfg(dev, REG_SW_MAC_CTRL_6, SW_MIB_COUNTER_FREEZE, true); +	ret = lan937x_cfg(dev, REG_SW_MAC_CTRL_6, SW_MIB_COUNTER_FREEZE, true); +	if (ret < 0) +		return ret;  	/* disable CLK125 & CLK25, 1: disable, 0: enable */ -	lan937x_cfg(dev, REG_SW_GLOBAL_OUTPUT_CTRL__1, -		    (SW_CLK125_ENB | SW_CLK25_ENB), true); +	ret = lan937x_cfg(dev, REG_SW_GLOBAL_OUTPUT_CTRL__1, +			  (SW_CLK125_ENB | SW_CLK25_ENB), true); +	if (ret < 0) +		return ret; -	return 0; +	/* Disable global VPHY support. Related to CPU interface only? */ +	return ksz_rmw32(dev, REG_SW_CFG_STRAP_OVR, SW_VPHY_DISABLE, +			 SW_VPHY_DISABLE);  }  void lan937x_teardown(struct dsa_switch *ds) |