e1000e: 82577: workaround for link drop issue
authorBruce Allan <bruce.w.allan@intel.com>
Wed, 5 Dec 2012 06:26:03 +0000 (06:26 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 16 Jan 2013 06:37:56 +0000 (22:37 -0800)
When connected to certain switches, the 82577 PHY might drop link
unexpectedly.  Work around the issue by setting the Mean Square Error
higher than the hardware default.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/e1000e/ich8lan.c

index 8004d71..a7d6c87 100644 (file)
 #define I82579_EMI_ADDR         0x10
 #define I82579_EMI_DATA         0x11
 #define I82579_LPI_UPDATE_TIMER 0x4805 /* in 40ns units + 40 ns base value */
-#define I82579_MSE_THRESHOLD    0x084F /* Mean Square Error Threshold */
+#define I82579_MSE_THRESHOLD    0x084F /* 82579 Mean Square Error Threshold */
+#define I82577_MSE_THRESHOLD    0x0887 /* 82577 Mean Square Error Threshold */
 #define I82579_MSE_LINK_DOWN    0x2411 /* MSE count before dropping link */
 #define I217_EEE_ADVERTISEMENT  0x8001 /* IEEE MMD Register 7.60 */
 #define I217_EEE_LP_ABILITY     0x8002 /* IEEE MMD Register 7.61 */
@@ -1809,6 +1810,11 @@ static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw)
        if (ret_val)
                goto release;
        ret_val = e1e_wphy_locked(hw, BM_PORT_GEN_CFG, phy_data & 0x00FF);
+       if (ret_val)
+               goto release;
+
+       /* set MSE higher to enable link to stay up when noise is high */
+       ret_val = e1000_write_emi_reg_locked(hw, I82577_MSE_THRESHOLD, 0x0034);
 release:
        hw->phy.ops.release(hw);