diff options
| author | Andrii Staikov <[email protected]> | 2025-04-10 13:00:08 +0000 |
|---|---|---|
| committer | Tony Nguyen <[email protected]> | 2025-04-15 14:36:33 +0000 |
| commit | 4811b0c220f212ff0b35da0d9fc993bce87868c0 (patch) | |
| tree | c811724e5185914f9206c3cd55a55893da4dcbd2 /drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | |
| parent | ixgbe: add E610 implementation of FW recovery mode (diff) | |
| download | kernel-4811b0c220f212ff0b35da0d9fc993bce87868c0.tar.gz kernel-4811b0c220f212ff0b35da0d9fc993bce87868c0.zip | |
ixgbe: add support for FW rollback mode
The driver should detect whether the device entered FW rollback
mode and then notify user with the dedicated message including
FW and NVM versions.
Even if the driver detected rollback mode, this should not result
in an probe error and the normal flow proceeds.
FW tries to rollback to "old" operational FW located in the
inactive NVM bank in cases when newly loaded FW exhibits faulty
behavior. If something goes wrong during boot the FW may switch
into rollback mode in an attempt to avoid recovery mode and stay
operational. After rollback is successful, the banks are swapped,
and the "rollback" bank becomes the active bank for the next reset.
Reviewed-by: Mateusz Polchlopek <[email protected]>
Signed-off-by: Andrii Staikov <[email protected]>
Signed-off-by: Jedrzej Jagielski <[email protected]>
Signed-off-by: Tony Nguyen <[email protected]>
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbe/ixgbe_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 1c69f58466fd..cdfafc477ee0 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -8424,6 +8424,32 @@ static bool ixgbe_check_fw_error(struct ixgbe_adapter *adapter) return true; } + /* return here if FW rollback mode has been already detected */ + if (adapter->flags2 & IXGBE_FLAG2_FW_ROLLBACK) + return false; + + if (hw->mac.ops.fw_rollback_mode && hw->mac.ops.fw_rollback_mode(hw)) { + struct ixgbe_nvm_info *nvm_info = &adapter->hw.flash.nvm; + char ver_buff[64] = ""; + + if (hw->mac.ops.get_fw_ver && hw->mac.ops.get_fw_ver(hw)) + goto no_version; + + if (hw->mac.ops.get_nvm_ver && + hw->mac.ops.get_nvm_ver(hw, nvm_info)) + goto no_version; + + snprintf(ver_buff, sizeof(ver_buff), + "Current version is NVM:%x.%x.%x, FW:%d.%d. ", + nvm_info->major, nvm_info->minor, nvm_info->eetrack, + hw->fw_maj_ver, hw->fw_maj_ver); +no_version: + e_dev_warn("Firmware rollback mode detected. %sDevice may exhibit limited functionality. Refer to the Intel(R) Ethernet Adapters and Devices User Guide for details on firmware rollback mode.", + ver_buff); + + adapter->flags2 |= IXGBE_FLAG2_FW_ROLLBACK; + } + return false; } |
