|
@@ -981,7 +981,7 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
|
|
|
struct macb_queue *queue = dev_id;
|
|
struct macb_queue *queue = dev_id;
|
|
|
struct macb *bp = queue->bp;
|
|
struct macb *bp = queue->bp;
|
|
|
struct net_device *dev = bp->dev;
|
|
struct net_device *dev = bp->dev;
|
|
|
- u32 status;
|
|
|
|
|
|
|
+ u32 status, ctrl;
|
|
|
|
|
|
|
|
status = queue_readl(queue, ISR);
|
|
status = queue_readl(queue, ISR);
|
|
|
|
|
|
|
@@ -1037,6 +1037,15 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id)
|
|
|
* add that if/when we get our hands on a full-blown MII PHY.
|
|
* add that if/when we get our hands on a full-blown MII PHY.
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
|
|
+ if (status & MACB_BIT(RXUBR)) {
|
|
|
|
|
+ ctrl = macb_readl(bp, NCR);
|
|
|
|
|
+ macb_writel(bp, NCR, ctrl & ~MACB_BIT(RE));
|
|
|
|
|
+ macb_writel(bp, NCR, ctrl | MACB_BIT(RE));
|
|
|
|
|
+
|
|
|
|
|
+ if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE)
|
|
|
|
|
+ macb_writel(bp, ISR, MACB_BIT(RXUBR));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (status & MACB_BIT(ISR_ROVR)) {
|
|
if (status & MACB_BIT(ISR_ROVR)) {
|
|
|
/* We missed at least one packet */
|
|
/* We missed at least one packet */
|
|
|
if (macb_is_gem(bp))
|
|
if (macb_is_gem(bp))
|