aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000/e1000_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/e1000/e1000_main.c')
-rw-r--r--drivers/net/e1000/e1000_main.c16
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
378e1000_down(struct e1000_adapter *adapter) 378e1000_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;