diff options
| -rw-r--r-- | drivers/net/ethernet/cadence/macb.c | 10 | 
1 files changed, 10 insertions, 0 deletions
| diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index 18fdcd9d51b3..e38fe39d9589 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c @@ -951,6 +951,10 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)  		if (unlikely(status & (MACB_TX_ERR_FLAGS))) {  			macb_writel(bp, IDR, MACB_TX_INT_FLAGS);  			schedule_work(&bp->tx_error_task); + +			if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE) +				macb_writel(bp, ISR, MACB_TX_ERR_FLAGS); +  			break;  		} @@ -968,6 +972,9 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)  				bp->hw_stats.gem.rx_overruns++;  			else  				bp->hw_stats.macb.rx_overruns++; + +			if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE) +				macb_writel(bp, ISR, MACB_BIT(ISR_ROVR));  		}  		if (status & MACB_BIT(HRESP)) { @@ -977,6 +984,9 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)  			 * (work queue?)  			 */  			netdev_err(dev, "DMA bus error: HRESP not OK\n"); + +			if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE) +				macb_writel(bp, ISR, MACB_BIT(HRESP));  		}  		status = macb_readl(bp, ISR); |