diff options
Diffstat (limited to 'drivers/net/ethernet/intel')
| -rw-r--r-- | drivers/net/ethernet/intel/e1000e/82571.c | 10 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/e1000e/netdev.c | 36 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/e1000_82575.c | 16 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/e1000_regs.h | 8 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_ethtool.c | 28 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 19 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 3 | 
7 files changed, 71 insertions, 49 deletions
diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c index 0b3bade957f..080c89093fe 100644 --- a/drivers/net/ethernet/intel/e1000e/82571.c +++ b/drivers/net/ethernet/intel/e1000e/82571.c @@ -999,7 +999,7 @@ static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active)   **/  static s32 e1000_reset_hw_82571(struct e1000_hw *hw)  { -	u32 ctrl, ctrl_ext, eecd; +	u32 ctrl, ctrl_ext, eecd, tctl;  	s32 ret_val;  	/* @@ -1014,7 +1014,9 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)  	ew32(IMC, 0xffffffff);  	ew32(RCTL, 0); -	ew32(TCTL, E1000_TCTL_PSP); +	tctl = er32(TCTL); +	tctl &= ~E1000_TCTL_EN; +	ew32(TCTL, tctl);  	e1e_flush();  	usleep_range(10000, 20000); @@ -1601,10 +1603,8 @@ static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)  			 * auto-negotiation in the TXCW register and disable  			 * forced link in the Device Control register in an  			 * attempt to auto-negotiate with our link partner. -			 * If the partner code word is null, stop forcing -			 * and restart auto negotiation.  			 */ -			if ((rxcw & E1000_RXCW_C) || !(rxcw & E1000_RXCW_CW))  { +			if (rxcw & E1000_RXCW_C) {  				/* Enable autoneg, and unforce link up */  				ew32(TXCW, mac->txcw);  				ew32(CTRL, (ctrl & ~E1000_CTRL_SLU)); diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index 95b245310f1..46c3b1f9ff8 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -178,6 +178,24 @@ static void e1000_regdump(struct e1000_hw *hw, struct e1000_reg_info *reginfo)  	pr_info("%-15s %08x %08x\n", rname, regs[0], regs[1]);  } +static void e1000e_dump_ps_pages(struct e1000_adapter *adapter, +				 struct e1000_buffer *bi) +{ +	int i; +	struct e1000_ps_page *ps_page; + +	for (i = 0; i < adapter->rx_ps_pages; i++) { +		ps_page = &bi->ps_pages[i]; + +		if (ps_page->page) { +			pr_info("packet dump for ps_page %d:\n", i); +			print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, +				       16, 1, page_address(ps_page->page), +				       PAGE_SIZE, true); +		} +	} +} +  /*   * e1000e_dump - Print registers, Tx-ring and Rx-ring   */ @@ -299,10 +317,10 @@ static void e1000e_dump(struct e1000_adapter *adapter)  			(unsigned long long)buffer_info->time_stamp,  			buffer_info->skb, next_desc); -		if (netif_msg_pktdata(adapter) && buffer_info->dma != 0) +		if (netif_msg_pktdata(adapter) && buffer_info->skb)  			print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, -				       16, 1, phys_to_virt(buffer_info->dma), -				       buffer_info->length, true); +				       16, 1, buffer_info->skb->data, +				       buffer_info->skb->len, true);  	}  	/* Print Rx Ring Summary */ @@ -381,10 +399,8 @@ rx_ring_summary:  					buffer_info->skb, next_desc);  				if (netif_msg_pktdata(adapter)) -					print_hex_dump(KERN_INFO, "", -						DUMP_PREFIX_ADDRESS, 16, 1, -						phys_to_virt(buffer_info->dma), -						adapter->rx_ps_bsize0, true); +					e1000e_dump_ps_pages(adapter, +							     buffer_info);  			}  		}  		break; @@ -444,12 +460,12 @@ rx_ring_summary:  					(unsigned long long)buffer_info->dma,  					buffer_info->skb, next_desc); -				if (netif_msg_pktdata(adapter)) +				if (netif_msg_pktdata(adapter) && +				    buffer_info->skb)  					print_hex_dump(KERN_INFO, "",  						       DUMP_PREFIX_ADDRESS, 16,  						       1, -						       phys_to_virt -						       (buffer_info->dma), +						       buffer_info->skb->data,  						       adapter->rx_buffer_len,  						       true);  			} diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c index 5e84eaac48c..ba994fb4cec 100644 --- a/drivers/net/ethernet/intel/igb/e1000_82575.c +++ b/drivers/net/ethernet/intel/igb/e1000_82575.c @@ -254,6 +254,14 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)  	 */  	size += NVM_WORD_SIZE_BASE_SHIFT; +	/* +	 * Check for invalid size +	 */ +	if ((hw->mac.type == e1000_82576) && (size > 15)) { +		pr_notice("The NVM size is not valid, defaulting to 32K\n"); +		size = 15; +	} +  	nvm->word_size = 1 << size;  	if (hw->mac.type < e1000_i210) {  		nvm->opcode_bits        = 8; @@ -281,14 +289,6 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)  	} else  		nvm->type = e1000_nvm_flash_hw; -	/* -	 * Check for invalid size -	 */ -	if ((hw->mac.type == e1000_82576) && (size > 15)) { -		pr_notice("The NVM size is not valid, defaulting to 32K\n"); -		size = 15; -	} -  	/* NVM Function Pointers */  	switch (hw->mac.type) {  	case e1000_82580: diff --git a/drivers/net/ethernet/intel/igb/e1000_regs.h b/drivers/net/ethernet/intel/igb/e1000_regs.h index 10efcd88dca..28394bea525 100644 --- a/drivers/net/ethernet/intel/igb/e1000_regs.h +++ b/drivers/net/ethernet/intel/igb/e1000_regs.h @@ -156,8 +156,12 @@  				    : (0x0E018 + ((_n) * 0x40)))  #define E1000_TXDCTL(_n)  ((_n) < 4 ? (0x03828 + ((_n) * 0x100)) \  				    : (0x0E028 + ((_n) * 0x40))) -#define E1000_DCA_TXCTRL(_n) (0x03814 + (_n << 8)) -#define E1000_DCA_RXCTRL(_n) (0x02814 + (_n << 8)) +#define E1000_RXCTL(_n)	  ((_n) < 4 ? (0x02814 + ((_n) * 0x100)) : \ +				      (0x0C014 + ((_n) * 0x40))) +#define E1000_DCA_RXCTRL(_n)	E1000_RXCTL(_n) +#define E1000_TXCTL(_n)   ((_n) < 4 ? (0x03814 + ((_n) * 0x100)) : \ +				      (0x0E014 + ((_n) * 0x40))) +#define E1000_DCA_TXCTRL(_n) E1000_TXCTL(_n)  #define E1000_TDWBAL(_n)  ((_n) < 4 ? (0x03838 + ((_n) * 0x100)) \  				    : (0x0E038 + ((_n) * 0x40)))  #define E1000_TDWBAH(_n)  ((_n) < 4 ? (0x0383C + ((_n) * 0x100)) \ diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c index a19c84cad0e..70591117051 100644 --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c @@ -209,8 +209,8 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)  	/* When SoL/IDER sessions are active, autoneg/speed/duplex  	 * cannot be changed */  	if (igb_check_reset_block(hw)) { -		dev_err(&adapter->pdev->dev, "Cannot change link " -			"characteristics when SoL/IDER is active.\n"); +		dev_err(&adapter->pdev->dev, +			"Cannot change link characteristics when SoL/IDER is active.\n");  		return -EINVAL;  	} @@ -1089,8 +1089,8 @@ static bool reg_pattern_test(struct igb_adapter *adapter, u64 *data,  		wr32(reg, (_test[pat] & write));  		val = rd32(reg) & mask;  		if (val != (_test[pat] & write & mask)) { -			dev_err(&adapter->pdev->dev, "pattern test reg %04X " -				"failed: got 0x%08X expected 0x%08X\n", +			dev_err(&adapter->pdev->dev, +				"pattern test reg %04X failed: got 0x%08X expected 0x%08X\n",  				reg, val, (_test[pat] & write & mask));  			*data = reg;  			return 1; @@ -1108,8 +1108,8 @@ static bool reg_set_and_check(struct igb_adapter *adapter, u64 *data,  	wr32(reg, write & mask);  	val = rd32(reg);  	if ((write & mask) != (val & mask)) { -		dev_err(&adapter->pdev->dev, "set/check reg %04X test failed:" -			" got 0x%08X expected 0x%08X\n", reg, +		dev_err(&adapter->pdev->dev, +			"set/check reg %04X test failed: got 0x%08X expected 0x%08X\n", reg,  			(val & mask), (write & mask));  		*data = reg;  		return 1; @@ -1171,8 +1171,9 @@ static int igb_reg_test(struct igb_adapter *adapter, u64 *data)  	wr32(E1000_STATUS, toggle);  	after = rd32(E1000_STATUS) & toggle;  	if (value != after) { -		dev_err(&adapter->pdev->dev, "failed STATUS register test " -			"got: 0x%08X expected: 0x%08X\n", after, value); +		dev_err(&adapter->pdev->dev, +			"failed STATUS register test got: 0x%08X expected: 0x%08X\n", +			after, value);  		*data = 1;  		return 1;  	} @@ -1497,6 +1498,9 @@ static int igb_integrated_phy_loopback(struct igb_adapter *adapter)  		break;  	} +	/* add small delay to avoid loopback test failure */ +	msleep(50); +  	/* force 1000, set loopback */  	igb_write_phy_reg(hw, PHY_CONTROL, 0x4140); @@ -1777,16 +1781,14 @@ static int igb_loopback_test(struct igb_adapter *adapter, u64 *data)  	 * sessions are active */  	if (igb_check_reset_block(&adapter->hw)) {  		dev_err(&adapter->pdev->dev, -			"Cannot do PHY loopback test " -			"when SoL/IDER is active.\n"); +			"Cannot do PHY loopback test when SoL/IDER is active.\n");  		*data = 0;  		goto out;  	}  	if ((adapter->hw.mac.type == e1000_i210) -		|| (adapter->hw.mac.type == e1000_i210)) { +		|| (adapter->hw.mac.type == e1000_i211)) {  		dev_err(&adapter->pdev->dev, -			"Loopback test not supported " -			"on this part at this time.\n"); +			"Loopback test not supported on this part at this time.\n");  		*data = 0;  		goto out;  	} diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index b7c2d505057..48cc4fb1a30 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -462,10 +462,10 @@ static void igb_dump(struct igb_adapter *adapter)  				(u64)buffer_info->time_stamp,  				buffer_info->skb, next_desc); -			if (netif_msg_pktdata(adapter) && buffer_info->dma != 0) +			if (netif_msg_pktdata(adapter) && buffer_info->skb)  				print_hex_dump(KERN_INFO, "",  					DUMP_PREFIX_ADDRESS, -					16, 1, phys_to_virt(buffer_info->dma), +					16, 1, buffer_info->skb->data,  					buffer_info->length, true);  		}  	} @@ -547,18 +547,17 @@ rx_ring_summary:  					(u64)buffer_info->dma,  					buffer_info->skb, next_desc); -				if (netif_msg_pktdata(adapter)) { +				if (netif_msg_pktdata(adapter) && +				    buffer_info->dma && buffer_info->skb) {  					print_hex_dump(KERN_INFO, "", -						DUMP_PREFIX_ADDRESS, -						16, 1, -						phys_to_virt(buffer_info->dma), -						IGB_RX_HDR_LEN, true); +						  DUMP_PREFIX_ADDRESS, +						  16, 1, buffer_info->skb->data, +						  IGB_RX_HDR_LEN, true);  					print_hex_dump(KERN_INFO, "",  					  DUMP_PREFIX_ADDRESS,  					  16, 1, -					  phys_to_virt( -					    buffer_info->page_dma + -					    buffer_info->page_offset), +					  page_address(buffer_info->page) + +						      buffer_info->page_offset,  					  PAGE_SIZE/2, true);  				}  			} diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c index 50fc137501d..18bf08c9d7a 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c @@ -804,12 +804,13 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,  	    link_mode == IXGBE_AUTOC_LMS_KX4_KX_KR_SGMII) {  		/* Set KX4/KX/KR support according to speed requested */  		autoc &= ~(IXGBE_AUTOC_KX4_KX_SUPP_MASK | IXGBE_AUTOC_KR_SUPP); -		if (speed & IXGBE_LINK_SPEED_10GB_FULL) +		if (speed & IXGBE_LINK_SPEED_10GB_FULL) {  			if (orig_autoc & IXGBE_AUTOC_KX4_SUPP)  				autoc |= IXGBE_AUTOC_KX4_SUPP;  			if ((orig_autoc & IXGBE_AUTOC_KR_SUPP) &&  			    (hw->phy.smart_speed_active == false))  				autoc |= IXGBE_AUTOC_KR_SUPP; +		}  		if (speed & IXGBE_LINK_SPEED_1GB_FULL)  			autoc |= IXGBE_AUTOC_KX_SUPP;  	} else if ((pma_pmd_1g == IXGBE_AUTOC_1G_SFI) &&  |