Skip to content

Commit 065e0d4

Browse files
meir-lichtingerdavem330
authored andcommitted
ethtool: Add support for 100Gbps per lane link modes
Define 100G, 200G and 400G link modes using 100Gbps per lane LR, ER and FR are defined as a single link mode because they are using same technology and by design are fully interoperable. EEPROM content indicates if the module is LR, ER, or FR, and the user space ethtool decoder is planned to support decoding these modes in the EEPROM. Signed-off-by: Meir Lichtinger <[email protected]> CC: Andrew Lunn <[email protected]> Reviewed-by: Aya Levin <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 66846b7 commit 065e0d4

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

drivers/net/phy/phy-core.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
const char *phy_speed_to_str(int speed)
1010
{
11-
BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 75,
11+
BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 90,
1212
"Enum ethtool_link_mode_bit_indices and phylib are out of sync. "
1313
"If a speed or mode has been added please update phy_speed_to_str "
1414
"and the PHY settings array.\n");
@@ -78,12 +78,22 @@ static const struct phy_setting settings[] = {
7878
PHY_SETTING( 400000, FULL, 400000baseLR8_ER8_FR8_Full ),
7979
PHY_SETTING( 400000, FULL, 400000baseDR8_Full ),
8080
PHY_SETTING( 400000, FULL, 400000baseSR8_Full ),
81+
PHY_SETTING( 400000, FULL, 400000baseCR4_Full ),
82+
PHY_SETTING( 400000, FULL, 400000baseKR4_Full ),
83+
PHY_SETTING( 400000, FULL, 400000baseLR4_ER4_FR4_Full ),
84+
PHY_SETTING( 400000, FULL, 400000baseDR4_Full ),
85+
PHY_SETTING( 400000, FULL, 400000baseSR4_Full ),
8186
/* 200G */
8287
PHY_SETTING( 200000, FULL, 200000baseCR4_Full ),
8388
PHY_SETTING( 200000, FULL, 200000baseKR4_Full ),
8489
PHY_SETTING( 200000, FULL, 200000baseLR4_ER4_FR4_Full ),
8590
PHY_SETTING( 200000, FULL, 200000baseDR4_Full ),
8691
PHY_SETTING( 200000, FULL, 200000baseSR4_Full ),
92+
PHY_SETTING( 200000, FULL, 200000baseCR2_Full ),
93+
PHY_SETTING( 200000, FULL, 200000baseKR2_Full ),
94+
PHY_SETTING( 200000, FULL, 200000baseLR2_ER2_FR2_Full ),
95+
PHY_SETTING( 200000, FULL, 200000baseDR2_Full ),
96+
PHY_SETTING( 200000, FULL, 200000baseSR2_Full ),
8797
/* 100G */
8898
PHY_SETTING( 100000, FULL, 100000baseCR4_Full ),
8999
PHY_SETTING( 100000, FULL, 100000baseKR4_Full ),
@@ -94,6 +104,11 @@ static const struct phy_setting settings[] = {
94104
PHY_SETTING( 100000, FULL, 100000baseLR2_ER2_FR2_Full ),
95105
PHY_SETTING( 100000, FULL, 100000baseDR2_Full ),
96106
PHY_SETTING( 100000, FULL, 100000baseSR2_Full ),
107+
PHY_SETTING( 100000, FULL, 100000baseCR_Full ),
108+
PHY_SETTING( 100000, FULL, 100000baseKR_Full ),
109+
PHY_SETTING( 100000, FULL, 100000baseLR_ER_FR_Full ),
110+
PHY_SETTING( 100000, FULL, 100000baseDR_Full ),
111+
PHY_SETTING( 100000, FULL, 100000baseSR_Full ),
97112
/* 56G */
98113
PHY_SETTING( 56000, FULL, 56000baseCR4_Full ),
99114
PHY_SETTING( 56000, FULL, 56000baseKR4_Full ),

include/uapi/linux/ethtool.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1600,6 +1600,21 @@ enum ethtool_link_mode_bit_indices {
16001600
ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,
16011601
ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,
16021602
ETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,
1603+
ETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,
1604+
ETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,
1605+
ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,
1606+
ETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,
1607+
ETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,
1608+
ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,
1609+
ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,
1610+
ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
1611+
ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,
1612+
ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,
1613+
ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,
1614+
ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,
1615+
ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
1616+
ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,
1617+
ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,
16031618
/* must be last entry */
16041619
__ETHTOOL_LINK_MODE_MASK_NBITS
16051620
};

net/ethtool/common.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,21 @@ const char link_mode_names[][ETH_GSTRING_LEN] = {
176176
__DEFINE_LINK_MODE_NAME(400000, DR8, Full),
177177
__DEFINE_LINK_MODE_NAME(400000, CR8, Full),
178178
__DEFINE_SPECIAL_MODE_NAME(FEC_LLRS, "LLRS"),
179+
__DEFINE_LINK_MODE_NAME(100000, KR, Full),
180+
__DEFINE_LINK_MODE_NAME(100000, SR, Full),
181+
__DEFINE_LINK_MODE_NAME(100000, LR_ER_FR, Full),
182+
__DEFINE_LINK_MODE_NAME(100000, DR, Full),
183+
__DEFINE_LINK_MODE_NAME(100000, CR, Full),
184+
__DEFINE_LINK_MODE_NAME(200000, KR2, Full),
185+
__DEFINE_LINK_MODE_NAME(200000, SR2, Full),
186+
__DEFINE_LINK_MODE_NAME(200000, LR2_ER2_FR2, Full),
187+
__DEFINE_LINK_MODE_NAME(200000, DR2, Full),
188+
__DEFINE_LINK_MODE_NAME(200000, CR2, Full),
189+
__DEFINE_LINK_MODE_NAME(400000, KR4, Full),
190+
__DEFINE_LINK_MODE_NAME(400000, SR4, Full),
191+
__DEFINE_LINK_MODE_NAME(400000, LR4_ER4_FR4, Full),
192+
__DEFINE_LINK_MODE_NAME(400000, DR4, Full),
193+
__DEFINE_LINK_MODE_NAME(400000, CR4, Full),
179194
};
180195
static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS);
181196

net/ethtool/linkmodes.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,21 @@ static const struct link_mode_info link_mode_params[] = {
257257
__DEFINE_LINK_MODE_PARAMS(400000, DR8, Full),
258258
__DEFINE_LINK_MODE_PARAMS(400000, CR8, Full),
259259
__DEFINE_SPECIAL_MODE_PARAMS(FEC_LLRS),
260+
__DEFINE_LINK_MODE_PARAMS(100000, KR, Full),
261+
__DEFINE_LINK_MODE_PARAMS(100000, SR, Full),
262+
__DEFINE_LINK_MODE_PARAMS(100000, LR_ER_FR, Full),
263+
__DEFINE_LINK_MODE_PARAMS(100000, DR, Full),
264+
__DEFINE_LINK_MODE_PARAMS(100000, CR, Full),
265+
__DEFINE_LINK_MODE_PARAMS(200000, KR2, Full),
266+
__DEFINE_LINK_MODE_PARAMS(200000, SR2, Full),
267+
__DEFINE_LINK_MODE_PARAMS(200000, LR2_ER2_FR2, Full),
268+
__DEFINE_LINK_MODE_PARAMS(200000, DR2, Full),
269+
__DEFINE_LINK_MODE_PARAMS(200000, CR2, Full),
270+
__DEFINE_LINK_MODE_PARAMS(400000, KR4, Full),
271+
__DEFINE_LINK_MODE_PARAMS(400000, SR4, Full),
272+
__DEFINE_LINK_MODE_PARAMS(400000, LR4_ER4_FR4, Full),
273+
__DEFINE_LINK_MODE_PARAMS(400000, DR4, Full),
274+
__DEFINE_LINK_MODE_PARAMS(400000, CR4, Full),
260275
};
261276

262277
static const struct nla_policy

0 commit comments

Comments
 (0)