aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000/e1000_main.c
diff options
context:
space:
mode:
authorJeff Kirsher <jeffrey.t.kirsher@intel.com>2006-01-12 19:50:28 -0500
committerJeff Garzik <jgarzik@pobox.com>2006-01-17 07:40:10 -0500
commit571281972e2ca590ef160dcd6669b9f724b64283 (patch)
treecdb4f140fee6c924257ea52d40c56c031101d018 /drivers/net/e1000/e1000_main.c
parent545c67c0a3550545fe50d28c874b0664bc5dc882 (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.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;