diff options
author | Bruce Allan <bruce.w.allan@intel.com> | 2011-07-22 02:21:35 -0400 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2011-08-11 18:19:06 -0400 |
commit | 7f99ae633884043c70f4cc4a03f43dad0f0ecba2 (patch) | |
tree | 81b665c207aa189863095d06d45f35e740a9aeef /drivers/net/e1000e/netdev.c | |
parent | c407bee8a56d874b91f3e4ee790660959ff1a25e (diff) |
e1000e: do not disable receiver on 82574/82583
Due to a hardware erratum, the receiver on 82574 and 82583 should not be
stopped once it has been started.
Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/e1000e/netdev.c')
-rw-r--r-- | drivers/net/e1000e/netdev.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index ab4be80f7ab5..c0406b1b96d8 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -2915,7 +2915,8 @@ static void e1000_configure_rx(struct e1000_adapter *adapter) | |||
2915 | 2915 | ||
2916 | /* disable receives while setting up the descriptors */ | 2916 | /* disable receives while setting up the descriptors */ |
2917 | rctl = er32(RCTL); | 2917 | rctl = er32(RCTL); |
2918 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | 2918 | if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) |
2919 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | ||
2919 | e1e_flush(); | 2920 | e1e_flush(); |
2920 | usleep_range(10000, 20000); | 2921 | usleep_range(10000, 20000); |
2921 | 2922 | ||
@@ -3394,7 +3395,8 @@ void e1000e_down(struct e1000_adapter *adapter) | |||
3394 | 3395 | ||
3395 | /* disable receives in the hardware */ | 3396 | /* disable receives in the hardware */ |
3396 | rctl = er32(RCTL); | 3397 | rctl = er32(RCTL); |
3397 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | 3398 | if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) |
3399 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | ||
3398 | /* flush and sleep below */ | 3400 | /* flush and sleep below */ |
3399 | 3401 | ||
3400 | netif_stop_queue(netdev); | 3402 | netif_stop_queue(netdev); |
@@ -3403,6 +3405,7 @@ void e1000e_down(struct e1000_adapter *adapter) | |||
3403 | tctl = er32(TCTL); | 3405 | tctl = er32(TCTL); |
3404 | tctl &= ~E1000_TCTL_EN; | 3406 | tctl &= ~E1000_TCTL_EN; |
3405 | ew32(TCTL, tctl); | 3407 | ew32(TCTL, tctl); |
3408 | |||
3406 | /* flush both disables and wait for them to finish */ | 3409 | /* flush both disables and wait for them to finish */ |
3407 | e1e_flush(); | 3410 | e1e_flush(); |
3408 | usleep_range(10000, 20000); | 3411 | usleep_range(10000, 20000); |