From: Meir Lichtinger <me...@mellanox.com>

Define 100G, 200G and 400G link modes using 100Gbps per lane

Signed-off-by: Meir Lichtinger <me...@mellanox.com>
CC: Andrew Lunn <and...@lunn.ch>
Reviewed-by: Aya Levin <a...@mellanox.com>
Signed-off-by: Saeed Mahameed <sae...@mellanox.com>
---
 drivers/net/phy/phy-core.c   | 17 ++++++++++++++++-
 include/uapi/linux/ethtool.h | 15 +++++++++++++++
 net/ethtool/common.c         | 15 +++++++++++++++
 net/ethtool/linkmodes.c      | 16 ++++++++++++++++
 4 files changed, 62 insertions(+), 1 deletion(-)

diff --git a/drivers/net/phy/phy-core.c b/drivers/net/phy/phy-core.c
index 66b8c61ca74c..a71fc8b18973 100644
--- a/drivers/net/phy/phy-core.c
+++ b/drivers/net/phy/phy-core.c
@@ -8,7 +8,7 @@
 
 const char *phy_speed_to_str(int speed)
 {
-       BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 75,
+       BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 90,
                "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");
@@ -78,12 +78,22 @@ static const struct phy_setting settings[] = {
        PHY_SETTING( 400000, FULL, 400000baseLR8_ER8_FR8_Full   ),
        PHY_SETTING( 400000, FULL, 400000baseDR8_Full           ),
        PHY_SETTING( 400000, FULL, 400000baseSR8_Full           ),
+       PHY_SETTING( 400000, FULL, 400000baseCR4_Full           ),
+       PHY_SETTING( 400000, FULL, 400000baseKR4_Full           ),
+       PHY_SETTING( 400000, FULL, 400000baseLR4_ER4_FR4_Full   ),
+       PHY_SETTING( 400000, FULL, 400000baseDR4_Full           ),
+       PHY_SETTING( 400000, FULL, 400000baseSR4_Full           ),
        /* 200G */
        PHY_SETTING( 200000, FULL, 200000baseCR4_Full           ),
        PHY_SETTING( 200000, FULL, 200000baseKR4_Full           ),
        PHY_SETTING( 200000, FULL, 200000baseLR4_ER4_FR4_Full   ),
        PHY_SETTING( 200000, FULL, 200000baseDR4_Full           ),
        PHY_SETTING( 200000, FULL, 200000baseSR4_Full           ),
+       PHY_SETTING( 200000, FULL, 200000baseCR2_Full           ),
+       PHY_SETTING( 200000, FULL, 200000baseKR2_Full           ),
+       PHY_SETTING( 200000, FULL, 200000baseLR2_ER2_FR2_Full   ),
+       PHY_SETTING( 200000, FULL, 200000baseDR2_Full           ),
+       PHY_SETTING( 200000, FULL, 200000baseSR2_Full           ),
        /* 100G */
        PHY_SETTING( 100000, FULL, 100000baseCR4_Full           ),
        PHY_SETTING( 100000, FULL, 100000baseKR4_Full           ),
@@ -94,6 +104,11 @@ static const struct phy_setting settings[] = {
        PHY_SETTING( 100000, FULL, 100000baseLR2_ER2_FR2_Full   ),
        PHY_SETTING( 100000, FULL, 100000baseDR2_Full           ),
        PHY_SETTING( 100000, FULL, 100000baseSR2_Full           ),
+       PHY_SETTING( 100000, FULL, 100000baseCR_Full            ),
+       PHY_SETTING( 100000, FULL, 100000baseKR_Full            ),
+       PHY_SETTING( 100000, FULL, 100000baseLR_ER_FR_Full      ),
+       PHY_SETTING( 100000, FULL, 100000baseDR_Full            ),
+       PHY_SETTING( 100000, FULL, 100000baseSR_Full            ),
        /* 56G */
        PHY_SETTING(  56000, FULL,  56000baseCR4_Full           ),
        PHY_SETTING(  56000, FULL,  56000baseKR4_Full           ),
diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index 92f737f10117..a3829074a336 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -1530,6 +1530,21 @@ enum ethtool_link_mode_bit_indices {
        ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT         = 72,
        ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT         = 73,
        ETHTOOL_LINK_MODE_FEC_LLRS_BIT                   = 74,
+       ETHTOOL_LINK_MODE_100000baseKR_Full_BIT          = 75,
+       ETHTOOL_LINK_MODE_100000baseSR_Full_BIT          = 76,
+       ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT    = 77,
+       ETHTOOL_LINK_MODE_100000baseCR_Full_BIT          = 78,
+       ETHTOOL_LINK_MODE_100000baseDR_Full_BIT          = 79,
+       ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT         = 80,
+       ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT         = 81,
+       ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,
+       ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT         = 83,
+       ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT         = 84,
+       ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT         = 85,
+       ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT         = 86,
+       ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,
+       ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT         = 88,
+       ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT         = 89,
        /* must be last entry */
        __ETHTOOL_LINK_MODE_MASK_NBITS
 };
diff --git a/net/ethtool/common.c b/net/ethtool/common.c
index 423e640e3876..ffb50ac66aad 100644
--- a/net/ethtool/common.c
+++ b/net/ethtool/common.c
@@ -173,6 +173,21 @@ const char link_mode_names[][ETH_GSTRING_LEN] = {
        __DEFINE_LINK_MODE_NAME(400000, DR8, Full),
        __DEFINE_LINK_MODE_NAME(400000, CR8, Full),
        __DEFINE_SPECIAL_MODE_NAME(FEC_LLRS, "LLRS"),
+       __DEFINE_LINK_MODE_NAME(100000, KR, Full),
+       __DEFINE_LINK_MODE_NAME(100000, SR, Full),
+       __DEFINE_LINK_MODE_NAME(100000, LR_ER_FR, Full),
+       __DEFINE_LINK_MODE_NAME(100000, DR, Full),
+       __DEFINE_LINK_MODE_NAME(100000, CR, Full),
+       __DEFINE_LINK_MODE_NAME(200000, KR2, Full),
+       __DEFINE_LINK_MODE_NAME(200000, SR2, Full),
+       __DEFINE_LINK_MODE_NAME(200000, LR2_ER2_FR2, Full),
+       __DEFINE_LINK_MODE_NAME(200000, DR2, Full),
+       __DEFINE_LINK_MODE_NAME(200000, CR2, Full),
+       __DEFINE_LINK_MODE_NAME(400000, KR4, Full),
+       __DEFINE_LINK_MODE_NAME(400000, SR4, Full),
+       __DEFINE_LINK_MODE_NAME(400000, LR4_ER4_FR4, Full),
+       __DEFINE_LINK_MODE_NAME(400000, DR4, Full),
+       __DEFINE_LINK_MODE_NAME(400000, CR4, Full),
 };
 static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS);
 
diff --git a/net/ethtool/linkmodes.c b/net/ethtool/linkmodes.c
index 452608c6d856..ffa02b7c86d5 100644
--- a/net/ethtool/linkmodes.c
+++ b/net/ethtool/linkmodes.c
@@ -238,6 +238,22 @@ static const struct link_mode_info link_mode_params[] = {
        __DEFINE_LINK_MODE_PARAMS(400000, DR8, Full),
        __DEFINE_LINK_MODE_PARAMS(400000, CR8, Full),
        __DEFINE_SPECIAL_MODE_PARAMS(FEC_LLRS),
+       __DEFINE_LINK_MODE_PARAMS(400000, CR8, Full),
+       __DEFINE_LINK_MODE_PARAMS(100000, KR, Full),
+       __DEFINE_LINK_MODE_PARAMS(100000, SR, Full),
+       __DEFINE_LINK_MODE_PARAMS(100000, LR_ER_FR, Full),
+       __DEFINE_LINK_MODE_PARAMS(100000, DR, Full),
+       __DEFINE_LINK_MODE_PARAMS(100000, CR, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, KR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, SR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, LR2_ER2_FR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, DR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(200000, CR2, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, KR4, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, SR4, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, LR4_ER4_FR4, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, DR4, Full),
+       __DEFINE_LINK_MODE_PARAMS(400000, CR4, Full),
 };
 
 static const struct nla_policy
-- 
2.25.4

Reply via email to