diff options
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e/ich8lan.c')
| -rw-r--r-- | drivers/net/ethernet/intel/e1000e/ich8lan.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index 64c76443a7a..b461c24945e 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -1310,10 +1310,6 @@ static s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state)  		if (mac_reg & E1000_PHY_CTRL_D0A_LPLU)  			oem_reg |= HV_OEM_BITS_LPLU; - -		/* Set Restart auto-neg to activate the bits */ -		if (!hw->phy.ops.check_reset_block(hw)) -			oem_reg |= HV_OEM_BITS_RESTART_AN;  	} else {  		if (mac_reg & (E1000_PHY_CTRL_GBE_DISABLE |  			       E1000_PHY_CTRL_NOND0A_GBE_DISABLE)) @@ -1324,6 +1320,11 @@ static s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state)  			oem_reg |= HV_OEM_BITS_LPLU;  	} +	/* Set Restart auto-neg to activate the bits */ +	if ((d0_state || (hw->mac.type != e1000_pchlan)) && +	    !hw->phy.ops.check_reset_block(hw)) +		oem_reg |= HV_OEM_BITS_RESTART_AN; +  	ret_val = hw->phy.ops.write_reg_locked(hw, HV_OEM_BITS, oem_reg);  release: @@ -3682,7 +3683,11 @@ void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw)  	if (hw->mac.type >= e1000_pchlan) {  		e1000_oem_bits_config_ich8lan(hw, false); -		e1000_phy_hw_reset_ich8lan(hw); + +		/* Reset PHY to activate OEM bits on 82577/8 */ +		if (hw->mac.type == e1000_pchlan) +			e1000e_phy_hw_reset_generic(hw); +  		ret_val = hw->phy.ops.acquire(hw);  		if (ret_val)  			return;  |