diff options
author | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2006-01-12 19:50:28 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2006-01-17 07:40:10 -0500 |
commit | 571281972e2ca590ef160dcd6669b9f724b64283 (patch) | |
tree | cdb4f140fee6c924257ea52d40c56c031101d018 /drivers/net/e1000/e1000_main.c | |
parent | 545c67c0a3550545fe50d28c874b0664bc5dc882 (diff) |
[PATCH] e1000: Fix SoL/IDER link and loopback
Fix so that if a SoL/IDER session is active, do not allow operations which require a PHY reset and instead log a message.
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: John Ronciak <john.ronciak@intel.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers/net/e1000/e1000_main.c')
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 22c8286a4849..66cf1748ba9b 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -378,6 +378,8 @@ void | |||
378 | e1000_down(struct e1000_adapter *adapter) | 378 | e1000_down(struct e1000_adapter *adapter) |
379 | { | 379 | { |
380 | struct net_device *netdev = adapter->netdev; | 380 | struct net_device *netdev = adapter->netdev; |
381 | boolean_t mng_mode_enabled = (adapter->hw.mac_type >= e1000_82571) && | ||
382 | e1000_check_mng_mode(&adapter->hw); | ||
381 | 383 | ||
382 | e1000_irq_disable(adapter); | 384 | e1000_irq_disable(adapter); |
383 | #ifdef CONFIG_E1000_MQ | 385 | #ifdef CONFIG_E1000_MQ |
@@ -405,12 +407,16 @@ e1000_down(struct e1000_adapter *adapter) | |||
405 | e1000_clean_all_tx_rings(adapter); | 407 | e1000_clean_all_tx_rings(adapter); |
406 | e1000_clean_all_rx_rings(adapter); | 408 | e1000_clean_all_rx_rings(adapter); |
407 | 409 | ||
408 | /* If WoL is not enabled and management mode is not IAMT | 410 | /* Power down the PHY so no link is implied when interface is down * |
409 | * Power down the PHY so no link is implied when interface is down */ | 411 | * The PHY cannot be powered down if any of the following is TRUE * |
410 | if(!adapter->wol && adapter->hw.mac_type >= e1000_82540 && | 412 | * (a) WoL is enabled |
413 | * (b) AMT is active | ||
414 | * (c) SoL/IDER session is active */ | ||
415 | if (!adapter->wol && adapter->hw.mac_type >= e1000_82540 && | ||
411 | adapter->hw.media_type == e1000_media_type_copper && | 416 | adapter->hw.media_type == e1000_media_type_copper && |
412 | !e1000_check_mng_mode(&adapter->hw) && | 417 | !(E1000_READ_REG(&adapter->hw, MANC) & E1000_MANC_SMBUS_EN) && |
413 | !(E1000_READ_REG(&adapter->hw, MANC) & E1000_MANC_SMBUS_EN)) { | 418 | !mng_mode_enabled && |
419 | !e1000_check_phy_reset_block(&adapter->hw)) { | ||
414 | uint16_t mii_reg; | 420 | uint16_t mii_reg; |
415 | e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &mii_reg); | 421 | e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &mii_reg); |
416 | mii_reg |= MII_CR_POWER_DOWN; | 422 | mii_reg |= MII_CR_POWER_DOWN; |