mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 13:15:57 +00:00
r6040: save and restore MIER correctly in the interrupt routine
This patch saves the MIER register contents before treating interrupts, then restores them correcty at the end of the interrupt routine. Signed-off-by: Joe Chou <Joe.Chou@rdc.com.tw> Signed-off-by: Florian Fainelli <florian@openwrt.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
11e5e8f5d1
commit
3e7c469f07
@ -680,8 +680,10 @@ static irqreturn_t r6040_interrupt(int irq, void *dev_id)
|
||||
struct net_device *dev = dev_id;
|
||||
struct r6040_private *lp = netdev_priv(dev);
|
||||
void __iomem *ioaddr = lp->base;
|
||||
u16 status;
|
||||
u16 misr, status;
|
||||
|
||||
/* Save MIER */
|
||||
misr = ioread16(ioaddr + MIER);
|
||||
/* Mask off RDC MAC interrupt */
|
||||
iowrite16(MSK_INT, ioaddr + MIER);
|
||||
/* Read MISR status and clear */
|
||||
@ -701,7 +703,7 @@ static irqreturn_t r6040_interrupt(int irq, void *dev_id)
|
||||
dev->stats.rx_fifo_errors++;
|
||||
|
||||
/* Mask off RX interrupt */
|
||||
iowrite16(ioread16(ioaddr + MIER) & ~RX_INTS, ioaddr + MIER);
|
||||
misr &= ~RX_INTS;
|
||||
netif_rx_schedule(dev, &lp->napi);
|
||||
}
|
||||
|
||||
@ -709,6 +711,9 @@ static irqreturn_t r6040_interrupt(int irq, void *dev_id)
|
||||
if (status & TX_INTS)
|
||||
r6040_tx(dev);
|
||||
|
||||
/* Restore RDC MAC interrupt */
|
||||
iowrite16(misr, ioaddr + MIER);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user