net: macb: Clear interrupt flags
A few interrupt flags were not cleared in the ISR, resulting in a sytem trapped in the ISR in cases one of those interrupts occurred. Clear all flags to avoid such situations. Signed-off-by: Soren Brinkmann <soren.brinkmann@xilinx.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ccd6d0a910
commit
6a027b705f
@ -951,6 +951,10 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
|
|||||||
if (unlikely(status & (MACB_TX_ERR_FLAGS))) {
|
if (unlikely(status & (MACB_TX_ERR_FLAGS))) {
|
||||||
macb_writel(bp, IDR, MACB_TX_INT_FLAGS);
|
macb_writel(bp, IDR, MACB_TX_INT_FLAGS);
|
||||||
schedule_work(&bp->tx_error_task);
|
schedule_work(&bp->tx_error_task);
|
||||||
|
|
||||||
|
if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE)
|
||||||
|
macb_writel(bp, ISR, MACB_TX_ERR_FLAGS);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -968,6 +972,9 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
|
|||||||
bp->hw_stats.gem.rx_overruns++;
|
bp->hw_stats.gem.rx_overruns++;
|
||||||
else
|
else
|
||||||
bp->hw_stats.macb.rx_overruns++;
|
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)) {
|
if (status & MACB_BIT(HRESP)) {
|
||||||
@ -977,6 +984,9 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
|
|||||||
* (work queue?)
|
* (work queue?)
|
||||||
*/
|
*/
|
||||||
netdev_err(dev, "DMA bus error: HRESP not OK\n");
|
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);
|
status = macb_readl(bp, ISR);
|
||||||
|
Loading…
Reference in New Issue
Block a user