aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/r6040.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c
index cc5e316de571..990612328ca1 100644
--- a/drivers/net/r6040.c
+++ b/drivers/net/r6040.c
@@ -680,8 +680,10 @@ static irqreturn_t r6040_interrupt(int irq, void *dev_id)
680 struct net_device *dev = dev_id; 680 struct net_device *dev = dev_id;
681 struct r6040_private *lp = netdev_priv(dev); 681 struct r6040_private *lp = netdev_priv(dev);
682 void __iomem *ioaddr = lp->base; 682 void __iomem *ioaddr = lp->base;
683 u16 status; 683 u16 misr, status;
684 684
685 /* Save MIER */
686 misr = ioread16(ioaddr + MIER);
685 /* Mask off RDC MAC interrupt */ 687 /* Mask off RDC MAC interrupt */
686 iowrite16(MSK_INT, ioaddr + MIER); 688 iowrite16(MSK_INT, ioaddr + MIER);
687 /* Read MISR status and clear */ 689 /* Read MISR status and clear */
@@ -701,7 +703,7 @@ static irqreturn_t r6040_interrupt(int irq, void *dev_id)
701 dev->stats.rx_fifo_errors++; 703 dev->stats.rx_fifo_errors++;
702 704
703 /* Mask off RX interrupt */ 705 /* Mask off RX interrupt */
704 iowrite16(ioread16(ioaddr + MIER) & ~RX_INTS, ioaddr + MIER); 706 misr &= ~RX_INTS;
705 netif_rx_schedule(dev, &lp->napi); 707 netif_rx_schedule(dev, &lp->napi);
706 } 708 }
707 709
@@ -709,6 +711,9 @@ static irqreturn_t r6040_interrupt(int irq, void *dev_id)
709 if (status & TX_INTS) 711 if (status & TX_INTS)
710 r6040_tx(dev); 712 r6040_tx(dev);
711 713
714 /* Restore RDC MAC interrupt */
715 iowrite16(misr, ioaddr + MIER);
716
712 return IRQ_HANDLED; 717 return IRQ_HANDLED;
713} 718}
714 719