diff options
Diffstat (limited to 'drivers/net/dsa/microchip/ksz_common.c')
| -rw-r--r-- | drivers/net/dsa/microchip/ksz_common.c | 15 | 
1 files changed, 13 insertions, 2 deletions
| diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index 1e0085cd9a9a..0580b2fee21c 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -1382,6 +1382,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {  		.tc_cbs_supported = true,  		.ops = &ksz9477_dev_ops,  		.phylink_mac_ops = &ksz9477_phylink_mac_ops, +		.phy_errata_9477 = true,  		.mib_names = ksz9477_mib_names,  		.mib_cnt = ARRAY_SIZE(ksz9477_mib_names),  		.reg_mib_cnt = MIB_COUNTER_NUM, @@ -1416,6 +1417,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {  		.num_ipms = 8,  		.ops = &ksz9477_dev_ops,  		.phylink_mac_ops = &ksz9477_phylink_mac_ops, +		.phy_errata_9477 = true,  		.mib_names = ksz9477_mib_names,  		.mib_cnt = ARRAY_SIZE(ksz9477_mib_names),  		.reg_mib_cnt = MIB_COUNTER_NUM, @@ -1450,6 +1452,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {  		.num_ipms = 8,  		.ops = &ksz9477_dev_ops,  		.phylink_mac_ops = &ksz9477_phylink_mac_ops, +		.phy_errata_9477 = true,  		.mib_names = ksz9477_mib_names,  		.mib_cnt = ARRAY_SIZE(ksz9477_mib_names),  		.reg_mib_cnt = MIB_COUNTER_NUM, @@ -1540,6 +1543,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {  		.tc_cbs_supported = true,  		.ops = &ksz9477_dev_ops,  		.phylink_mac_ops = &ksz9477_phylink_mac_ops, +		.phy_errata_9477 = true,  		.mib_names = ksz9477_mib_names,  		.mib_cnt = ARRAY_SIZE(ksz9477_mib_names),  		.reg_mib_cnt = MIB_COUNTER_NUM, @@ -1820,6 +1824,7 @@ void ksz_r_mib_stats64(struct ksz_device *dev, int port)  	struct rtnl_link_stats64 *stats;  	struct ksz_stats_raw *raw;  	struct ksz_port_mib *mib; +	int ret;  	mib = &dev->ports[port].mib;  	stats = &mib->stats64; @@ -1861,6 +1866,12 @@ void ksz_r_mib_stats64(struct ksz_device *dev, int port)  	pstats->rx_pause_frames = raw->rx_pause;  	spin_unlock(&mib->stats64_lock); + +	if (dev->info->phy_errata_9477) { +		ret = ksz9477_errata_monitor(dev, port, raw->tx_late_col); +		if (ret) +			dev_err(dev->dev, "Failed to monitor transmission halt\n"); +	}  }  void ksz88xx_r_mib_stats64(struct ksz_device *dev, int port) @@ -2185,7 +2196,7 @@ static void ksz_irq_bus_sync_unlock(struct irq_data *d)  	struct ksz_device *dev = kirq->dev;  	int ret; -	ret = ksz_write32(dev, kirq->reg_mask, kirq->masked); +	ret = ksz_write8(dev, kirq->reg_mask, kirq->masked);  	if (ret)  		dev_err(dev->dev, "failed to change IRQ mask\n"); @@ -3142,7 +3153,7 @@ phy_interface_t ksz_get_xmii(struct ksz_device *dev, int port, bool gbit)  		else  			interface = PHY_INTERFACE_MODE_MII;  	} else if (val == bitval[P_RMII_SEL]) { -		interface = PHY_INTERFACE_MODE_RGMII; +		interface = PHY_INTERFACE_MODE_RMII;  	} else {  		interface = PHY_INTERFACE_MODE_RGMII;  		if (data8 & P_RGMII_ID_EG_ENABLE) |