Commit 4ff0ee1a authored by Alice Michael's avatar Alice Michael Committed by Jeff Kirsher

i40e: Introduce recovery mode support

This patch introduces "recovery mode" to the i40e driver. It is
part of a new Any2Any idea of upgrading the firmware. In this
approach, it is required for the driver to have support for
"transition firmware", that is used for migrating from structured
to flat firmware image. In this new, very basic mode, i40e driver
must be able to handle particular IOCTL calls from the NVM Update
Tool and run a small set of AQ commands.

These additional AQ commands are part of the interface used by
the NVMUpdate tool.  The NVMUpdate tool contains all of the
necessary logic to reference these new AQ commands.  The end user
experience remains the same, they are using the NVMUpdate tool to
update the NVM contents.
Signed-off-by: default avatarAlice Michael <alice.michael@intel.com>
Signed-off-by: default avatarPiotr Marczak <piotr.marczak@intel.com>
Tested-by: default avatarDon Buchholz <donald.buchholz@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent a121644c
...@@ -149,6 +149,7 @@ enum i40e_state_t { ...@@ -149,6 +149,7 @@ enum i40e_state_t {
__I40E_CLIENT_L2_CHANGE, __I40E_CLIENT_L2_CHANGE,
__I40E_CLIENT_RESET, __I40E_CLIENT_RESET,
__I40E_VIRTCHNL_OP_PENDING, __I40E_VIRTCHNL_OP_PENDING,
__I40E_RECOVERY_MODE,
/* This must be last as it determines the size of the BITMAP */ /* This must be last as it determines the size of the BITMAP */
__I40E_STATE_SIZE__, __I40E_STATE_SIZE__,
}; };
......
...@@ -5141,6 +5141,12 @@ static int i40e_get_module_eeprom(struct net_device *netdev, ...@@ -5141,6 +5141,12 @@ static int i40e_get_module_eeprom(struct net_device *netdev,
return 0; return 0;
} }
static const struct ethtool_ops i40e_ethtool_recovery_mode_ops = {
.set_eeprom = i40e_set_eeprom,
.get_eeprom_len = i40e_get_eeprom_len,
.get_eeprom = i40e_get_eeprom,
};
static const struct ethtool_ops i40e_ethtool_ops = { static const struct ethtool_ops i40e_ethtool_ops = {
.get_drvinfo = i40e_get_drvinfo, .get_drvinfo = i40e_get_drvinfo,
.get_regs_len = i40e_get_regs_len, .get_regs_len = i40e_get_regs_len,
...@@ -5189,5 +5195,11 @@ static const struct ethtool_ops i40e_ethtool_ops = { ...@@ -5189,5 +5195,11 @@ static const struct ethtool_ops i40e_ethtool_ops = {
void i40e_set_ethtool_ops(struct net_device *netdev) void i40e_set_ethtool_ops(struct net_device *netdev)
{ {
netdev->ethtool_ops = &i40e_ethtool_ops; struct i40e_netdev_priv *np = netdev_priv(netdev);
struct i40e_pf *pf = np->vsi->back;
if (!test_bit(__I40E_RECOVERY_MODE, pf->state))
netdev->ethtool_ops = &i40e_ethtool_ops;
else
netdev->ethtool_ops = &i40e_ethtool_recovery_mode_ops;
} }
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment