net/ixgbe/base: add MAC link setup for X550a SFP
This patch adds ixgbe_setup_mac_link_sfp_x550a for X550a SFP. Signed-off-by: Beilei Xing <beilei.xing@intel.com>
This commit is contained in:
parent
e367815d20
commit
ce8beb5a75
@ -4062,6 +4062,7 @@ struct ixgbe_hw {
|
||||
#define IXGBE_KRM_PORT_CAR_GEN_CTRL(P) ((P) ? 0x8010 : 0x4010)
|
||||
#define IXGBE_KRM_LINK_CTRL_1(P) ((P) ? 0x820C : 0x420C)
|
||||
#define IXGBE_KRM_AN_CNTL_1(P) ((P) ? 0x822C : 0x422C)
|
||||
#define IXGBE_KRM_AN_CNTL_8(P) ((P) ? 0x8248 : 0x4248)
|
||||
#define IXGBE_KRM_SGMII_CTRL(P) ((P) ? 0x82A0 : 0x42A0)
|
||||
#define IXGBE_KRM_DSP_TXFFE_STATE_4(P) ((P) ? 0x8634 : 0x4634)
|
||||
#define IXGBE_KRM_DSP_TXFFE_STATE_5(P) ((P) ? 0x8638 : 0x4638)
|
||||
@ -4090,6 +4091,9 @@ struct ixgbe_hw {
|
||||
#define IXGBE_KRM_AN_CNTL_1_SYM_PAUSE (1 << 28)
|
||||
#define IXGBE_KRM_AN_CNTL_1_ASM_PAUSE (1 << 29)
|
||||
|
||||
#define IXGBE_KRM_AN_CNTL_8_LINEAR (1 << 0)
|
||||
#define IXGBE_KRM_AN_CNTL_8_LIMITING (1 << 1)
|
||||
|
||||
#define IXGBE_KRM_SGMII_CTRL_MAC_TAR_FORCE_100_D (1 << 12)
|
||||
#define IXGBE_KRM_SGMII_CTRL_MAC_TAR_FORCE_10_D (1 << 19)
|
||||
|
||||
|
@ -1488,9 +1488,14 @@ void ixgbe_init_mac_link_ops_X550em(struct ixgbe_hw *hw)
|
||||
mac->ops.enable_tx_laser = NULL;
|
||||
mac->ops.flap_tx_laser = NULL;
|
||||
mac->ops.setup_link = ixgbe_setup_mac_link_multispeed_fiber;
|
||||
mac->ops.setup_mac_link = ixgbe_setup_mac_link_sfp_x550em;
|
||||
mac->ops.set_rate_select_speed =
|
||||
ixgbe_set_soft_rate_select_speed;
|
||||
if (hw->device_id == IXGBE_DEV_ID_X550EM_A_SFP_N)
|
||||
mac->ops.setup_mac_link =
|
||||
ixgbe_setup_mac_link_sfp_x550a;
|
||||
else
|
||||
mac->ops.setup_mac_link =
|
||||
ixgbe_setup_mac_link_sfp_x550em;
|
||||
break;
|
||||
case ixgbe_media_type_copper:
|
||||
mac->ops.setup_link = ixgbe_setup_mac_link_t_X550em;
|
||||
@ -2127,6 +2132,63 @@ s32 ixgbe_setup_mac_link_sfp_x550em(struct ixgbe_hw *hw,
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_mac_link_sfp_x550a - Setup internal PHY for SFP
|
||||
* @hw: pointer to hardware structure
|
||||
*
|
||||
* Configure the the integrated PHY for SFP support.
|
||||
**/
|
||||
s32 ixgbe_setup_mac_link_sfp_x550a(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed speed,
|
||||
bool autoneg_wait_to_complete)
|
||||
{
|
||||
s32 ret_val;
|
||||
u32 reg_val;
|
||||
bool setup_linear = false;
|
||||
|
||||
UNREFERENCED_1PARAMETER(autoneg_wait_to_complete);
|
||||
|
||||
/* Check if SFP module is supported and linear */
|
||||
ret_val = ixgbe_supported_sfp_modules_X550em(hw, &setup_linear);
|
||||
|
||||
/* If no SFP module present, then return success. Return success since
|
||||
* SFP not present error is not excepted in the setup MAC link flow.
|
||||
*/
|
||||
if (ret_val == IXGBE_ERR_SFP_NOT_PRESENT)
|
||||
return IXGBE_SUCCESS;
|
||||
|
||||
if (ret_val != IXGBE_SUCCESS)
|
||||
return ret_val;
|
||||
|
||||
/* Configure internal PHY for native SFI */
|
||||
ret_val = hw->mac.ops.read_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_AN_CNTL_8(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, ®_val);
|
||||
|
||||
if (ret_val != IXGBE_SUCCESS)
|
||||
return ret_val;
|
||||
|
||||
if (setup_linear) {
|
||||
reg_val &= ~IXGBE_KRM_AN_CNTL_8_LIMITING;
|
||||
reg_val |= IXGBE_KRM_AN_CNTL_8_LINEAR;
|
||||
} else {
|
||||
reg_val |= IXGBE_KRM_AN_CNTL_8_LIMITING;
|
||||
reg_val &= ~IXGBE_KRM_AN_CNTL_8_LINEAR;
|
||||
}
|
||||
|
||||
ret_val = hw->mac.ops.write_iosf_sb_reg(hw,
|
||||
IXGBE_KRM_AN_CNTL_8(hw->bus.lan_id),
|
||||
IXGBE_SB_IOSF_TARGET_KR_PHY, reg_val);
|
||||
|
||||
if (ret_val != IXGBE_SUCCESS)
|
||||
return ret_val;
|
||||
|
||||
/* Setup XFI/SFI internal link. */
|
||||
ret_val = ixgbe_setup_ixfi_x550em(hw, &speed);
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixgbe_setup_ixfi_x550em_x - MAC specific iXFI configuration
|
||||
* @hw: pointer to hardware structure
|
||||
|
@ -100,6 +100,9 @@ s32 ixgbe_setup_fc_X550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_setup_mac_link_sfp_x550em(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed speed,
|
||||
bool autoneg_wait_to_complete);
|
||||
s32 ixgbe_setup_mac_link_sfp_x550a(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed speed,
|
||||
bool autoneg_wait_to_complete);
|
||||
s32 ixgbe_handle_lasi_ext_t_x550em(struct ixgbe_hw *hw);
|
||||
s32 ixgbe_setup_mac_link_t_X550em(struct ixgbe_hw *hw,
|
||||
ixgbe_link_speed speed,
|
||||
|
Loading…
Reference in New Issue
Block a user