@@ -400,6 +400,14 @@ static const u32 ice_adv_lnk_speed_100000[] __initconst = {
400400 ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT ,
401401};
402402
403+ static const u32 ice_adv_lnk_speed_200000 [] __initconst = {
404+ ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT ,
405+ ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT ,
406+ ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT ,
407+ ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT ,
408+ ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT ,
409+ };
410+
403411static struct ethtool_forced_speed_map ice_adv_lnk_speed_maps [] __ro_after_init = {
404412 ETHTOOL_FORCED_SPEED_MAP (ice_adv_lnk_speed , 100 ),
405413 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
410418 ETHTOOL_FORCED_SPEED_MAP (ice_adv_lnk_speed , 40000 ),
411419 ETHTOOL_FORCED_SPEED_MAP (ice_adv_lnk_speed , 50000 ),
412420 ETHTOOL_FORCED_SPEED_MAP (ice_adv_lnk_speed , 100000 ),
421+ ETHTOOL_FORCED_SPEED_MAP (ice_adv_lnk_speed , 200000 ),
413422};
414423
415424void __init ice_adv_lnk_speed_maps_init (void )
@@ -1712,6 +1721,15 @@ ice_get_ethtool_stats(struct net_device *netdev,
17121721 ICE_PHY_TYPE_HIGH_100G_AUI2_AOC_ACC | \
17131722 ICE_PHY_TYPE_HIGH_100G_AUI2)
17141723
1724+ #define ICE_PHY_TYPE_HIGH_MASK_200G (ICE_PHY_TYPE_HIGH_200G_CR4_PAM4 | \
1725+ ICE_PHY_TYPE_HIGH_200G_SR4 | \
1726+ ICE_PHY_TYPE_HIGH_200G_FR4 | \
1727+ ICE_PHY_TYPE_HIGH_200G_LR4 | \
1728+ ICE_PHY_TYPE_HIGH_200G_DR4 | \
1729+ ICE_PHY_TYPE_HIGH_200G_KR4_PAM4 | \
1730+ ICE_PHY_TYPE_HIGH_200G_AUI4_AOC_ACC | \
1731+ ICE_PHY_TYPE_HIGH_200G_AUI4)
1732+
17151733/**
17161734 * ice_mask_min_supported_speeds
17171735 * @hw: pointer to the HW structure
@@ -1726,8 +1744,9 @@ ice_mask_min_supported_speeds(struct ice_hw *hw,
17261744 u64 phy_types_high , u64 * phy_types_low )
17271745{
17281746 /* if QSFP connection with 100G speed, minimum supported speed is 25G */
1729- if (* phy_types_low & ICE_PHY_TYPE_LOW_MASK_100G ||
1730- phy_types_high & ICE_PHY_TYPE_HIGH_MASK_100G )
1747+ if ((* phy_types_low & ICE_PHY_TYPE_LOW_MASK_100G ) ||
1748+ (phy_types_high & ICE_PHY_TYPE_HIGH_MASK_100G ) ||
1749+ (phy_types_high & ICE_PHY_TYPE_HIGH_MASK_200G ))
17311750 * phy_types_low &= ~ICE_PHY_TYPE_LOW_MASK_MIN_25G ;
17321751 else if (!ice_is_100m_speed_supported (hw ))
17331752 * phy_types_low &= ~ICE_PHY_TYPE_LOW_MASK_MIN_1G ;
@@ -1870,6 +1889,9 @@ ice_get_settings_link_up(struct ethtool_link_ksettings *ks,
18701889 ice_phy_type_to_ethtool (netdev , ks );
18711890
18721891 switch (link_info -> link_speed ) {
1892+ case ICE_AQ_LINK_SPEED_200GB :
1893+ ks -> base .speed = SPEED_200000 ;
1894+ break ;
18731895 case ICE_AQ_LINK_SPEED_100GB :
18741896 ks -> base .speed = SPEED_100000 ;
18751897 break ;
0 commit comments