aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorCarolyn Wyborny <carolyn.wyborny@intel.com>2012-11-12 23:03:20 -0500
committerDavid S. Miller <davem@davemloft.net>2012-11-13 14:18:14 -0500
commit867eb39e8b023b25073ad9d47ff3230b4f65990b (patch)
treef557d67e2148d96e82edcd5c29a0f72c065a3e7b /drivers/net/ethernet
parent85624caff9decc8174f286e12e9d0038d9a6cced (diff)
igb: Clear Go Link Disconnect for 82580 and later devices
Customers are requesting that the hw prevents PHY from establishing link until the driver loads. This patch clears the Go Link Disconnect bit which provides the requested behavior on parts 82580 and later. Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_82575.c8
-rw-r--r--drivers/net/ethernet/intel/igb/e1000_phy.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c
index deb05970b9f1..8c12dbd0d6ce 100644
--- a/drivers/net/ethernet/intel/igb/e1000_82575.c
+++ b/drivers/net/ethernet/intel/igb/e1000_82575.c
@@ -1278,12 +1278,20 @@ static s32 igb_setup_copper_link_82575(struct e1000_hw *hw)
1278{ 1278{
1279 u32 ctrl; 1279 u32 ctrl;
1280 s32 ret_val; 1280 s32 ret_val;
1281 u32 phpm_reg;
1281 1282
1282 ctrl = rd32(E1000_CTRL); 1283 ctrl = rd32(E1000_CTRL);
1283 ctrl |= E1000_CTRL_SLU; 1284 ctrl |= E1000_CTRL_SLU;
1284 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX); 1285 ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1285 wr32(E1000_CTRL, ctrl); 1286 wr32(E1000_CTRL, ctrl);
1286 1287
1288 /* Clear Go Link Disconnect bit */
1289 if (hw->mac.type >= e1000_82580) {
1290 phpm_reg = rd32(E1000_82580_PHY_POWER_MGMT);
1291 phpm_reg &= ~E1000_82580_PM_GO_LINKD;
1292 wr32(E1000_82580_PHY_POWER_MGMT, phpm_reg);
1293 }
1294
1287 ret_val = igb_setup_serdes_link_82575(hw); 1295 ret_val = igb_setup_serdes_link_82575(hw);
1288 if (ret_val) 1296 if (ret_val)
1289 goto out; 1297 goto out;
diff --git a/drivers/net/ethernet/intel/igb/e1000_phy.h b/drivers/net/ethernet/intel/igb/e1000_phy.h
index 6ac3299bfcb9..ed282f877d9a 100644
--- a/drivers/net/ethernet/intel/igb/e1000_phy.h
+++ b/drivers/net/ethernet/intel/igb/e1000_phy.h
@@ -124,6 +124,7 @@ s32 igb_check_polarity_m88(struct e1000_hw *hw);
124#define E1000_82580_PM_SPD 0x0001 /* Smart Power Down */ 124#define E1000_82580_PM_SPD 0x0001 /* Smart Power Down */
125#define E1000_82580_PM_D0_LPLU 0x0002 /* For D0a states */ 125#define E1000_82580_PM_D0_LPLU 0x0002 /* For D0a states */
126#define E1000_82580_PM_D3_LPLU 0x0004 /* For all other states */ 126#define E1000_82580_PM_D3_LPLU 0x0004 /* For all other states */
127#define E1000_82580_PM_GO_LINKD 0x0020 /* Go Link Disconnect */
127 128
128/* Enable flexible speed on link-up */ 129/* Enable flexible speed on link-up */
129#define IGP02E1000_PM_D0_LPLU 0x0002 /* For D0a states */ 130#define IGP02E1000_PM_D0_LPLU 0x0002 /* For D0a states */