diff options
| author | Alice Michael <[email protected]> | 2023-10-25 21:41:53 +0000 |
|---|---|---|
| committer | Jakub Kicinski <[email protected]> | 2023-10-27 03:32:38 +0000 |
| commit | 24407a01e57c07aa919279ce85495ad38680cc39 (patch) | |
| tree | 6616b51ea26c8602d7084c6e7044526675aa9858 /drivers/net/ethernet/intel/ice/ice_ethtool.c | |
| parent | ice: Add E830 device IDs, MAC type and registers (diff) | |
| download | kernel-24407a01e57c07aa919279ce85495ad38680cc39.tar.gz kernel-24407a01e57c07aa919279ce85495ad38680cc39.zip | |
ice: Add 200G speed/phy type use
Add the support for 200G phy speeds and the mapping for their
advertisement in link. Add the new PHY type bits for AQ command, as
needed for 200G E830 controllers.
Signed-off-by: Alice Michael <[email protected]>
Co-developed-by: Pawel Chmielewski <[email protected]>
Signed-off-by: Pawel Chmielewski <[email protected]>
Reviewed-by: Simon Horman <[email protected]>
Signed-off-by: Paul Greenwalt <[email protected]>
Tested-by: Tony Brelinski <[email protected]>
Signed-off-by: Jacob Keller <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_ethtool.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_ethtool.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c index 7870a3984547..a34083567e6f 100644 --- a/drivers/net/ethernet/intel/ice/ice_ethtool.c +++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c @@ -400,6 +400,14 @@ static const u32 ice_adv_lnk_speed_100000[] __initconst = { ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT, }; +static const u32 ice_adv_lnk_speed_200000[] __initconst = { + ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT, + ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT, + ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT, + ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT, + ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT, +}; + static struct ethtool_forced_speed_map ice_adv_lnk_speed_maps[] __ro_after_init = { ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 100), ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 1000), @@ -410,6 +418,7 @@ static struct ethtool_forced_speed_map ice_adv_lnk_speed_maps[] __ro_after_init ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 40000), ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 50000), ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 100000), + ETHTOOL_FORCED_SPEED_MAP(ice_adv_lnk_speed, 200000), }; void __init ice_adv_lnk_speed_maps_init(void) @@ -1712,6 +1721,15 @@ ice_get_ethtool_stats(struct net_device *netdev, ICE_PHY_TYPE_HIGH_100G_AUI2_AOC_ACC | \ ICE_PHY_TYPE_HIGH_100G_AUI2) +#define ICE_PHY_TYPE_HIGH_MASK_200G (ICE_PHY_TYPE_HIGH_200G_CR4_PAM4 | \ + ICE_PHY_TYPE_HIGH_200G_SR4 | \ + ICE_PHY_TYPE_HIGH_200G_FR4 | \ + ICE_PHY_TYPE_HIGH_200G_LR4 | \ + ICE_PHY_TYPE_HIGH_200G_DR4 | \ + ICE_PHY_TYPE_HIGH_200G_KR4_PAM4 | \ + ICE_PHY_TYPE_HIGH_200G_AUI4_AOC_ACC | \ + ICE_PHY_TYPE_HIGH_200G_AUI4) + /** * ice_mask_min_supported_speeds * @hw: pointer to the HW structure @@ -1726,8 +1744,9 @@ ice_mask_min_supported_speeds(struct ice_hw *hw, u64 phy_types_high, u64 *phy_types_low) { /* if QSFP connection with 100G speed, minimum supported speed is 25G */ - if (*phy_types_low & ICE_PHY_TYPE_LOW_MASK_100G || - phy_types_high & ICE_PHY_TYPE_HIGH_MASK_100G) + if ((*phy_types_low & ICE_PHY_TYPE_LOW_MASK_100G) || + (phy_types_high & ICE_PHY_TYPE_HIGH_MASK_100G) || + (phy_types_high & ICE_PHY_TYPE_HIGH_MASK_200G)) *phy_types_low &= ~ICE_PHY_TYPE_LOW_MASK_MIN_25G; else if (!ice_is_100m_speed_supported(hw)) *phy_types_low &= ~ICE_PHY_TYPE_LOW_MASK_MIN_1G; @@ -1870,6 +1889,9 @@ ice_get_settings_link_up(struct ethtool_link_ksettings *ks, ice_phy_type_to_ethtool(netdev, ks); switch (link_info->link_speed) { + case ICE_AQ_LINK_SPEED_200GB: + ks->base.speed = SPEED_200000; + break; case ICE_AQ_LINK_SPEED_100GB: ks->base.speed = SPEED_100000; break; |
