net/e1000/base: avoid packet loss for non-1G
[dpdk.git] / drivers / net / e1000 / base / e1000_ich8lan.c
index 4a5cef0..7aea8dd 100644 (file)
@@ -1486,6 +1486,21 @@ STATIC s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
                        emi_addr = I217_RX_CONFIG;
                ret_val = e1000_write_emi_reg_locked(hw, emi_addr, emi_val);
 
+
+               if (hw->mac.type >= e1000_pch_lpt) {
+                       u16 phy_reg;
+
+                       hw->phy.ops.read_reg_locked(hw, I217_PLL_CLOCK_GATE_REG,
+                                                   &phy_reg);
+                       phy_reg &= ~I217_PLL_CLOCK_GATE_MASK;
+                       if (speed == SPEED_100 || speed == SPEED_10)
+                               phy_reg |= 0x3E8;
+                       else
+                               phy_reg |= 0xFA;
+                       hw->phy.ops.write_reg_locked(hw,
+                                                    I217_PLL_CLOCK_GATE_REG,
+                                                    phy_reg);
+                }
                hw->phy.ops.release(hw);
 
                if (ret_val)