ethtool: Add support for low latency RS FEC
authorAya Levin <ayal@mellanox.com>
Tue, 11 Feb 2020 22:32:52 +0000 (14:32 -0800)
committerSaeed Mahameed <saeedm@mellanox.com>
Wed, 19 Feb 2020 03:17:31 +0000 (19:17 -0800)
Add support for low latency Reed Solomon FEC as LLRS.

The LL-FEC is defined by the 25G/50G ethernet consortium,
in the document titled "Low Latency Reed Solomon Forward Error Correction"

Signed-off-by: Aya Levin <ayal@mellanox.com>
Reviewed-by: Eran Ben Elisha <eranbe@mellanox.com>
CC: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
drivers/net/phy/phy-core.c
include/uapi/linux/ethtool.h
net/ethtool/common.c
net/ethtool/linkmodes.c

index a4d2d59fceca51f5d02aaea219695a934d48194d..e083e7a76ada2066e2ea2170256165a107523fee 100644 (file)
@@ -8,7 +8,7 @@
 
 const char *phy_speed_to_str(int speed)
 {
-       BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 74,
+       BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS != 75,
                "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");
index 4295ebfa2f91eec2a068044a8d53fb3c256107a1..d586ee5e10a1b2f86ec019bd8f4b9b311620f3a4 100644 (file)
@@ -1330,6 +1330,7 @@ enum ethtool_fec_config_bits {
        ETHTOOL_FEC_OFF_BIT,
        ETHTOOL_FEC_RS_BIT,
        ETHTOOL_FEC_BASER_BIT,
+       ETHTOOL_FEC_LLRS_BIT,
 };
 
 #define ETHTOOL_FEC_NONE               (1 << ETHTOOL_FEC_NONE_BIT)
@@ -1337,6 +1338,7 @@ enum ethtool_fec_config_bits {
 #define ETHTOOL_FEC_OFF                        (1 << ETHTOOL_FEC_OFF_BIT)
 #define ETHTOOL_FEC_RS                 (1 << ETHTOOL_FEC_RS_BIT)
 #define ETHTOOL_FEC_BASER              (1 << ETHTOOL_FEC_BASER_BIT)
+#define ETHTOOL_FEC_LLRS               (1 << ETHTOOL_FEC_LLRS_BIT)
 
 /* CMDs currently supported */
 #define ETHTOOL_GSET           0x00000001 /* DEPRECATED, Get settings.
@@ -1521,7 +1523,7 @@ enum ethtool_link_mode_bit_indices {
        ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,
        ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT         = 72,
        ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT         = 73,
-
+       ETHTOOL_LINK_MODE_FEC_LLRS_BIT                   = 74,
        /* must be last entry */
        __ETHTOOL_LINK_MODE_MASK_NBITS
 };
index 636ec6d5110ed9a8d646fcaa848be012fcb9e8d7..7b6969af5ae7de0bd8181e1ea40f0e011cb06857 100644 (file)
@@ -168,6 +168,7 @@ const char link_mode_names[][ETH_GSTRING_LEN] = {
        __DEFINE_LINK_MODE_NAME(400000, LR8_ER8_FR8, Full),
        __DEFINE_LINK_MODE_NAME(400000, DR8, Full),
        __DEFINE_LINK_MODE_NAME(400000, CR8, Full),
+       __DEFINE_SPECIAL_MODE_NAME(FEC_LLRS, "LLRS"),
 };
 static_assert(ARRAY_SIZE(link_mode_names) == __ETHTOOL_LINK_MODE_MASK_NBITS);
 
index 96f20be64553e289f505a66f396c89cffc72c23a..f049b97072fe4df4659cd46a923db68437f3783f 100644 (file)
@@ -237,6 +237,7 @@ static const struct link_mode_info link_mode_params[] = {
        __DEFINE_LINK_MODE_PARAMS(400000, LR8_ER8_FR8, Full),
        __DEFINE_LINK_MODE_PARAMS(400000, DR8, Full),
        __DEFINE_LINK_MODE_PARAMS(400000, CR8, Full),
+       __DEFINE_SPECIAL_MODE_PARAMS(FEC_LLRS),
 };
 
 static const struct nla_policy