|
@@ -316,10 +316,11 @@ static void macb_tx(struct macb *bp)
|
|
dev_dbg(&bp->pdev->dev, "macb_tx status = %02lx\n",
|
|
dev_dbg(&bp->pdev->dev, "macb_tx status = %02lx\n",
|
|
(unsigned long)status);
|
|
(unsigned long)status);
|
|
|
|
|
|
- if (status & MACB_BIT(UND)) {
|
|
|
|
|
|
+ if (status & (MACB_BIT(UND) | MACB_BIT(TSR_RLE))) {
|
|
int i;
|
|
int i;
|
|
- printk(KERN_ERR "%s: TX underrun, resetting buffers\n",
|
|
|
|
- bp->dev->name);
|
|
|
|
|
|
+ printk(KERN_ERR "%s: TX %s, resetting buffers\n",
|
|
|
|
+ bp->dev->name, status & MACB_BIT(UND) ?
|
|
|
|
+ "underrun" : "retry limit exceeded");
|
|
|
|
|
|
/* Transfer ongoing, disable transmitter, to avoid confusion */
|
|
/* Transfer ongoing, disable transmitter, to avoid confusion */
|
|
if (status & MACB_BIT(TGO))
|
|
if (status & MACB_BIT(TGO))
|
|
@@ -590,7 +591,8 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (status & (MACB_BIT(TCOMP) | MACB_BIT(ISR_TUND)))
|
|
|
|
|
|
+ if (status & (MACB_BIT(TCOMP) | MACB_BIT(ISR_TUND) |
|
|
|
|
+ MACB_BIT(ISR_RLE)))
|
|
macb_tx(bp);
|
|
macb_tx(bp);
|
|
|
|
|
|
/*
|
|
/*
|