diff options
Diffstat (limited to 'drivers/net/ethernet/cadence/macb.c')
-rw-r--r-- | drivers/net/ethernet/cadence/macb.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index 97c664611e84..e7c10b0addb5 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c | |||
@@ -983,7 +983,7 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id) | |||
983 | struct macb_queue *queue = dev_id; | 983 | struct macb_queue *queue = dev_id; |
984 | struct macb *bp = queue->bp; | 984 | struct macb *bp = queue->bp; |
985 | struct net_device *dev = bp->dev; | 985 | struct net_device *dev = bp->dev; |
986 | u32 status; | 986 | u32 status, ctrl; |
987 | 987 | ||
988 | status = queue_readl(queue, ISR); | 988 | status = queue_readl(queue, ISR); |
989 | 989 | ||
@@ -1039,6 +1039,15 @@ static irqreturn_t macb_interrupt(int irq, void *dev_id) | |||
1039 | * add that if/when we get our hands on a full-blown MII PHY. | 1039 | * add that if/when we get our hands on a full-blown MII PHY. |
1040 | */ | 1040 | */ |
1041 | 1041 | ||
1042 | if (status & MACB_BIT(RXUBR)) { | ||
1043 | ctrl = macb_readl(bp, NCR); | ||
1044 | macb_writel(bp, NCR, ctrl & ~MACB_BIT(RE)); | ||
1045 | macb_writel(bp, NCR, ctrl | MACB_BIT(RE)); | ||
1046 | |||
1047 | if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE) | ||
1048 | macb_writel(bp, ISR, MACB_BIT(RXUBR)); | ||
1049 | } | ||
1050 | |||
1042 | if (status & MACB_BIT(ISR_ROVR)) { | 1051 | if (status & MACB_BIT(ISR_ROVR)) { |
1043 | /* We missed at least one packet */ | 1052 | /* We missed at least one packet */ |
1044 | if (macb_is_gem(bp)) | 1053 | if (macb_is_gem(bp)) |