diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igb/igb_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 27 | 
1 files changed, 17 insertions, 10 deletions
| diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 751de06019a0..836be0d3b291 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -577,16 +577,15 @@ static void igb_set_i2c_data(void *data, int state)  	struct e1000_hw *hw = &adapter->hw;  	s32 i2cctl = rd32(E1000_I2CPARAMS); -	if (state) -		i2cctl |= E1000_I2C_DATA_OUT; -	else +	if (state) { +		i2cctl |= E1000_I2C_DATA_OUT | E1000_I2C_DATA_OE_N; +	} else { +		i2cctl &= ~E1000_I2C_DATA_OE_N;  		i2cctl &= ~E1000_I2C_DATA_OUT; +	} -	i2cctl &= ~E1000_I2C_DATA_OE_N; -	i2cctl |= E1000_I2C_CLK_OE_N;  	wr32(E1000_I2CPARAMS, i2cctl);  	wrfl(); -  }  /** @@ -603,8 +602,7 @@ static void igb_set_i2c_clk(void *data, int state)  	s32 i2cctl = rd32(E1000_I2CPARAMS);  	if (state) { -		i2cctl |= E1000_I2C_CLK_OUT; -		i2cctl &= ~E1000_I2C_CLK_OE_N; +		i2cctl |= E1000_I2C_CLK_OUT | E1000_I2C_CLK_OE_N;  	} else {  		i2cctl &= ~E1000_I2C_CLK_OUT;  		i2cctl &= ~E1000_I2C_CLK_OE_N; @@ -3116,12 +3114,21 @@ static void igb_init_mas(struct igb_adapter *adapter)   **/  static s32 igb_init_i2c(struct igb_adapter *adapter)  { +	struct e1000_hw *hw = &adapter->hw;  	s32 status = 0; +	s32 i2cctl;  	/* I2C interface supported on i350 devices */  	if (adapter->hw.mac.type != e1000_i350)  		return 0; +	i2cctl = rd32(E1000_I2CPARAMS); +	i2cctl |= E1000_I2CBB_EN +		| E1000_I2C_CLK_OUT | E1000_I2C_CLK_OE_N +		| E1000_I2C_DATA_OUT | E1000_I2C_DATA_OE_N; +	wr32(E1000_I2CPARAMS, i2cctl); +	wrfl(); +  	/* Initialize the i2c bus which is controlled by the registers.  	 * This bus will use the i2c_algo_bit structure that implements  	 * the protocol through toggling of the 4 bits in the register. @@ -3356,7 +3363,7 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  			dev_err(&pdev->dev, "NVM Read Error\n");  	} -	memcpy(netdev->dev_addr, hw->mac.addr, netdev->addr_len); +	eth_hw_addr_set(netdev, hw->mac.addr);  	if (!is_valid_ether_addr(netdev->dev_addr)) {  		dev_err(&pdev->dev, "Invalid MAC Address\n"); @@ -4988,7 +4995,7 @@ static int igb_set_mac(struct net_device *netdev, void *p)  	if (!is_valid_ether_addr(addr->sa_data))  		return -EADDRNOTAVAIL; -	memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); +	eth_hw_addr_set(netdev, addr->sa_data);  	memcpy(hw->mac.addr, addr->sa_data, netdev->addr_len);  	/* set the correct pool for the new PF MAC address in entry 0 */ |