diff options
Diffstat (limited to 'drivers/net/dsa/microchip')
| -rw-r--r-- | drivers/net/dsa/microchip/ksz8795.c | 8 | ||||
| -rw-r--r-- | drivers/net/dsa/microchip/ksz_common.c | 8 | ||||
| -rw-r--r-- | drivers/net/dsa/microchip/ksz_common.h | 7 | 
3 files changed, 18 insertions, 5 deletions
diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchip/ksz8795.c index 84d502589f8e..91aba470fb2f 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -506,7 +506,13 @@ static int ksz8_r_sta_mac_table(struct ksz_device *dev, u16 addr,  		(data_hi & masks[STATIC_MAC_TABLE_FWD_PORTS]) >>  			shifts[STATIC_MAC_FWD_PORTS];  	alu->is_override = (data_hi & masks[STATIC_MAC_TABLE_OVERRIDE]) ? 1 : 0; -	data_hi >>= 1; + +	/* KSZ8795 family switches have STATIC_MAC_TABLE_USE_FID and +	 * STATIC_MAC_TABLE_FID definitions off by 1 when doing read on the +	 * static MAC table compared to doing write. +	 */ +	if (ksz_is_ksz87xx(dev)) +		data_hi >>= 1;  	alu->is_static = true;  	alu->is_use_fid = (data_hi & masks[STATIC_MAC_TABLE_USE_FID]) ? 1 : 0;  	alu->fid = (data_hi & masks[STATIC_MAC_TABLE_FID]) >> diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index 813b91a816bb..b18cd170ec06 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -331,13 +331,13 @@ static const u32 ksz8795_masks[] = {  	[STATIC_MAC_TABLE_VALID]	= BIT(21),  	[STATIC_MAC_TABLE_USE_FID]	= BIT(23),  	[STATIC_MAC_TABLE_FID]		= GENMASK(30, 24), -	[STATIC_MAC_TABLE_OVERRIDE]	= BIT(26), -	[STATIC_MAC_TABLE_FWD_PORTS]	= GENMASK(24, 20), +	[STATIC_MAC_TABLE_OVERRIDE]	= BIT(22), +	[STATIC_MAC_TABLE_FWD_PORTS]	= GENMASK(20, 16),  	[DYNAMIC_MAC_TABLE_ENTRIES_H]	= GENMASK(6, 0), -	[DYNAMIC_MAC_TABLE_MAC_EMPTY]	= BIT(8), +	[DYNAMIC_MAC_TABLE_MAC_EMPTY]	= BIT(7),  	[DYNAMIC_MAC_TABLE_NOT_READY]	= BIT(7),  	[DYNAMIC_MAC_TABLE_ENTRIES]	= GENMASK(31, 29), -	[DYNAMIC_MAC_TABLE_FID]		= GENMASK(26, 20), +	[DYNAMIC_MAC_TABLE_FID]		= GENMASK(22, 16),  	[DYNAMIC_MAC_TABLE_SRC_PORT]	= GENMASK(26, 24),  	[DYNAMIC_MAC_TABLE_TIMESTAMP]	= GENMASK(28, 27),  	[P_MII_TX_FLOW_CTRL]		= BIT(5), diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/microchip/ksz_common.h index 28444e5924f9..a4de58847dea 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -601,6 +601,13 @@ static inline void ksz_regmap_unlock(void *__mtx)  	mutex_unlock(mtx);  } +static inline bool ksz_is_ksz87xx(struct ksz_device *dev) +{ +	return dev->chip_id == KSZ8795_CHIP_ID || +	       dev->chip_id == KSZ8794_CHIP_ID || +	       dev->chip_id == KSZ8765_CHIP_ID; +} +  static inline bool ksz_is_ksz88x3(struct ksz_device *dev)  {  	return dev->chip_id == KSZ8830_CHIP_ID;  |