ethtool: Add support for 200Gbps per lane link modes
authorJianbo Liu <jianbol@nvidia.com>
Mon, 3 Feb 2025 21:35:11 +0000 (23:35 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 6 Feb 2025 09:14:01 +0000 (10:14 +0100)
Define 200G, 400G and 800G link modes using 200Gbps per lane.

Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
Reviewed-by: Shahar Shitrit <shshitrit@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/phy/phy-core.c
include/uapi/linux/ethtool.h
net/ethtool/common.c

index 6bf3ec985f3d34a08cd0e856f94788eebf4fefd8..f181f05cb4297b4499492548a792604703bf4c01 100644 (file)
@@ -13,7 +13,7 @@
  */
 const char *phy_speed_to_str(int speed)
 {
-       BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 103,
+       BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 121,
                "Enum ethtool_link_mode_bit_indices and phylib are out of sync. "
                "If a speed or mode has been added please update phy_speed_to_str "
                "and the PHY settings array.\n");
@@ -169,6 +169,12 @@ static const struct phy_setting settings[] = {
        PHY_SETTING( 800000, FULL, 800000baseDR8_2_Full         ),
        PHY_SETTING( 800000, FULL, 800000baseSR8_Full           ),
        PHY_SETTING( 800000, FULL, 800000baseVR8_Full           ),
+       PHY_SETTING( 800000, FULL, 800000baseCR4_Full           ),
+       PHY_SETTING( 800000, FULL, 800000baseKR4_Full           ),
+       PHY_SETTING( 800000, FULL, 800000baseDR4_Full           ),
+       PHY_SETTING( 800000, FULL, 800000baseDR4_2_Full         ),
+       PHY_SETTING( 800000, FULL, 800000baseSR4_Full           ),
+       PHY_SETTING( 800000, FULL, 800000baseVR4_Full           ),
        /* 400G */
        PHY_SETTING( 400000, FULL, 400000baseCR8_Full           ),
        PHY_SETTING( 400000, FULL, 400000baseKR8_Full           ),
@@ -180,6 +186,12 @@ static const struct phy_setting settings[] = {
        PHY_SETTING( 400000, FULL, 400000baseLR4_ER4_FR4_Full   ),
        PHY_SETTING( 400000, FULL, 400000baseDR4_Full           ),
        PHY_SETTING( 400000, FULL, 400000baseSR4_Full           ),
+       PHY_SETTING( 400000, FULL, 400000baseCR2_Full           ),
+       PHY_SETTING( 400000, FULL, 400000baseKR2_Full           ),
+       PHY_SETTING( 400000, FULL, 400000baseDR2_Full           ),
+       PHY_SETTING( 400000, FULL, 400000baseDR2_2_Full         ),
+       PHY_SETTING( 400000, FULL, 400000baseSR2_Full           ),
+       PHY_SETTING( 400000, FULL, 400000baseVR2_Full           ),
        /* 200G */
        PHY_SETTING( 200000, FULL, 200000baseCR4_Full           ),
        PHY_SETTING( 200000, FULL, 200000baseKR4_Full           ),
@@ -191,6 +203,12 @@ static const struct phy_setting settings[] = {
        PHY_SETTING( 200000, FULL, 200000baseLR2_ER2_FR2_Full   ),
        PHY_SETTING( 200000, FULL, 200000baseDR2_Full           ),
        PHY_SETTING( 200000, FULL, 200000baseSR2_Full           ),
+       PHY_SETTING( 200000, FULL, 200000baseCR_Full            ),
+       PHY_SETTING( 200000, FULL, 200000baseKR_Full            ),
+       PHY_SETTING( 200000, FULL, 200000baseDR_Full            ),
+       PHY_SETTING( 200000, FULL, 200000baseDR_2_Full          ),
+       PHY_SETTING( 200000, FULL, 200000baseSR_Full            ),
+       PHY_SETTING( 200000, FULL, 200000baseVR_Full            ),
        /* 100G */
        PHY_SETTING( 100000, FULL, 100000baseCR4_Full           ),
        PHY_SETTING( 100000, FULL, 100000baseKR4_Full           ),
index d1089b88efc7d92f9c2a0003be27bc876793ade5..e0bd726f84c176455533ae18deaa65a868616466 100644 (file)
@@ -2057,6 +2057,24 @@ enum ethtool_link_mode_bit_indices {
        ETHTOOL_LINK_MODE_10baseT1S_Half_BIT             = 100,
        ETHTOOL_LINK_MODE_10baseT1S_P2MP_Half_BIT        = 101,
        ETHTOOL_LINK_MODE_10baseT1BRR_Full_BIT           = 102,
+       ETHTOOL_LINK_MODE_200000baseCR_Full_BIT          = 103,
+       ETHTOOL_LINK_MODE_200000baseKR_Full_BIT          = 104,
+       ETHTOOL_LINK_MODE_200000baseDR_Full_BIT          = 105,
+       ETHTOOL_LINK_MODE_200000baseDR_2_Full_BIT        = 106,
+       ETHTOOL_LINK_MODE_200000baseSR_Full_BIT          = 107,
+       ETHTOOL_LINK_MODE_200000baseVR_Full_BIT          = 108,
+       ETHTOOL_LINK_MODE_400000baseCR2_Full_BIT         = 109,
+       ETHTOOL_LINK_MODE_400000baseKR2_Full_BIT         = 110,
+       ETHTOOL_LINK_MODE_400000baseDR2_Full_BIT         = 111,
+       ETHTOOL_LINK_MODE_400000baseDR2_2_Full_BIT       = 112,
+       ETHTOOL_LINK_MODE_400000baseSR2_Full_BIT         = 113,
+       ETHTOOL_LINK_MODE_400000baseVR2_Full_BIT         = 114,
+       ETHTOOL_LINK_MODE_800000baseCR4_Full_BIT         = 115,
+       ETHTOOL_LINK_MODE_800000baseKR4_Full_BIT         = 116,
+       ETHTOOL_LINK_MODE_800000baseDR4_Full_BIT         = 117,
+       ETHTOOL_LINK_MODE_800000baseDR4_2_Full_BIT       = 118,
+       ETHTOOL_LINK_MODE_800000baseSR4_Full_BIT         = 119,
+       ETHTOOL_LINK_MODE_800000baseVR4_Full_BIT         = 120,
 
        /* must be last entry */
        __ETHTOOL_LINK_MODE_MASK_NBITS
index 2bd77c94f9f1addaf5559e652f09cca715ca308e..5489d0c9d13f9c45d215cc38f0039b6b0ecd58ef 100644 (file)
@@ -213,6 +213,24 @@ const char link_mode_names[][ETH_GSTRING_LEN] = {
        __DEFINE_LINK_MODE_NAME(10, T1S, Half),
        __DEFINE_LINK_MODE_NAME(10, T1S_P2MP, Half),
        __DEFINE_LINK_MODE_NAME(10, T1BRR, Full),
+       __DEFINE_LINK_MODE_NAME(200000, CR, Full),
+       __DEFINE_LINK_MODE_NAME(200000, KR, Full),
+       __DEFINE_LINK_MODE_NAME(200000, DR, Full),
+       __DEFINE_LINK_MODE_NAME(200000, DR_2, Full),
+       __DEFINE_LINK_MODE_NAME(200000, SR, Full),
+       __DEFINE_LINK_MODE_NAME(200000, VR, Full),
+       __DEFINE_LINK_MODE_NAME(400000, CR2, Full),
+       __DEFINE_LINK_MODE_NAME(400000, KR2, Full),
+       __DEFINE_LINK_MODE_NAME(400000, DR2, Full),
+       __DEFINE_LINK_MODE_NAME(400000, DR2_2, Full),
+       __DEFINE_LINK_MODE_NAME(400000, SR2, Full),
+       __DEFINE_LINK_MODE_NAME(400000, VR2, Full),
+       __DEFINE_LINK_MODE_NAME(800000, CR4, Full),
+       __DEFINE_LINK_MODE_NAME(800000, KR4, Full),
+       __DEFINE_LINK_MODE_NAME(800000, DR4, Full),
+       __DEFINE_LINK_MODE_NAME(800000, DR4_2, Full),
+       __DEFINE_LINK_MODE_NAME(800000, SR4, Full),
+       __DEFINE_LINK_MODE_NAME(800000, VR4, Full),
 };
 static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS);
 
@@ -221,8 +239,11 @@ static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS);
 #define __LINK_MODE_LANES_CR4          4
 #define __LINK_MODE_LANES_CR8          8
 #define __LINK_MODE_LANES_DR           1
+#define __LINK_MODE_LANES_DR_2         1
 #define __LINK_MODE_LANES_DR2          2
+#define __LINK_MODE_LANES_DR2_2                2
 #define __LINK_MODE_LANES_DR4          4
+#define __LINK_MODE_LANES_DR4_2                4
 #define __LINK_MODE_LANES_DR8          8
 #define __LINK_MODE_LANES_KR           1
 #define __LINK_MODE_LANES_KR2          2
@@ -251,6 +272,9 @@ static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS);
 #define __LINK_MODE_LANES_T1L          1
 #define __LINK_MODE_LANES_T1S          1
 #define __LINK_MODE_LANES_T1S_P2MP     1
+#define __LINK_MODE_LANES_VR           1
+#define __LINK_MODE_LANES_VR2          2
+#define __LINK_MODE_LANES_VR4          4
 #define __LINK_MODE_LANES_VR8          8
 #define __LINK_MODE_LANES_DR8_2                8
 #define __LINK_MODE_LANES_T1BRR                1
@@ -378,6 +402,24 @@ const struct link_mode_info link_mode_params[] = {
        __DEFINE_LINK_MODE_PARAMS(10, T1S, Half),
        __DEFINE_LINK_MODE_PARAMS(10, T1S_P2MP, Half),
        __DEFINE_LINK_MODE_PARAMS(10, T1BRR, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, CR, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, KR, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, DR, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, DR_2, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, SR, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, VR, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, CR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, KR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, DR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, DR2_2, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, SR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, VR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(800000, CR4, Full),
+       __DEFINE_LINK_MODE_PARAMS(800000, KR4, Full),
+       __DEFINE_LINK_MODE_PARAMS(800000, DR4, Full),
+       __DEFINE_LINK_MODE_PARAMS(800000, DR4_2, Full),
+       __DEFINE_LINK_MODE_PARAMS(800000, SR4, Full),
+       __DEFINE_LINK_MODE_PARAMS(800000, VR4, Full),
 };
 static_assert(ARRAY_SIZE(link_mode_params) == __ETHTOOL_LINK_MODE_MASK_NBITS);