Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f05798b4 authored by Piotr Azarewicz's avatar Piotr Azarewicz Committed by Jeff Kirsher
Browse files

i40e: Add AQ command for rearrange NVM structure



During switching between old NVM structure approach (called structured
NVM) to new one (called flat NVM) or backward flash needs to be
rearranged to required NVM structure. This is a part of transition from
one NVM structure to another. The function is introduced to command
firmware to start rearrangement process.

Signed-off-by: default avatarPiotr Azarewicz <piotr.azarewicz@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent b2b57b29
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2247,6 +2247,8 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_phy_register_access);
struct i40e_aqc_nvm_update {
	u8	command_flags;
#define I40E_AQ_NVM_LAST_CMD			0x01
#define I40E_AQ_NVM_REARRANGE_TO_FLAT		0x20
#define I40E_AQ_NVM_REARRANGE_TO_STRUCT		0x40
#define I40E_AQ_NVM_FLASH_ONLY			0x80
#define I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT	1
#define I40E_AQ_NVM_PRESERVATION_FLAGS_MASK	0x03
+35 −0
Original line number Diff line number Diff line
@@ -3540,6 +3540,41 @@ i40e_status i40e_aq_update_nvm(struct i40e_hw *hw, u8 module_pointer,
	return status;
}

/**
 * i40e_aq_rearrange_nvm
 * @hw: pointer to the hw struct
 * @rearrange_nvm: defines direction of rearrangement
 * @cmd_details: pointer to command details structure or NULL
 *
 * Rearrange NVM structure, available only for transition FW
 **/
i40e_status i40e_aq_rearrange_nvm(struct i40e_hw *hw,
				  u8 rearrange_nvm,
				  struct i40e_asq_cmd_details *cmd_details)
{
	struct i40e_aqc_nvm_update *cmd;
	i40e_status status;
	struct i40e_aq_desc desc;

	cmd = (struct i40e_aqc_nvm_update *)&desc.params.raw;

	i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_nvm_update);

	rearrange_nvm &= (I40E_AQ_NVM_REARRANGE_TO_FLAT |
			 I40E_AQ_NVM_REARRANGE_TO_STRUCT);

	if (!rearrange_nvm) {
		status = I40E_ERR_PARAM;
		goto i40e_aq_rearrange_nvm_exit;
	}

	cmd->command_flags |= rearrange_nvm;
	status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);

i40e_aq_rearrange_nvm_exit:
	return status;
}

/**
 * i40e_aq_get_lldp_mib
 * @hw: pointer to the hw struct
+3 −0
Original line number Diff line number Diff line
@@ -193,6 +193,9 @@ i40e_status i40e_aq_update_nvm(struct i40e_hw *hw, u8 module_pointer,
				u32 offset, u16 length, void *data,
				bool last_command, u8 preservation_flags,
				struct i40e_asq_cmd_details *cmd_details);
i40e_status i40e_aq_rearrange_nvm(struct i40e_hw *hw,
				  u8 rearrange_nvm,
				  struct i40e_asq_cmd_details *cmd_details);
i40e_status i40e_aq_get_lldp_mib(struct i40e_hw *hw, u8 bridge_type,
				u8 mib_type, void *buff, u16 buff_size,
				u16 *local_len, u16 *remote_len,
+2 −0
Original line number Diff line number Diff line
@@ -2175,6 +2175,8 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_phy_register_access);
struct i40e_aqc_nvm_update {
	u8	command_flags;
#define I40E_AQ_NVM_LAST_CMD			0x01
#define I40E_AQ_NVM_REARRANGE_TO_FLAT		0x20
#define I40E_AQ_NVM_REARRANGE_TO_STRUCT		0x40
#define I40E_AQ_NVM_FLASH_ONLY			0x80
#define I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT	1
#define I40E_AQ_NVM_PRESERVATION_FLAGS_MASK	0x03