diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igb')
| -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 | 
4 files changed, 38 insertions, 33 deletions
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);  				}  			}  |