aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDon Skidmore <donald.c.skidmore@intel.com>2013-02-28 03:08:44 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2013-04-18 01:15:14 -0400
commitb8f83638950e3c33fbd8ad450045ac088e5efdbe (patch)
treed974b78b8e7987e755aeaba8f78ab7cdee6bd8a9
parent0b2679d61c55f04f405cde11809a9f87e582527f (diff)
ixgbe: Fix 1G link WoL
We reset during the shutdown path which will reset AUTOC register. This would change LMS to 10G. If we were currently linked at 1G we will lose link, which is a bad thing if we wanted WoL to work. For the fix I needed to know if WoL is supported so I created a new bool in the ixgbe_hw struct. If this is set we will not allow the reset to change the current LMS value in AUTOC. Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c5
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c4
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_type.h1
3 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
index b6289f11b764..7946da94b228 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c
@@ -1051,8 +1051,11 @@ mac_reset_top:
1051 /* If MNG FW is running on a multi-speed device that 1051 /* If MNG FW is running on a multi-speed device that
1052 * doesn't autoneg with out driver support we need to 1052 * doesn't autoneg with out driver support we need to
1053 * leave LMS in the state it was before we MAC reset. 1053 * leave LMS in the state it was before we MAC reset.
1054 * Likewise if we support WoL we don't want change the
1055 * LMS state either.
1054 */ 1056 */
1055 if (hw->phy.multispeed_fiber && hw->mng_fw_enabled) 1057 if ((hw->phy.multispeed_fiber && hw->mng_fw_enabled) ||
1058 hw->wol_supported)
1056 hw->mac.orig_autoc = 1059 hw->mac.orig_autoc =
1057 (hw->mac.orig_autoc & ~IXGBE_AUTOC_LMS_MASK) | 1060 (hw->mac.orig_autoc & ~IXGBE_AUTOC_LMS_MASK) |
1058 curr_lms; 1061 curr_lms;
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index ac6e464382e4..25c0e354f4ae 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -7526,7 +7526,9 @@ skip_sriov:
7526 /* WOL not supported for all devices */ 7526 /* WOL not supported for all devices */
7527 adapter->wol = 0; 7527 adapter->wol = 0;
7528 hw->eeprom.ops.read(hw, 0x2c, &adapter->eeprom_cap); 7528 hw->eeprom.ops.read(hw, 0x2c, &adapter->eeprom_cap);
7529 if (ixgbe_wol_supported(adapter, pdev->device, pdev->subsystem_device)) 7529 hw->wol_supported = ixgbe_wol_supported(adapter, pdev->device,
7530 pdev->subsystem_device);
7531 if (hw->wol_supported)
7530 adapter->wol = IXGBE_WUFC_MAG; 7532 adapter->wol = IXGBE_WUFC_MAG;
7531 7533
7532 device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol); 7534 device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
index 200b1a885ec5..155a793705be 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h
@@ -2998,6 +2998,7 @@ struct ixgbe_hw {
2998 bool force_full_reset; 2998 bool force_full_reset;
2999 bool allow_unsupported_sfp; 2999 bool allow_unsupported_sfp;
3000 bool mng_fw_enabled; 3000 bool mng_fw_enabled;
3001 bool wol_supported;
3001}; 3002};
3002 3003
3003struct ixgbe_info { 3004struct ixgbe_info {