|
@@ -1314,14 +1314,17 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
|
|
|
return ret_val;
|
|
|
}
|
|
|
|
|
|
- /* When connected at 10Mbps half-duplex, 82579 parts are excessively
|
|
|
+ /* When connected at 10Mbps half-duplex, some parts are excessively
|
|
|
* aggressive resulting in many collisions. To avoid this, increase
|
|
|
* the IPG and reduce Rx latency in the PHY.
|
|
|
*/
|
|
|
- if ((hw->mac.type == e1000_pch2lan) && link) {
|
|
|
+ if (((hw->mac.type == e1000_pch2lan) ||
|
|
|
+ (hw->mac.type == e1000_pch_lpt)) && link) {
|
|
|
u32 reg;
|
|
|
reg = er32(STATUS);
|
|
|
if (!(reg & (E1000_STATUS_FD | E1000_STATUS_SPEED_MASK))) {
|
|
|
+ u16 emi_addr;
|
|
|
+
|
|
|
reg = er32(TIPG);
|
|
|
reg &= ~E1000_TIPG_IPGT_MASK;
|
|
|
reg |= 0xFF;
|
|
@@ -1332,8 +1335,12 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
|
|
|
if (ret_val)
|
|
|
return ret_val;
|
|
|
|
|
|
- ret_val =
|
|
|
- e1000_write_emi_reg_locked(hw, I82579_RX_CONFIG, 0);
|
|
|
+ if (hw->mac.type == e1000_pch2lan)
|
|
|
+ emi_addr = I82579_RX_CONFIG;
|
|
|
+ else
|
|
|
+ emi_addr = I217_RX_CONFIG;
|
|
|
+
|
|
|
+ ret_val = e1000_write_emi_reg_locked(hw, emi_addr, 0);
|
|
|
|
|
|
hw->phy.ops.release(hw);
|
|
|
|