Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: ethtool: Add support for 1600Gbps speed

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>

authored by

Yael Chemla and committed by
Jakub Kicinski
491c5dc9 8b4e023d

+19 -1
+1
drivers/net/phy/phy-caps.h
··· 29 29 LINK_CAPA_200000FD, 30 30 LINK_CAPA_400000FD, 31 31 LINK_CAPA_800000FD, 32 + LINK_CAPA_1600000FD, 32 33 33 34 __LINK_CAPA_MAX, 34 35 };
+3 -1
drivers/net/phy/phy-core.c
··· 17 17 */ 18 18 const char *phy_speed_to_str(int speed) 19 19 { 20 - BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 121, 20 + BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 125, 21 21 "Enum ethtool_link_mode_bit_indices and phylib are out of sync. " 22 22 "If a speed or mode has been added please update phy_speed_to_str " 23 23 "and the PHY settings array.\n"); ··· 55 55 return "400Gbps"; 56 56 case SPEED_800000: 57 57 return "800Gbps"; 58 + case SPEED_1600000: 59 + return "1600Gbps"; 58 60 case SPEED_UNKNOWN: 59 61 return "Unknown"; 60 62 default:
+2
drivers/net/phy/phy_caps.c
··· 25 25 { SPEED_200000, DUPLEX_FULL, {0} }, /* LINK_CAPA_200000FD */ 26 26 { SPEED_400000, DUPLEX_FULL, {0} }, /* LINK_CAPA_400000FD */ 27 27 { SPEED_800000, DUPLEX_FULL, {0} }, /* LINK_CAPA_800000FD */ 28 + { SPEED_1600000, DUPLEX_FULL, {0} }, /* LINK_CAPA_1600000FD */ 28 29 }; 29 30 30 31 static int speed_duplex_to_capa(int speed, unsigned int duplex) ··· 53 52 case SPEED_200000: return LINK_CAPA_200000FD; 54 53 case SPEED_400000: return LINK_CAPA_400000FD; 55 54 case SPEED_800000: return LINK_CAPA_800000FD; 55 + case SPEED_1600000: return LINK_CAPA_1600000FD; 56 56 } 57 57 58 58 return -EINVAL;
+5
include/uapi/linux/ethtool.h
··· 2077 2077 ETHTOOL_LINK_MODE_800000baseDR4_2_Full_BIT = 118, 2078 2078 ETHTOOL_LINK_MODE_800000baseSR4_Full_BIT = 119, 2079 2079 ETHTOOL_LINK_MODE_800000baseVR4_Full_BIT = 120, 2080 + ETHTOOL_LINK_MODE_1600000baseCR8_Full_BIT = 121, 2081 + ETHTOOL_LINK_MODE_1600000baseKR8_Full_BIT = 122, 2082 + ETHTOOL_LINK_MODE_1600000baseDR8_Full_BIT = 123, 2083 + ETHTOOL_LINK_MODE_1600000baseDR8_2_Full_BIT = 124, 2080 2084 2081 2085 /* must be last entry */ 2082 2086 __ETHTOOL_LINK_MODE_MASK_NBITS ··· 2194 2190 #define SPEED_200000 200000 2195 2191 #define SPEED_400000 400000 2196 2192 #define SPEED_800000 800000 2193 + #define SPEED_1600000 1600000 2197 2194 2198 2195 #define SPEED_UNKNOWN -1 2199 2196
+8
net/ethtool/common.c
··· 233 233 __DEFINE_LINK_MODE_NAME(800000, DR4_2, Full), 234 234 __DEFINE_LINK_MODE_NAME(800000, SR4, Full), 235 235 __DEFINE_LINK_MODE_NAME(800000, VR4, Full), 236 + __DEFINE_LINK_MODE_NAME(1600000, CR8, Full), 237 + __DEFINE_LINK_MODE_NAME(1600000, KR8, Full), 238 + __DEFINE_LINK_MODE_NAME(1600000, DR8, Full), 239 + __DEFINE_LINK_MODE_NAME(1600000, DR8_2, Full), 236 240 }; 237 241 static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS); 238 242 ··· 426 422 __DEFINE_LINK_MODE_PARAMS(800000, DR4_2, Full), 427 423 __DEFINE_LINK_MODE_PARAMS(800000, SR4, Full), 428 424 __DEFINE_LINK_MODE_PARAMS(800000, VR4, Full), 425 + __DEFINE_LINK_MODE_PARAMS(1600000, CR8, Full), 426 + __DEFINE_LINK_MODE_PARAMS(1600000, KR8, Full), 427 + __DEFINE_LINK_MODE_PARAMS(1600000, DR8, Full), 428 + __DEFINE_LINK_MODE_PARAMS(1600000, DR8_2, Full), 429 429 }; 430 430 static_assert(ARRAY_SIZE(link_mode_params) == __ETHTOOL_LINK_MODE_MASK_NBITS); 431 431 EXPORT_SYMBOL_GPL(link_mode_params);