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:
Родитель
ccd6d0a910
Коммит
6a027b705f
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче