diff options
author | Michael Brown <mcb30@ipxe.org> | 2011-05-04 19:20:19 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2011-05-04 19:22:52 +0100 |
commit | b6cad3c0eb72e99d8ae5e6944ec8e9b7c5acecfa (patch) | |
tree | 1d1cf0dd4e4171bed6fe40f69e6db58298f5a47b /src/drivers/net/forcedeth.c | |
parent | c738a635cb366edc11099fa0b23a599d561ea7ed (diff) | |
download | ipxe-b6cad3c0eb72e99d8ae5e6944ec8e9b7c5acecfa.tar.gz |
[forcedeth] Ensure that IRQ line is deasserted when disabling interrupts
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net/forcedeth.c')
-rw-r--r-- | src/drivers/net/forcedeth.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/drivers/net/forcedeth.c b/src/drivers/net/forcedeth.c index c34a42961..5d0137e1c 100644 --- a/src/drivers/net/forcedeth.c +++ b/src/drivers/net/forcedeth.c @@ -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 ); |