|
@@ -891,16 +891,15 @@ static int macb_poll(struct napi_struct *napi, int budget)
|
|
if (work_done < budget) {
|
|
if (work_done < budget) {
|
|
napi_complete(napi);
|
|
napi_complete(napi);
|
|
|
|
|
|
- /*
|
|
|
|
- * We've done what we can to clean the buffers. Make sure we
|
|
|
|
- * get notified when new packets arrive.
|
|
|
|
- */
|
|
|
|
- macb_writel(bp, IER, MACB_RX_INT_FLAGS);
|
|
|
|
-
|
|
|
|
/* Packets received while interrupts were disabled */
|
|
/* Packets received while interrupts were disabled */
|
|
status = macb_readl(bp, RSR);
|
|
status = macb_readl(bp, RSR);
|
|
- if (unlikely(status))
|
|
|
|
|
|
+ if (unlikely(status)) {
|
|
|
|
+ if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE)
|
|
|
|
+ macb_writel(bp, ISR, MACB_BIT(RCOMP));
|
|
napi_reschedule(napi);
|
|
napi_reschedule(napi);
|
|
|
|
+ } else {
|
|
|
|
+ macb_writel(bp, IER, MACB_RX_INT_FLAGS);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/* TODO: Handle errors */
|
|
/* TODO: Handle errors */
|