aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2010-05-10 11:00:10 -0400
committerDavid S. Miller <davem@davemloft.net>2010-05-13 02:31:10 -0400
commit52a9b2319628e2cbbff7abc4f1092f4597c75a4f (patch)
tree5525dad84de0e06c46ca310ac62be3f1e4981b1e /drivers
parentcd791618c28f524598bcfa941d948b1126a2394a (diff)
e1000e: s/w initiated LSC MSI-X interrupts not generated; no transmit
In MSI-X mode when an IMPI SoL session was active (i.e. the PHY reset was blocked), the LSC interrupt generated by s/w to start the watchdog which started the transmitter was not getting fired by the hardware because bit 24 (the 'other' cause bit) also needed to be set. Without an active SoL session, the PHY was reset which caused the h/w to fire the LSC interrupt. Signed-off-by: Bruce Allan <bruce.w.allan@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/e1000e/netdev.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 36473e6d07d6..16a03c553299 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -3220,7 +3220,11 @@ int e1000e_up(struct e1000_adapter *adapter)
3220 netif_wake_queue(adapter->netdev); 3220 netif_wake_queue(adapter->netdev);
3221 3221
3222 /* fire a link change interrupt to start the watchdog */ 3222 /* fire a link change interrupt to start the watchdog */
3223 ew32(ICS, E1000_ICS_LSC); 3223 if (adapter->msix_entries)
3224 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
3225 else
3226 ew32(ICS, E1000_ICS_LSC);
3227
3224 return 0; 3228 return 0;
3225} 3229}
3226 3230
@@ -3537,7 +3541,10 @@ static int e1000_open(struct net_device *netdev)
3537 pm_runtime_put(&pdev->dev); 3541 pm_runtime_put(&pdev->dev);
3538 3542
3539 /* fire a link status change interrupt to start the watchdog */ 3543 /* fire a link status change interrupt to start the watchdog */
3540 ew32(ICS, E1000_ICS_LSC); 3544 if (adapter->msix_entries)
3545 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
3546 else
3547 ew32(ICS, E1000_ICS_LSC);
3541 3548
3542 return 0; 3549 return 0;
3543 3550