mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-13 00:36:48 +07:00
ixgbe: report correct media type for KR, KX and KX4 interfaces
Ethtool reports backplane type interfaces as 1000/10000baseT link modes. This has been corrected to report the media as KR, KX or KX4 based on the backplane interface present. Signed-off-by: Veola Nazareth <veola.nazareth@intel.com> Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
af56b4d865
commit
695b816d1a
@ -151,6 +151,34 @@ static const char ixgbe_gstrings_test[][ETH_GSTRING_LEN] = {
|
|||||||
};
|
};
|
||||||
#define IXGBE_TEST_LEN sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN
|
#define IXGBE_TEST_LEN sizeof(ixgbe_gstrings_test) / ETH_GSTRING_LEN
|
||||||
|
|
||||||
|
/* currently supported speeds for 10G */
|
||||||
|
#define ADVRTSD_MSK_10G (SUPPORTED_10000baseT_Full | \
|
||||||
|
SUPPORTED_10000baseKX4_Full | \
|
||||||
|
SUPPORTED_10000baseKR_Full)
|
||||||
|
|
||||||
|
#define ixgbe_isbackplane(type) ((type) == ixgbe_media_type_backplane)
|
||||||
|
|
||||||
|
static u32 ixgbe_get_supported_10gtypes(struct ixgbe_hw *hw)
|
||||||
|
{
|
||||||
|
if (!ixgbe_isbackplane(hw->phy.media_type))
|
||||||
|
return SUPPORTED_10000baseT_Full;
|
||||||
|
|
||||||
|
switch (hw->device_id) {
|
||||||
|
case IXGBE_DEV_ID_82598:
|
||||||
|
case IXGBE_DEV_ID_82599_KX4:
|
||||||
|
case IXGBE_DEV_ID_82599_KX4_MEZZ:
|
||||||
|
case IXGBE_DEV_ID_X550EM_X_KX4:
|
||||||
|
return SUPPORTED_10000baseKX4_Full;
|
||||||
|
case IXGBE_DEV_ID_82598_BX:
|
||||||
|
case IXGBE_DEV_ID_82599_KR:
|
||||||
|
case IXGBE_DEV_ID_X550EM_X_KR:
|
||||||
|
return SUPPORTED_10000baseKR_Full;
|
||||||
|
default:
|
||||||
|
return SUPPORTED_10000baseKX4_Full |
|
||||||
|
SUPPORTED_10000baseKR_Full;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int ixgbe_get_settings(struct net_device *netdev,
|
static int ixgbe_get_settings(struct net_device *netdev,
|
||||||
struct ethtool_cmd *ecmd)
|
struct ethtool_cmd *ecmd)
|
||||||
{
|
{
|
||||||
@ -165,29 +193,30 @@ static int ixgbe_get_settings(struct net_device *netdev,
|
|||||||
|
|
||||||
/* set the supported link speeds */
|
/* set the supported link speeds */
|
||||||
if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
|
if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
|
||||||
ecmd->supported |= SUPPORTED_10000baseT_Full;
|
ecmd->supported |= ixgbe_get_supported_10gtypes(hw);
|
||||||
if (supported_link & IXGBE_LINK_SPEED_1GB_FULL)
|
if (supported_link & IXGBE_LINK_SPEED_1GB_FULL)
|
||||||
ecmd->supported |= SUPPORTED_1000baseT_Full;
|
ecmd->supported |= SUPPORTED_1000baseT_Full;
|
||||||
if (supported_link & IXGBE_LINK_SPEED_100_FULL)
|
if (supported_link & IXGBE_LINK_SPEED_100_FULL)
|
||||||
ecmd->supported |= SUPPORTED_100baseT_Full;
|
ecmd->supported |= ixgbe_isbackplane(hw->phy.media_type) ?
|
||||||
|
SUPPORTED_1000baseKX_Full :
|
||||||
|
SUPPORTED_1000baseT_Full;
|
||||||
|
|
||||||
|
/* default advertised speed if phy.autoneg_advertised isn't set */
|
||||||
|
ecmd->advertising = ecmd->supported;
|
||||||
/* set the advertised speeds */
|
/* set the advertised speeds */
|
||||||
if (hw->phy.autoneg_advertised) {
|
if (hw->phy.autoneg_advertised) {
|
||||||
|
ecmd->advertising = 0;
|
||||||
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
|
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
|
||||||
ecmd->advertising |= ADVERTISED_100baseT_Full;
|
ecmd->advertising |= ADVERTISED_100baseT_Full;
|
||||||
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
|
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
|
||||||
ecmd->advertising |= ADVERTISED_10000baseT_Full;
|
ecmd->advertising |= ecmd->supported & ADVRTSD_MSK_10G;
|
||||||
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
|
if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL) {
|
||||||
ecmd->advertising |= ADVERTISED_1000baseT_Full;
|
if (ecmd->supported & SUPPORTED_1000baseKX_Full)
|
||||||
|
ecmd->advertising |= ADVERTISED_1000baseKX_Full;
|
||||||
|
else
|
||||||
|
ecmd->advertising |= ADVERTISED_1000baseT_Full;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* default modes in case phy.autoneg_advertised isn't set */
|
|
||||||
if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
|
|
||||||
ecmd->advertising |= ADVERTISED_10000baseT_Full;
|
|
||||||
if (supported_link & IXGBE_LINK_SPEED_1GB_FULL)
|
|
||||||
ecmd->advertising |= ADVERTISED_1000baseT_Full;
|
|
||||||
if (supported_link & IXGBE_LINK_SPEED_100_FULL)
|
|
||||||
ecmd->advertising |= ADVERTISED_100baseT_Full;
|
|
||||||
|
|
||||||
if (hw->phy.multispeed_fiber && !autoneg) {
|
if (hw->phy.multispeed_fiber && !autoneg) {
|
||||||
if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
|
if (supported_link & IXGBE_LINK_SPEED_10GB_FULL)
|
||||||
ecmd->advertising = ADVERTISED_10000baseT_Full;
|
ecmd->advertising = ADVERTISED_10000baseT_Full;
|
||||||
|
Loading…
Reference in New Issue
Block a user