ethtool: add PHY Fast Link Down support
authorHeiner Kallweit <hkallweit1@gmail.com>
Mon, 25 Mar 2019 18:34:58 +0000 (19:34 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 27 Mar 2019 20:51:49 +0000 (13:51 -0700)
This adds support for Fast Link Down as new PHY tunable.
Fast Link Down reduces the time until a link down event is reported
for 1000BaseT. According to the standard it's 750ms what is too long
for several use cases.

v2:
- add comment describing the constants

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Michal Kubecek <mkubecek@suse.cz>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/ethtool.h
net/core/ethtool.c

index 3652b239dad1d7c556ff28a7a9a87129aa9b89d3..50c76f4fa402a79d67b0834969e9d8a26f33317f 100644 (file)
@@ -252,9 +252,17 @@ struct ethtool_tunable {
 #define DOWNSHIFT_DEV_DEFAULT_COUNT    0xff
 #define DOWNSHIFT_DEV_DISABLE          0
 
+/* Time in msecs after which link is reported as down
+ * 0 = lowest time supported by the PHY
+ * 0xff = off, link down detection according to standard
+ */
+#define ETHTOOL_PHY_FAST_LINK_DOWN_ON  0
+#define ETHTOOL_PHY_FAST_LINK_DOWN_OFF 0xff
+
 enum phy_tunable_id {
        ETHTOOL_PHY_ID_UNSPEC,
        ETHTOOL_PHY_DOWNSHIFT,
+       ETHTOOL_PHY_FAST_LINK_DOWN,
        /*
         * Add your fresh new phy tunable attribute above and remember to update
         * phy_tunable_strings[] in net/core/ethtool.c
index b1eb324197321dd390596edd2aec6c343ee14654..387d67eb75ab64ab09c9ad780db1aceaa62dd925 100644 (file)
@@ -136,6 +136,7 @@ static const char
 phy_tunable_strings[__ETHTOOL_PHY_TUNABLE_COUNT][ETH_GSTRING_LEN] = {
        [ETHTOOL_ID_UNSPEC]     = "Unspec",
        [ETHTOOL_PHY_DOWNSHIFT] = "phy-downshift",
+       [ETHTOOL_PHY_FAST_LINK_DOWN] = "phy-fast-link-down",
 };
 
 static int ethtool_get_features(struct net_device *dev, void __user *useraddr)
@@ -2432,6 +2433,7 @@ static int ethtool_phy_tunable_valid(const struct ethtool_tunable *tuna)
 {
        switch (tuna->id) {
        case ETHTOOL_PHY_DOWNSHIFT:
+       case ETHTOOL_PHY_FAST_LINK_DOWN:
                if (tuna->len != sizeof(u8) ||
                    tuna->type_id != ETHTOOL_TUNABLE_U8)
                        return -EINVAL;