]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: ethtool: Add support for 1600Gbps speed
authorYael Chemla <ychemla@nvidia.com>
Wed, 19 Nov 2025 20:48:15 +0000 (22:48 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 21 Nov 2025 02:21:29 +0000 (18:21 -0800)
Add support for 1600Gbps link modes based on 200Gbps per lane [1].
This includes the adopted IEEE 802.3dj copper and optical PMDs that use
200G/lane signaling [2].

Add the following PMD types:
- KR8 (backplane)
- CR8 (copper cable)
- DR8 (SMF 500m)
- DR8-2 (SMF 2km)

These modes are defined in the 802.3dj specifications.
References:
[1] https://www.ieee802.org/3/dj/public/23_03/opsasnick_3dj_01a_2303.pdf
[2] https://www.ieee802.org/3/dj/projdoc/objectives_P802d3dj_240314.pdf

Signed-off-by: Yael Chemla <ychemla@nvidia.com>
Reviewed-by: Shahar Shitrit <shshitrit@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/1763585297-1243980-2-git-send-email-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/phy-caps.h
drivers/net/phy/phy-core.c
drivers/net/phy/phy_caps.c
include/uapi/linux/ethtool.h
net/ethtool/common.c

index b7f0c6a3037a9b1256c9481ae5d8566520526230..4951a39f382855cc696b3d709ed83dd1200958c0 100644 (file)
@@ -29,6 +29,7 @@ enum {
        LINK_CAPA_200000FD,
        LINK_CAPA_400000FD,
        LINK_CAPA_800000FD,
+       LINK_CAPA_1600000FD,
 
        __LINK_CAPA_MAX,
 };
index 0c63e6ba2cb0cdb76bb0662d62d85d1326df62cf..277c034bc32f0839564b1777dd94c61f3e1e0c2b 100644 (file)
@@ -17,7 +17,7 @@
  */
 const char *phy_speed_to_str(int speed)
 {
-       BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 121,
+       BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 125,
                "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");
@@ -55,6 +55,8 @@ const char *phy_speed_to_str(int speed)
                return "400Gbps";
        case SPEED_800000:
                return "800Gbps";
+       case SPEED_1600000:
+               return "1600Gbps";
        case SPEED_UNKNOWN:
                return "Unknown";
        default:
index 23c808b59b6fd3901e8654386f8f7a8bd7ff0b2e..3a05982b39bfeea1cb531daba068502cabfad274 100644 (file)
@@ -25,6 +25,7 @@ static struct link_capabilities link_caps[__LINK_CAPA_MAX] __ro_after_init = {
        { SPEED_200000, DUPLEX_FULL, {0} }, /* LINK_CAPA_200000FD */
        { SPEED_400000, DUPLEX_FULL, {0} }, /* LINK_CAPA_400000FD */
        { SPEED_800000, DUPLEX_FULL, {0} }, /* LINK_CAPA_800000FD */
+       { SPEED_1600000, DUPLEX_FULL, {0} }, /* LINK_CAPA_1600000FD */
 };
 
 static int speed_duplex_to_capa(int speed, unsigned int duplex)
@@ -52,6 +53,7 @@ static int speed_duplex_to_capa(int speed, unsigned int duplex)
        case SPEED_200000: return LINK_CAPA_200000FD;
        case SPEED_400000: return LINK_CAPA_400000FD;
        case SPEED_800000: return LINK_CAPA_800000FD;
+       case SPEED_1600000: return LINK_CAPA_1600000FD;
        }
 
        return -EINVAL;
index 8bd5ea5469d98332c26039358284b80b06dccd14..eb7ff2602fbb0ca700e0738219238440fdb2ebf2 100644 (file)
@@ -2077,6 +2077,10 @@ enum ethtool_link_mode_bit_indices {
        ETHTOOL_LINK_MODE_800000baseDR4_2_Full_BIT       = 118,
        ETHTOOL_LINK_MODE_800000baseSR4_Full_BIT         = 119,
        ETHTOOL_LINK_MODE_800000baseVR4_Full_BIT         = 120,
+       ETHTOOL_LINK_MODE_1600000baseCR8_Full_BIT        = 121,
+       ETHTOOL_LINK_MODE_1600000baseKR8_Full_BIT        = 122,
+       ETHTOOL_LINK_MODE_1600000baseDR8_Full_BIT        = 123,
+       ETHTOOL_LINK_MODE_1600000baseDR8_2_Full_BIT      = 124,
 
        /* must be last entry */
        __ETHTOOL_LINK_MODE_MASK_NBITS
@@ -2190,6 +2194,7 @@ enum ethtool_link_mode_bit_indices {
 #define SPEED_200000           200000
 #define SPEED_400000           400000
 #define SPEED_800000           800000
+#define SPEED_1600000          1600000
 
 #define SPEED_UNKNOWN          -1
 
index 55223ebc2a7e62b1c8f1cd9b10af5f64b7e3e14e..369c05cf8163c1d47dea2c64b8ec9f5934d12a29 100644 (file)
@@ -233,6 +233,10 @@ const char link_mode_names[][ETH_GSTRING_LEN] = {
        __DEFINE_LINK_MODE_NAME(800000, DR4_2, Full),
        __DEFINE_LINK_MODE_NAME(800000, SR4, Full),
        __DEFINE_LINK_MODE_NAME(800000, VR4, Full),
+       __DEFINE_LINK_MODE_NAME(1600000, CR8, Full),
+       __DEFINE_LINK_MODE_NAME(1600000, KR8, Full),
+       __DEFINE_LINK_MODE_NAME(1600000, DR8, Full),
+       __DEFINE_LINK_MODE_NAME(1600000, DR8_2, Full),
 };
 static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS);
 
@@ -422,6 +426,10 @@ const struct link_mode_info link_mode_params[] = {
        __DEFINE_LINK_MODE_PARAMS(800000, DR4_2, Full),
        __DEFINE_LINK_MODE_PARAMS(800000, SR4, Full),
        __DEFINE_LINK_MODE_PARAMS(800000, VR4, Full),
+       __DEFINE_LINK_MODE_PARAMS(1600000, CR8, Full),
+       __DEFINE_LINK_MODE_PARAMS(1600000, KR8, Full),
+       __DEFINE_LINK_MODE_PARAMS(1600000, DR8, Full),
+       __DEFINE_LINK_MODE_PARAMS(1600000, DR8_2, Full),
 };
 static_assert(ARRAY_SIZE(link_mode_params) == __ETHTOOL_LINK_MODE_MASK_NBITS);
 EXPORT_SYMBOL_GPL(link_mode_params);