diff options
Diffstat (limited to 'drivers/net/ethernet/intel/e1000e')
| -rw-r--r-- | drivers/net/ethernet/intel/e1000e/ich8lan.c | 11 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/e1000e/ich8lan.h | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/e1000e/netdev.c | 9 | 
3 files changed, 16 insertions, 7 deletions
| diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c index d6d4ed7acf03..31277d3bb7dc 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c @@ -1367,6 +1367,9 @@ out:   *  Checks to see of the link status of the hardware has changed.  If a   *  change in link status has been detected, then we read the PHY registers   *  to get the current speed/duplex if link exists. + * + *  Returns a negative error code (-E1000_ERR_*) or 0 (link down) or 1 (link + *  up).   **/  static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)  { @@ -1382,7 +1385,7 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)  	 * Change or Rx Sequence Error interrupt.  	 */  	if (!mac->get_link_status) -		return 0; +		return 1;  	/* First we want to see if the MII Status Register reports  	 * link.  If so, then we want to get the current speed/duplex @@ -1613,10 +1616,12 @@ static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)  	 * different link partner.  	 */  	ret_val = e1000e_config_fc_after_link_up(hw); -	if (ret_val) +	if (ret_val) {  		e_dbg("Error configuring flow control\n"); +		return ret_val; +	} -	return ret_val; +	return 1;  }  static s32 e1000_get_variants_ich8lan(struct e1000_adapter *adapter) diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h b/drivers/net/ethernet/intel/e1000e/ich8lan.h index 67163ca898ba..00a36df02a3f 100644 --- a/drivers/net/ethernet/intel/e1000e/ich8lan.h +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h @@ -113,7 +113,8 @@  #define NVM_SIZE_MULTIPLIER 4096	/*multiplier for NVMS field */  #define E1000_FLASH_BASE_ADDR 0xE000	/*offset of NVM access regs */  #define E1000_CTRL_EXT_NVMVS 0x3	/*NVM valid sector */ -#define E1000_TARC0_CB_MULTIQ_3_REQ	(1 << 28 | 1 << 29) +#define E1000_TARC0_CB_MULTIQ_3_REQ	0x30000000 +#define E1000_TARC0_CB_MULTIQ_2_REQ	0x20000000  #define PCIE_ICH8_SNOOP_ALL	PCIE_NO_SNOOP_ALL  #define E1000_ICH_RAR_ENTRIES	7 diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index f2f49239b015..9f18d39bdc8f 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -3034,9 +3034,12 @@ static void e1000_configure_tx(struct e1000_adapter *adapter)  		ew32(IOSFPC, reg_val);  		reg_val = er32(TARC(0)); -		/* SPT and KBL Si errata workaround to avoid Tx hang */ -		reg_val &= ~BIT(28); -		reg_val |= BIT(29); +		/* SPT and KBL Si errata workaround to avoid Tx hang. +		 * Dropping the number of outstanding requests from +		 * 3 to 2 in order to avoid a buffer overrun. +		 */ +		reg_val &= ~E1000_TARC0_CB_MULTIQ_3_REQ; +		reg_val |= E1000_TARC0_CB_MULTIQ_2_REQ;  		ew32(TARC(0), reg_val);  	}  } |