Skip to content

Commit 24407a0

Browse files
alicemickuba-moo
authored andcommitted
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]>
1 parent ba1124f commit 24407a0

File tree

4 files changed

+43
-3
lines changed

4 files changed

+43
-3
lines changed

drivers/net/ethernet/intel/ice/ice_adminq_cmd.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1099,7 +1099,15 @@ struct ice_aqc_get_phy_caps {
10991099
#define ICE_PHY_TYPE_HIGH_100G_CAUI2 BIT_ULL(2)
11001100
#define ICE_PHY_TYPE_HIGH_100G_AUI2_AOC_ACC BIT_ULL(3)
11011101
#define ICE_PHY_TYPE_HIGH_100G_AUI2 BIT_ULL(4)
1102-
#define ICE_PHY_TYPE_HIGH_MAX_INDEX 4
1102+
#define ICE_PHY_TYPE_HIGH_200G_CR4_PAM4 BIT_ULL(5)
1103+
#define ICE_PHY_TYPE_HIGH_200G_SR4 BIT_ULL(6)
1104+
#define ICE_PHY_TYPE_HIGH_200G_FR4 BIT_ULL(7)
1105+
#define ICE_PHY_TYPE_HIGH_200G_LR4 BIT_ULL(8)
1106+
#define ICE_PHY_TYPE_HIGH_200G_DR4 BIT_ULL(9)
1107+
#define ICE_PHY_TYPE_HIGH_200G_KR4_PAM4 BIT_ULL(10)
1108+
#define ICE_PHY_TYPE_HIGH_200G_AUI4_AOC_ACC BIT_ULL(11)
1109+
#define ICE_PHY_TYPE_HIGH_200G_AUI4 BIT_ULL(12)
1110+
#define ICE_PHY_TYPE_HIGH_MAX_INDEX 12
11031111

11041112
struct ice_aqc_get_phy_caps_data {
11051113
__le64 phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */
@@ -1319,6 +1327,7 @@ struct ice_aqc_get_link_status_data {
13191327
#define ICE_AQ_LINK_SPEED_40GB BIT(8)
13201328
#define ICE_AQ_LINK_SPEED_50GB BIT(9)
13211329
#define ICE_AQ_LINK_SPEED_100GB BIT(10)
1330+
#define ICE_AQ_LINK_SPEED_200GB BIT(11)
13221331
#define ICE_AQ_LINK_SPEED_UNKNOWN BIT(15)
13231332
__le32 reserved3; /* Aligns next field to 8-byte boundary */
13241333
__le64 phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */

drivers/net/ethernet/intel/ice/ice_common.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6092,6 +6092,7 @@ static const u32 ice_aq_to_link_speed[] = {
60926092
SPEED_40000,
60936093
SPEED_50000,
60946094
SPEED_100000, /* BIT(10) */
6095+
SPEED_200000,
60956096
};
60966097

60976098
/**

drivers/net/ethernet/intel/ice/ice_ethtool.c

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
403411
static 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

415424
void __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;

drivers/net/ethernet/intel/ice/ice_ethtool.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ phy_type_high_lkup[] = {
100100
[2] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full),
101101
[3] = ICE_PHY_TYPE(100GB, 100000baseSR2_Full),
102102
[4] = ICE_PHY_TYPE(100GB, 100000baseCR2_Full),
103+
[5] = ICE_PHY_TYPE(200GB, 200000baseCR4_Full),
104+
[6] = ICE_PHY_TYPE(200GB, 200000baseSR4_Full),
105+
[7] = ICE_PHY_TYPE(200GB, 200000baseLR4_ER4_FR4_Full),
106+
[8] = ICE_PHY_TYPE(200GB, 200000baseLR4_ER4_FR4_Full),
107+
[9] = ICE_PHY_TYPE(200GB, 200000baseDR4_Full),
108+
[10] = ICE_PHY_TYPE(200GB, 200000baseKR4_Full),
109+
[11] = ICE_PHY_TYPE(200GB, 200000baseSR4_Full),
110+
[12] = ICE_PHY_TYPE(200GB, 200000baseCR4_Full),
103111
};
104112

105113
#endif /* !_ICE_ETHTOOL_H_ */

0 commit comments

Comments
 (0)