]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[forcedeth] Ensure that IRQ line is deasserted when disabling interrupts
authorMichael Brown <mcb30@ipxe.org>
Wed, 4 May 2011 18:20:19 +0000 (19:20 +0100)
committerMichael Brown <mcb30@ipxe.org>
Wed, 4 May 2011 18:22:52 +0000 (19:22 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/forcedeth.c

index c34a42961479c81753c7aef9cb1840592b1913bc..5d0137e1cf9575734d7fd559a0f34bd5f87b3c03 100644 (file)
@@ -61,6 +61,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
 static inline void pci_push ( void *ioaddr )
 {
        /* force out pending posted writes */
+       wmb();
        readl ( ioaddr );
 }
 
@@ -334,6 +335,7 @@ nv_disable_hw_interrupts ( struct forcedeth_private *priv )
        void *ioaddr = priv->mmio_addr;
 
        writel ( 0, ioaddr + NvRegIrqMask );
+       pci_push ( ioaddr );
 }
 
 static void
@@ -764,7 +766,6 @@ forcedeth_open ( struct net_device *netdev )
                 ioaddr + NvRegPowerState );
 
        nv_disable_hw_interrupts ( priv );
-       pci_push ( ioaddr );
        writel ( NVREG_MIISTAT_MASK_ALL, ioaddr + NvRegMIIStatus );
        writel ( NVREG_IRQSTAT_MASK, ioaddr + NvRegIrqStatus );
        pci_push ( ioaddr );
@@ -1018,7 +1019,6 @@ static void
 forcedeth_close ( struct net_device *netdev )
 {
        struct forcedeth_private *priv = netdev_priv ( netdev );
-       void *ioaddr = priv->mmio_addr;
 
        DBGP ( "forcedeth_close\n" );
 
@@ -1028,7 +1028,6 @@ forcedeth_close ( struct net_device *netdev )
 
        /* Disable interrupts on the nic or we will lock up */
        nv_disable_hw_interrupts ( priv );
-       pci_push ( ioaddr );
 
        nv_free_rxtx_resources ( priv );