Enhanced the VF's check mac link implementation to provide accurate link rate information for newly supported Amber-Lite NICs VF.
Signed-off-by: Zaiyu Wang <[email protected]> --- drivers/net/txgbe/base/txgbe_regs.h | 5 +++ drivers/net/txgbe/base/txgbe_vf.c | 48 +++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/drivers/net/txgbe/base/txgbe_regs.h b/drivers/net/txgbe/base/txgbe_regs.h index 638404bdff..95c585a025 100644 --- a/drivers/net/txgbe/base/txgbe_regs.h +++ b/drivers/net/txgbe/base/txgbe_regs.h @@ -1305,6 +1305,11 @@ enum txgbe_5tuple_protocol { #define TXGBE_VFSTATUS_BW_10G LS(0x1, 1, 0x7) #define TXGBE_VFSTATUS_BW_1G LS(0x2, 1, 0x7) #define TXGBE_VFSTATUS_BW_100M LS(0x4, 1, 0x7) +#define TXGBE_VFSTATUS_BW_MASK_AML MS(1, 0xF) +#define TXGBE_VFSTATUS_BW_AML_50G LS(0x1, 1, 0xF) +#define TXGBE_VFSTATUS_BW_AML_40G LS(0x2, 1, 0xF) +#define TXGBE_VFSTATUS_BW_AML_25G LS(0x4, 1, 0xF) +#define TXGBE_VFSTATUS_BW_AML_10G LS(0x8, 1, 0xF) #define TXGBE_VFSTATUS_BUSY MS(4, 0x1) #define TXGBE_VFSTATUS_LANID MS(8, 0x1) #define TXGBE_VFRST 0x000008 diff --git a/drivers/net/txgbe/base/txgbe_vf.c b/drivers/net/txgbe/base/txgbe_vf.c index efa32ca10a..bfaac3bfa4 100644 --- a/drivers/net/txgbe/base/txgbe_vf.c +++ b/drivers/net/txgbe/base/txgbe_vf.c @@ -492,24 +492,46 @@ s32 txgbe_check_mac_link_vf(struct txgbe_hw *hw, u32 *speed, /* for SFP+ modules and DA cables it can take up to 500usecs * before the link status is correct */ - if (mac->type == txgbe_mac_sp_vf && wait_to_complete) { + if ((mac->type == txgbe_mac_sp_vf || + mac->type == txgbe_mac_aml_vf) && wait_to_complete) { if (po32m(hw, TXGBE_VFSTATUS, TXGBE_VFSTATUS_UP, 0, NULL, 5, 100)) goto out; } - switch (links_reg & TXGBE_VFSTATUS_BW_MASK) { - case TXGBE_VFSTATUS_BW_10G: - *speed = TXGBE_LINK_SPEED_10GB_FULL; - break; - case TXGBE_VFSTATUS_BW_1G: - *speed = TXGBE_LINK_SPEED_1GB_FULL; - break; - case TXGBE_VFSTATUS_BW_100M: - *speed = TXGBE_LINK_SPEED_100M_FULL; - break; - default: - *speed = TXGBE_LINK_SPEED_UNKNOWN; + if (hw->mac.type == txgbe_mac_sp_vf) { + if (hw->device_id == TXGBE_DEV_ID_SP1000_VF || + hw->device_id == TXGBE_DEV_ID_WX1820_VF) + switch (links_reg & TXGBE_VFSTATUS_BW_MASK) { + case TXGBE_VFSTATUS_BW_10G: + *speed = TXGBE_LINK_SPEED_10GB_FULL; + break; + case TXGBE_VFSTATUS_BW_1G: + *speed = TXGBE_LINK_SPEED_1GB_FULL; + break; + case TXGBE_VFSTATUS_BW_100M: + *speed = TXGBE_LINK_SPEED_100M_FULL; + break; + default: + *speed = TXGBE_LINK_SPEED_UNKNOWN; + } + } else { + switch (links_reg & TXGBE_VFSTATUS_BW_MASK_AML) { + case TXGBE_VFSTATUS_BW_AML_10G: + *speed = TXGBE_LINK_SPEED_10GB_FULL; + break; + case TXGBE_VFSTATUS_BW_AML_25G: + *speed = TXGBE_LINK_SPEED_25GB_FULL; + break; + case TXGBE_VFSTATUS_BW_AML_40G: + *speed = TXGBE_LINK_SPEED_40GB_FULL; + break; + case TXGBE_VFSTATUS_BW_AML_50G: + *speed = TXGBE_LINK_SPEED_50GB_FULL; + break; + default: + *speed = TXGBE_LINK_SPEED_UNKNOWN; + } } if (no_pflink_check) { -- 2.21.0.windows.1

