aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e
diff options
context:
space:
mode:
authorBruce Allan <bruce.w.allan@intel.com>2009-11-20 18:24:11 -0500
committerDavid S. Miller <davem@davemloft.net>2009-11-21 14:33:58 -0500
commitbb436b20fe0ea4231a233aae7f0f7de3a3f2f5c3 (patch)
tree168d6084a2d2352c7236d13a4b2d9b1db37051d3 /drivers/net/e1000e
parent98086a954a75152f8b09c131fa443205bae5fde1 (diff)
e1000e: disable K1 on PCH LOM when in PHY loopback mode
When performing the ethtool PHY loopback test on PCH-based LOMs (82577 and 82578), disable K1 (a MAC-PHY interconnect low power mode) otherwise packets might get corrupted. Signed-off-by: Bruce Allan <bruce.w.allan@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/e1000e')
-rw-r--r--drivers/net/e1000e/e1000.h1
-rw-r--r--drivers/net/e1000e/ethtool.c4
-rw-r--r--drivers/net/e1000e/ich8lan.c3
3 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h
index 00989c5534c1..a6c68039e8d9 100644
--- a/drivers/net/e1000e/e1000.h
+++ b/drivers/net/e1000e/e1000.h
@@ -485,6 +485,7 @@ extern void e1000e_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw,
485extern void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw); 485extern void e1000e_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw);
486extern void e1000e_gig_downshift_workaround_ich8lan(struct e1000_hw *hw); 486extern void e1000e_gig_downshift_workaround_ich8lan(struct e1000_hw *hw);
487extern void e1000e_disable_gig_wol_ich8lan(struct e1000_hw *hw); 487extern void e1000e_disable_gig_wol_ich8lan(struct e1000_hw *hw);
488extern s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable);
488 489
489extern s32 e1000e_check_for_copper_link(struct e1000_hw *hw); 490extern s32 e1000e_check_for_copper_link(struct e1000_hw *hw);
490extern s32 e1000e_check_for_fiber_link(struct e1000_hw *hw); 491extern s32 e1000e_check_for_fiber_link(struct e1000_hw *hw);
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c
index 67e06fd9fc45..fd7921482d2b 100644
--- a/drivers/net/e1000e/ethtool.c
+++ b/drivers/net/e1000e/ethtool.c
@@ -1260,6 +1260,10 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1260 1260
1261 hw->mac.autoneg = 0; 1261 hw->mac.autoneg = 0;
1262 1262
1263 /* Workaround: K1 must be disabled for stable 1Gbps operation */
1264 if (hw->mac.type == e1000_pchlan)
1265 e1000_configure_k1_ich8lan(hw, false);
1266
1263 if (hw->phy.type == e1000_phy_m88) { 1267 if (hw->phy.type == e1000_phy_m88) {
1264 /* Auto-MDI/MDIX Off */ 1268 /* Auto-MDI/MDIX Off */
1265 e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, 0x0808); 1269 e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, 0x0808);
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
index 51ddb04ab195..bd9002e72cb6 100644
--- a/drivers/net/e1000e/ich8lan.c
+++ b/drivers/net/e1000e/ich8lan.c
@@ -224,7 +224,6 @@ static s32 e1000_led_off_pchlan(struct e1000_hw *hw);
224static s32 e1000_set_lplu_state_pchlan(struct e1000_hw *hw, bool active); 224static s32 e1000_set_lplu_state_pchlan(struct e1000_hw *hw, bool active);
225static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw); 225static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw);
226static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link); 226static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link);
227static s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable);
228 227
229static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg) 228static inline u16 __er16flash(struct e1000_hw *hw, unsigned long reg)
230{ 229{
@@ -1023,7 +1022,7 @@ out:
1023 * 1022 *
1024 * Success returns 0, Failure returns -E1000_ERR_PHY (-2) 1023 * Success returns 0, Failure returns -E1000_ERR_PHY (-2)
1025 **/ 1024 **/
1026static s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable) 1025s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable)
1027{ 1026{
1028 s32 ret_val = 0; 1027 s32 ret_val = 0;
1029 u32 ctrl_reg = 0; 1028 u32 ctrl_reg = 0;