diff mbox

ixgbe: Reduce I2C retry count on X550 devices

Message ID 1478717406-2295-1-git-send-email-anthony.l.nguyen@intel.com
State Superseded
Headers show

Commit Message

Tony Nguyen Nov. 9, 2016, 6:50 p.m. UTC
A retry count of 10 is likely to run into problems on X550 devices that
have to detect and reset unresponsive CS4227 devices. So, reduce the I2C
retry count to 3 for X550 and above. This should avoid any possible
regressions in existing devices.

Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Rustad, Mark D Nov. 9, 2016, 7:17 p.m. UTC | #1
Tony Nguyen <anthony.l.nguyen@intel.com> wrote:

> A retry count of 10 is likely to run into problems on X550 devices that
> have to detect and reset unresponsive CS4227 devices. So, reduce the I2C
> retry count to 3 for X550 and above. This should avoid any possible
> regressions in existing devices.

There is no reason to check the MAC type. There are no devices prior to  
X550 that can use I2C combined bus cycles - the CS4227 on Xeon D is the  
only one. So just change the retry count if that is what is needed. There  
is no need to make it conditional.

> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
> ---
>  drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c  
> b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
> index 4aa6793..10a102c 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
> @@ -121,6 +121,8 @@ s32 ixgbe_read_i2c_combined_generic_int(struct  
> ixgbe_hw *hw, u8 addr,
>  	u8 reg_high;
>  	u8 csum;
>
> +	if (hw->mac.type >= ixgbe_mac_X550)
> +		max_retry = 3;
>  	reg_high = ((reg >> 7) & 0xFE) | 1;     /* Indicate read combined */
>  	csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
>  	csum = ~csum;
> @@ -1756,6 +1758,8 @@ static s32 ixgbe_read_i2c_byte_generic_int(struct  
> ixgbe_hw *hw, u8 byte_offset,
>  	u32 swfw_mask = hw->phy.phy_semaphore_mask;
>  	bool nack = true;
>
> +	if (hw->mac.type >= ixgbe_mac_X550)
> +		max_retry = 3;
>  	if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr))
>  		max_retry = IXGBE_SFP_DETECT_RETRIES;
>


--
Mark Rustad, Networking Division, Intel Corporation
Rustad, Mark D Nov. 10, 2016, 5:37 p.m. UTC | #2
I should have been more specific in my previous message. See below:

Mark D <mark.d.rustad@intel.com> wrote:

> Tony Nguyen <anthony.l.nguyen@intel.com> wrote:
>
>> A retry count of 10 is likely to run into problems on X550 devices that
>> have to detect and reset unresponsive CS4227 devices. So, reduce the I2C
>> retry count to 3 for X550 and above. This should avoid any possible
>> regressions in existing devices.
>
> There is no reason to check the MAC type. There are no devices prior to  
> X550 that can use I2C combined bus cycles - the CS4227 on Xeon D is the  
> only one. So just change the retry count if that is what is needed. There  
> is no need to make it conditional.
>
>> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
>> ---
>>  drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c  
>> b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
>> index 4aa6793..10a102c 100644
>> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
>> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
>> @@ -121,6 +121,8 @@ s32 ixgbe_read_i2c_combined_generic_int(struct  
>> ixgbe_hw *hw, u8 addr,
>>  	u8 reg_high;
>>  	u8 csum;
>>
>> +	if (hw->mac.type >= ixgbe_mac_X550)
>> +		max_retry = 3;

This MAC check is not needed, because this function can only be used with  
MACs >= X550. So, the normal retry should just be changed.

>>  	reg_high = ((reg >> 7) & 0xFE) | 1;     /* Indicate read combined */
>>  	csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
>>  	csum = ~csum;
>> @@ -1756,6 +1758,8 @@ static s32 ixgbe_read_i2c_byte_generic_int(struct  
>> ixgbe_hw *hw, u8 byte_offset,
>>  	u32 swfw_mask = hw->phy.phy_semaphore_mask;
>>  	bool nack = true;
>>
>> +	if (hw->mac.type >= ixgbe_mac_X550)
>> +		max_retry = 3;

This MAC check is needed, because we don't want to change the behavior of  
older devices. This I2C path is used with many of the MACs, so this is as  
it should be.

>>  	if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr))
>>  		max_retry = IXGBE_SFP_DETECT_RETRIES;

--
Mark Rustad, Networking Division, Intel Corporation
diff mbox

Patch

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
index 4aa6793..10a102c 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c
@@ -121,6 +121,8 @@  s32 ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr,
 	u8 reg_high;
 	u8 csum;
 
+	if (hw->mac.type >= ixgbe_mac_X550)
+		max_retry = 3;
 	reg_high = ((reg >> 7) & 0xFE) | 1;     /* Indicate read combined */
 	csum = ixgbe_ones_comp_byte_add(reg_high, reg & 0xFF);
 	csum = ~csum;
@@ -1756,6 +1758,8 @@  static s32 ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset,
 	u32 swfw_mask = hw->phy.phy_semaphore_mask;
 	bool nack = true;
 
+	if (hw->mac.type >= ixgbe_mac_X550)
+		max_retry = 3;
 	if (ixgbe_is_sfp_probe(hw, byte_offset, dev_addr))
 		max_retry = IXGBE_SFP_DETECT_RETRIES;