ixgbe: Disable flow control for XFI
Flow control autonegotiation is not supported for XFI. Make sure that ixgbe_device_supports_autoneg_fc() returns false and hw->fc.disable_fc_autoneg is set to true to avoid running the fc_autoneg function for that device. Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com> Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
ae84dbf7ff
commit
7adbccbbb5
|
@ -97,7 +97,10 @@ bool ixgbe_device_supports_autoneg_fc(struct ixgbe_hw *hw)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ixgbe_media_type_backplane:
|
case ixgbe_media_type_backplane:
|
||||||
supported = true;
|
if (hw->device_id == IXGBE_DEV_ID_X550EM_X_XFI)
|
||||||
|
supported = false;
|
||||||
|
else
|
||||||
|
supported = true;
|
||||||
break;
|
break;
|
||||||
case ixgbe_media_type_copper:
|
case ixgbe_media_type_copper:
|
||||||
/* only some copper devices support flow control autoneg */
|
/* only some copper devices support flow control autoneg */
|
||||||
|
|
|
@ -2843,7 +2843,7 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw)
|
||||||
{
|
{
|
||||||
bool pause, asm_dir;
|
bool pause, asm_dir;
|
||||||
u32 reg_val;
|
u32 reg_val;
|
||||||
s32 rc;
|
s32 rc = 0;
|
||||||
|
|
||||||
/* Validate the requested mode */
|
/* Validate the requested mode */
|
||||||
if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) {
|
if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) {
|
||||||
|
@ -2886,32 +2886,37 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw)
|
||||||
return IXGBE_ERR_CONFIG;
|
return IXGBE_ERR_CONFIG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hw->device_id != IXGBE_DEV_ID_X550EM_X_KR &&
|
switch (hw->device_id) {
|
||||||
hw->device_id != IXGBE_DEV_ID_X550EM_A_KR &&
|
case IXGBE_DEV_ID_X550EM_X_KR:
|
||||||
hw->device_id != IXGBE_DEV_ID_X550EM_A_KR_L)
|
case IXGBE_DEV_ID_X550EM_A_KR:
|
||||||
return 0;
|
case IXGBE_DEV_ID_X550EM_A_KR_L:
|
||||||
|
rc = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||||
|
IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
|
||||||
|
IXGBE_SB_IOSF_TARGET_KR_PHY,
|
||||||
|
®_val);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
rc = hw->mac.ops.read_iosf_sb_reg(hw,
|
reg_val &= ~(IXGBE_KRM_AN_CNTL_1_SYM_PAUSE |
|
||||||
IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
|
IXGBE_KRM_AN_CNTL_1_ASM_PAUSE);
|
||||||
IXGBE_SB_IOSF_TARGET_KR_PHY,
|
if (pause)
|
||||||
®_val);
|
reg_val |= IXGBE_KRM_AN_CNTL_1_SYM_PAUSE;
|
||||||
if (rc)
|
if (asm_dir)
|
||||||
return rc;
|
reg_val |= IXGBE_KRM_AN_CNTL_1_ASM_PAUSE;
|
||||||
|
rc = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||||
reg_val &= ~(IXGBE_KRM_AN_CNTL_1_SYM_PAUSE |
|
IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
|
||||||
IXGBE_KRM_AN_CNTL_1_ASM_PAUSE);
|
IXGBE_SB_IOSF_TARGET_KR_PHY,
|
||||||
if (pause)
|
reg_val);
|
||||||
reg_val |= IXGBE_KRM_AN_CNTL_1_SYM_PAUSE;
|
|
||||||
if (asm_dir)
|
|
||||||
reg_val |= IXGBE_KRM_AN_CNTL_1_ASM_PAUSE;
|
|
||||||
rc = hw->mac.ops.write_iosf_sb_reg(hw,
|
|
||||||
IXGBE_KRM_AN_CNTL_1(hw->bus.lan_id),
|
|
||||||
IXGBE_SB_IOSF_TARGET_KR_PHY,
|
|
||||||
reg_val);
|
|
||||||
|
|
||||||
/* This device does not fully support AN. */
|
|
||||||
hw->fc.disable_fc_autoneg = true;
|
|
||||||
|
|
||||||
|
/* This device does not fully support AN. */
|
||||||
|
hw->fc.disable_fc_autoneg = true;
|
||||||
|
break;
|
||||||
|
case IXGBE_DEV_ID_X550EM_X_XFI:
|
||||||
|
hw->fc.disable_fc_autoneg = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue