ethtool: Add transceiver module extended state
authorIdo Schimmel <idosch@nvidia.com>
Wed, 6 Oct 2021 10:46:46 +0000 (13:46 +0300)
committerJakub Kicinski <kuba@kernel.org>
Thu, 7 Oct 2021 00:47:50 +0000 (17:47 -0700)
Add an extended state and sub-state to describe link issues related to
transceiver modules.

The 'ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY' extended sub-state
tells user space that port is unable to gain a carrier because the CMIS
Module State Machine did not reach the ModuleReady (Fully Operational)
state. For example, if the module is stuck at ModuleLowPwr or
ModuleFault state. In case of the latter, user space can read the fault
reason from the module's EEPROM and potentially reset it.

Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/networking/ethtool-netlink.rst
include/linux/ethtool.h
include/uapi/linux/ethtool.h

index d6fd4b2e243c9add547367d703bef329981233aa..7b598c7e39129961f6f40bfa427324f70a84ca4c 100644 (file)
@@ -528,6 +528,8 @@ Link extended states:
                                                         power required from cable or module
 
   ``ETHTOOL_LINK_EXT_STATE_OVERHEAT``                   The module is overheated
+
+  ``ETHTOOL_LINK_EXT_STATE_MODULE``                     Transceiver module issue
   ================================================      ============================================
 
 Link extended substates:
@@ -621,6 +623,14 @@ Link extended substates:
   ``ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE``   Cable test failure
   ===================================================   ============================================
 
+  Transceiver module issue substates:
+
+  ===================================================   ============================================
+  ``ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY``   The CMIS Module State Machine did not reach
+                                                        the ModuleReady state. For example, if the
+                                                        module is stuck at ModuleFault state
+  ===================================================   ============================================
+
 DEBUG_GET
 =========
 
index 9adf8d2c3144be20f62fbe14425e106da6119f7e..845a0ffc16ee857a9afbc47351ff2542b88c5c00 100644 (file)
@@ -94,6 +94,7 @@ struct ethtool_link_ext_state_info {
                enum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;
                enum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;
                enum ethtool_link_ext_substate_cable_issue cable_issue;
+               enum ethtool_link_ext_substate_module module;
                u8 __link_ext_substate;
        };
 };
index 6de61d53ca5d00b513ccf33c64b4ea6ca1810fdc..a2223b68545193c4a5000d420a75d63a44df96b3 100644 (file)
@@ -603,6 +603,7 @@ enum ethtool_link_ext_state {
        ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE,
        ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED,
        ETHTOOL_LINK_EXT_STATE_OVERHEAT,
+       ETHTOOL_LINK_EXT_STATE_MODULE,
 };
 
 /* More information in addition to ETHTOOL_LINK_EXT_STATE_AUTONEG. */
@@ -649,6 +650,11 @@ enum ethtool_link_ext_substate_cable_issue {
        ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE,
 };
 
+/* More information in addition to ETHTOOL_LINK_EXT_STATE_MODULE. */
+enum ethtool_link_ext_substate_module {
+       ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY = 1,
+};
+
 #define ETH_GSTRING_LEN                32
 
 /**