diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2011-09-15 15:08:05 +0200 | 
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2011-09-15 15:08:18 +0200 | 
| commit | e060c38434b2caa78efe7cedaff4191040b65a15 (patch) | |
| tree | 407361230bf6733f63d8e788e4b5e6566ee04818 /drivers/net/e1000e/ethtool.c | |
| parent | 10e4ac572eeffe5317019bd7330b6058a400dfc2 (diff) | |
| parent | cc39c6a9bbdebfcf1a7dee64d83bf302bc38d941 (diff) | |
| download | olio-linux-3.10-e060c38434b2caa78efe7cedaff4191040b65a15.tar.xz olio-linux-3.10-e060c38434b2caa78efe7cedaff4191040b65a15.zip  | |
Merge branch 'master' into for-next
Fast-forward merge with Linus to be able to merge patches
based on more recent version of the tree.
Diffstat (limited to 'drivers/net/e1000e/ethtool.c')
| -rw-r--r-- | drivers/net/e1000e/ethtool.c | 14 | 
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c index cb1a3623253..6a0526a59a8 100644 --- a/drivers/net/e1000e/ethtool.c +++ b/drivers/net/e1000e/ethtool.c @@ -28,8 +28,8 @@  /* ethtool support for e1000 */ -#include <linux/interrupt.h>  #include <linux/netdevice.h> +#include <linux/interrupt.h>  #include <linux/ethtool.h>  #include <linux/pci.h>  #include <linux/slab.h> @@ -964,6 +964,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)  	/* Disable all the interrupts */  	ew32(IMC, 0xFFFFFFFF); +	e1e_flush();  	usleep_range(10000, 20000);  	/* Test each interrupt */ @@ -996,6 +997,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)  			adapter->test_icr = 0;  			ew32(IMC, mask);  			ew32(ICS, mask); +			e1e_flush();  			usleep_range(10000, 20000);  			if (adapter->test_icr & mask) { @@ -1014,6 +1016,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)  		adapter->test_icr = 0;  		ew32(IMS, mask);  		ew32(ICS, mask); +		e1e_flush();  		usleep_range(10000, 20000);  		if (!(adapter->test_icr & mask)) { @@ -1032,6 +1035,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)  			adapter->test_icr = 0;  			ew32(IMC, ~mask & 0x00007FFF);  			ew32(ICS, ~mask & 0x00007FFF); +			e1e_flush();  			usleep_range(10000, 20000);  			if (adapter->test_icr) { @@ -1043,6 +1047,7 @@ static int e1000_intr_test(struct e1000_adapter *adapter, u64 *data)  	/* Disable all the interrupts */  	ew32(IMC, 0xFFFFFFFF); +	e1e_flush();  	usleep_range(10000, 20000);  	/* Unhook test interrupt handler */ @@ -1201,7 +1206,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter)  	rx_ring->next_to_clean = 0;  	rctl = er32(RCTL); -	ew32(RCTL, rctl & ~E1000_RCTL_EN); +	if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) +		ew32(RCTL, rctl & ~E1000_RCTL_EN);  	ew32(RDBAL, ((u64) rx_ring->dma & 0xFFFFFFFF));  	ew32(RDBAH, ((u64) rx_ring->dma >> 32));  	ew32(RDLEN, rx_ring->size); @@ -1276,6 +1282,7 @@ static int e1000_integrated_phy_loopback(struct e1000_adapter *adapter)  			     E1000_CTRL_FD);	 /* Force Duplex to FULL */  		ew32(CTRL, ctrl_reg); +		e1e_flush();  		udelay(500);  		return 0; @@ -1418,6 +1425,7 @@ static int e1000_set_82571_fiber_loopback(struct e1000_adapter *adapter)  	 */  #define E1000_SERDES_LB_ON 0x410  	ew32(SCTL, E1000_SERDES_LB_ON); +	e1e_flush();  	usleep_range(10000, 20000);  	return 0; @@ -1513,6 +1521,7 @@ static void e1000_loopback_cleanup(struct e1000_adapter *adapter)  		    hw->phy.media_type == e1000_media_type_internal_serdes) {  #define E1000_SERDES_LB_OFF 0x400  			ew32(SCTL, E1000_SERDES_LB_OFF); +			e1e_flush();  			usleep_range(10000, 20000);  			break;  		} @@ -1592,6 +1601,7 @@ static int e1000_run_loopback_test(struct e1000_adapter *adapter)  				k = 0;  		}  		ew32(TDT, k); +		e1e_flush();  		msleep(200);  		time = jiffies; /* set the start time for the receive */  		good_cnt = 0;  |