Commit 6987bd25 authored by Alan Brady's avatar Alan Brady Committed by Jeff Kirsher
Browse files

i40e: group autoneg PHY types together



This separates the setting of autoneg in i40e_phy_types_to_ethtool into
its own conditional.  Doing this adds clarity as what PHYs
support/advertise autoneg and makes it easier to add new PHY types in
the future.

This also fixes an issue on devices with CRT_RETIMER where advertising
autoneg was being set, but supported autoneg was not.

Signed-off-by: default avatarAlan Brady <alan.brady@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent a03af69f
Loading
Loading
Loading
Loading
+41 −44
Original line number Diff line number Diff line
@@ -268,9 +268,7 @@ static void i40e_phy_type_to_ethtool(struct i40e_pf *pf, u32 *supported,
	*advertising = 0x0;

	if (phy_types & I40E_CAP_PHY_TYPE_SGMII) {
		*supported |= SUPPORTED_Autoneg |
			      SUPPORTED_1000baseT_Full;
		*advertising |= ADVERTISED_Autoneg;
		*supported |= SUPPORTED_1000baseT_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)
			*advertising |= ADVERTISED_1000baseT_Full;
		if (pf->hw_features & I40E_HW_100M_SGMII_CAPABLE) {
@@ -289,9 +287,7 @@ static void i40e_phy_type_to_ethtool(struct i40e_pf *pf, u32 *supported,
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_T ||
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_SR ||
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_LR) {
		*supported |= SUPPORTED_Autoneg |
			      SUPPORTED_10000baseT_Full;
		*advertising |= ADVERTISED_Autoneg;
		*supported |= SUPPORTED_10000baseT_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)
			*advertising |= ADVERTISED_10000baseT_Full;
	}
@@ -301,16 +297,12 @@ static void i40e_phy_type_to_ethtool(struct i40e_pf *pf, u32 *supported,
		*supported |= SUPPORTED_40000baseCR4_Full;
	if (phy_types & I40E_CAP_PHY_TYPE_40GBASE_CR4_CU ||
	    phy_types & I40E_CAP_PHY_TYPE_40GBASE_CR4) {
		*supported |= SUPPORTED_Autoneg |
			      SUPPORTED_40000baseCR4_Full;
		*advertising |= ADVERTISED_Autoneg;
		*supported |= SUPPORTED_40000baseCR4_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_40GB)
			*advertising |= ADVERTISED_40000baseCR4_Full;
	}
	if (phy_types & I40E_CAP_PHY_TYPE_100BASE_TX) {
		*supported |= SUPPORTED_Autoneg |
			      SUPPORTED_100baseT_Full;
		*advertising |= ADVERTISED_Autoneg;
		*supported |= SUPPORTED_100baseT_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_100MB)
			*advertising |= ADVERTISED_100baseT_Full;
	}
@@ -318,9 +310,7 @@ static void i40e_phy_type_to_ethtool(struct i40e_pf *pf, u32 *supported,
	    phy_types & I40E_CAP_PHY_TYPE_1000BASE_SX ||
	    phy_types & I40E_CAP_PHY_TYPE_1000BASE_LX ||
	    phy_types & I40E_CAP_PHY_TYPE_1000BASE_T_OPTICAL) {
		*supported |= SUPPORTED_Autoneg |
			      SUPPORTED_1000baseT_Full;
		*advertising |= ADVERTISED_Autoneg;
		*supported |= SUPPORTED_1000baseT_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)
			*advertising |= ADVERTISED_1000baseT_Full;
	}
@@ -329,47 +319,54 @@ static void i40e_phy_type_to_ethtool(struct i40e_pf *pf, u32 *supported,
	if (phy_types & I40E_CAP_PHY_TYPE_40GBASE_LR4)
		*supported |= SUPPORTED_40000baseLR4_Full;
	if (phy_types & I40E_CAP_PHY_TYPE_40GBASE_KR4) {
		*supported |= SUPPORTED_40000baseKR4_Full |
			      SUPPORTED_Autoneg;
		*advertising |= ADVERTISED_40000baseKR4_Full |
				ADVERTISED_Autoneg;
		*supported |= SUPPORTED_40000baseKR4_Full;
		*advertising |= ADVERTISED_40000baseKR4_Full;
	}
	if (phy_types & I40E_CAP_PHY_TYPE_20GBASE_KR2) {
		*supported |= SUPPORTED_20000baseKR2_Full |
			      SUPPORTED_Autoneg;
		*advertising |= ADVERTISED_Autoneg;
		*supported |= SUPPORTED_20000baseKR2_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_20GB)
			*advertising |= ADVERTISED_20000baseKR2_Full;
	}
	if (phy_types & I40E_CAP_PHY_TYPE_10GBASE_KR) {
		if (!(pf->hw_features & I40E_HW_HAVE_CRT_RETIMER))
			*supported |= SUPPORTED_10000baseKR_Full |
				      SUPPORTED_Autoneg;
		*advertising |= ADVERTISED_Autoneg;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)
			if (!(pf->hw_features & I40E_HW_HAVE_CRT_RETIMER))
				*advertising |= ADVERTISED_10000baseKR_Full;
	}
	if (phy_types & I40E_CAP_PHY_TYPE_10GBASE_KX4) {
		*supported |= SUPPORTED_10000baseKX4_Full |
			      SUPPORTED_Autoneg;
		*advertising |= ADVERTISED_Autoneg;
		*supported |= SUPPORTED_10000baseKX4_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)
			*advertising |= ADVERTISED_10000baseKX4_Full;
	}
	if (phy_types & I40E_CAP_PHY_TYPE_1000BASE_KX) {
		if (!(pf->hw_features & I40E_HW_HAVE_CRT_RETIMER))
			*supported |= SUPPORTED_1000baseKX_Full |
				      SUPPORTED_Autoneg;
		*advertising |= ADVERTISED_Autoneg;
	if (phy_types & I40E_CAP_PHY_TYPE_10GBASE_KR &&
	    !(pf->hw_features & I40E_HW_HAVE_CRT_RETIMER)) {
		*supported |= SUPPORTED_10000baseKR_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_10GB)
			*advertising |= ADVERTISED_10000baseKR_Full;
	}
	if (phy_types & I40E_CAP_PHY_TYPE_1000BASE_KX &&
	    !(pf->hw_features & I40E_HW_HAVE_CRT_RETIMER)) {
		*supported |= SUPPORTED_1000baseKX_Full;
		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)
			if (!(pf->hw_features & I40E_HW_HAVE_CRT_RETIMER))
			*advertising |= ADVERTISED_1000baseKX_Full;
	}
	if (phy_types & I40E_CAP_PHY_TYPE_25GBASE_KR ||
	    phy_types & I40E_CAP_PHY_TYPE_25GBASE_CR ||
	/* Autoneg PHY types */
	if (phy_types & I40E_CAP_PHY_TYPE_SGMII ||
	    phy_types & I40E_CAP_PHY_TYPE_40GBASE_KR4 ||
	    phy_types & I40E_CAP_PHY_TYPE_40GBASE_CR4_CU ||
	    phy_types & I40E_CAP_PHY_TYPE_40GBASE_CR4 ||
	    phy_types & I40E_CAP_PHY_TYPE_25GBASE_SR ||
	    phy_types & I40E_CAP_PHY_TYPE_25GBASE_LR) {
	    phy_types & I40E_CAP_PHY_TYPE_25GBASE_LR ||
	    phy_types & I40E_CAP_PHY_TYPE_25GBASE_KR ||
	    phy_types & I40E_CAP_PHY_TYPE_25GBASE_CR ||
	    phy_types & I40E_CAP_PHY_TYPE_20GBASE_KR2 ||
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_T ||
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_SR ||
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_LR ||
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_KX4 ||
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_KR ||
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_CR1_CU ||
	    phy_types & I40E_CAP_PHY_TYPE_10GBASE_CR1 ||
	    phy_types & I40E_CAP_PHY_TYPE_1000BASE_T_OPTICAL ||
	    phy_types & I40E_CAP_PHY_TYPE_1000BASE_T ||
	    phy_types & I40E_CAP_PHY_TYPE_1000BASE_SX ||
	    phy_types & I40E_CAP_PHY_TYPE_1000BASE_LX ||
	    phy_types & I40E_CAP_PHY_TYPE_1000BASE_KX ||
	    phy_types & I40E_CAP_PHY_TYPE_100BASE_TX) {
		*supported |= SUPPORTED_Autoneg;
		*advertising |= ADVERTISED_Autoneg;
	}