diff options
-rw-r--r-- | drivers/net/r6040.c | 9 |
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 | ||