mv643xx: Clear pending interrupts before calling request_irq
authorDale Farnsworth <dale@farnsworth.org>
Thu, 8 Mar 2007 05:21:23 +0000 (22:21 -0700)
committerJeff Garzik <jeff@garzik.org>
Fri, 9 Mar 2007 16:51:32 +0000 (11:51 -0500)
Signed-off-by: Dale Farnsworth <dale@farnsworth.org>
Acked-by: Giridhar Pemmasani <pgiri@yahoo.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/mv643xx_eth.c

index 9ba21e0f27c5150f0d923e6806661f1542fc2233..1ee27c360a4b845f0631824d9ea585729aa70bf4 100644 (file)
@@ -787,6 +787,12 @@ static int mv643xx_eth_open(struct net_device *dev)
        unsigned int size;
        int err;
 
+       /* Clear any pending ethernet port interrupts */
+       mv_write(MV643XX_ETH_INTERRUPT_CAUSE_REG(port_num), 0);
+       mv_write(MV643XX_ETH_INTERRUPT_CAUSE_EXTEND_REG(port_num), 0);
+       /* wait for previous write to complete */
+       mv_read (MV643XX_ETH_INTERRUPT_CAUSE_EXTEND_REG(port_num));
+
        err = request_irq(dev->irq, mv643xx_eth_int_handler,
                        IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, dev);
        if (err) {
@@ -875,10 +881,6 @@ static int mv643xx_eth_open(struct net_device *dev)
 
        mv643xx_eth_rx_refill_descs(dev);       /* Fill RX ring with skb's */
 
-       /* Clear any pending ethernet port interrupts */
-       mv_write(MV643XX_ETH_INTERRUPT_CAUSE_REG(port_num), 0);
-       mv_write(MV643XX_ETH_INTERRUPT_CAUSE_EXTEND_REG(port_num), 0);
-
        eth_port_start(dev);
 
        /* Interrupt Coalescing */