aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorPiotr Azarewicz <piotr.azarewicz@intel.com>2018-07-31 06:41:47 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2018-08-07 15:20:45 -0400
commitf05798b4ff82d919e94e5060d1e9993a3e025361 (patch)
tree462cdf0a91930534b229c97079335b70eaf168ca /drivers/net
parentb2b57b29588c36920fe1364f3f24bebfbe8bf321 (diff)
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: Piotr Azarewicz <piotr.azarewicz@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h2
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_common.c35
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_prototype.h3
-rw-r--r--drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h2
4 files changed, 42 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h
index 7d888e05f96f..80e3eec6134e 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h
@@ -2247,6 +2247,8 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_phy_register_access);
2247struct i40e_aqc_nvm_update { 2247struct i40e_aqc_nvm_update {
2248 u8 command_flags; 2248 u8 command_flags;
2249#define I40E_AQ_NVM_LAST_CMD 0x01 2249#define I40E_AQ_NVM_LAST_CMD 0x01
2250#define I40E_AQ_NVM_REARRANGE_TO_FLAT 0x20
2251#define I40E_AQ_NVM_REARRANGE_TO_STRUCT 0x40
2250#define I40E_AQ_NVM_FLASH_ONLY 0x80 2252#define I40E_AQ_NVM_FLASH_ONLY 0x80
2251#define I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT 1 2253#define I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT 1
2252#define I40E_AQ_NVM_PRESERVATION_FLAGS_MASK 0x03 2254#define I40E_AQ_NVM_PRESERVATION_FLAGS_MASK 0x03
diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
index eb2d1530d331..85f75b5978fc 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_common.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
@@ -3541,6 +3541,41 @@ i40e_aq_update_nvm_exit:
3541} 3541}
3542 3542
3543/** 3543/**
3544 * i40e_aq_rearrange_nvm
3545 * @hw: pointer to the hw struct
3546 * @rearrange_nvm: defines direction of rearrangement
3547 * @cmd_details: pointer to command details structure or NULL
3548 *
3549 * Rearrange NVM structure, available only for transition FW
3550 **/
3551i40e_status i40e_aq_rearrange_nvm(struct i40e_hw *hw,
3552 u8 rearrange_nvm,
3553 struct i40e_asq_cmd_details *cmd_details)
3554{
3555 struct i40e_aqc_nvm_update *cmd;
3556 i40e_status status;
3557 struct i40e_aq_desc desc;
3558
3559 cmd = (struct i40e_aqc_nvm_update *)&desc.params.raw;
3560
3561 i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_nvm_update);
3562
3563 rearrange_nvm &= (I40E_AQ_NVM_REARRANGE_TO_FLAT |
3564 I40E_AQ_NVM_REARRANGE_TO_STRUCT);
3565
3566 if (!rearrange_nvm) {
3567 status = I40E_ERR_PARAM;
3568 goto i40e_aq_rearrange_nvm_exit;
3569 }
3570
3571 cmd->command_flags |= rearrange_nvm;
3572 status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
3573
3574i40e_aq_rearrange_nvm_exit:
3575 return status;
3576}
3577
3578/**
3544 * i40e_aq_get_lldp_mib 3579 * i40e_aq_get_lldp_mib
3545 * @hw: pointer to the hw struct 3580 * @hw: pointer to the hw struct
3546 * @bridge_type: type of bridge requested 3581 * @bridge_type: type of bridge requested
diff --git a/drivers/net/ethernet/intel/i40e/i40e_prototype.h b/drivers/net/ethernet/intel/i40e/i40e_prototype.h
index 3170655cdeb9..e08d754824b1 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_prototype.h
+++ b/drivers/net/ethernet/intel/i40e/i40e_prototype.h
@@ -193,6 +193,9 @@ i40e_status i40e_aq_update_nvm(struct i40e_hw *hw, u8 module_pointer,
193 u32 offset, u16 length, void *data, 193 u32 offset, u16 length, void *data,
194 bool last_command, u8 preservation_flags, 194 bool last_command, u8 preservation_flags,
195 struct i40e_asq_cmd_details *cmd_details); 195 struct i40e_asq_cmd_details *cmd_details);
196i40e_status i40e_aq_rearrange_nvm(struct i40e_hw *hw,
197 u8 rearrange_nvm,
198 struct i40e_asq_cmd_details *cmd_details);
196i40e_status i40e_aq_get_lldp_mib(struct i40e_hw *hw, u8 bridge_type, 199i40e_status i40e_aq_get_lldp_mib(struct i40e_hw *hw, u8 bridge_type,
197 u8 mib_type, void *buff, u16 buff_size, 200 u8 mib_type, void *buff, u16 buff_size,
198 u16 *local_len, u16 *remote_len, 201 u16 *local_len, u16 *remote_len,
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h b/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h
index aa81e87cd471..5fd8529465d4 100644
--- a/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h
+++ b/drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h
@@ -2175,6 +2175,8 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_phy_register_access);
2175struct i40e_aqc_nvm_update { 2175struct i40e_aqc_nvm_update {
2176 u8 command_flags; 2176 u8 command_flags;
2177#define I40E_AQ_NVM_LAST_CMD 0x01 2177#define I40E_AQ_NVM_LAST_CMD 0x01
2178#define I40E_AQ_NVM_REARRANGE_TO_FLAT 0x20
2179#define I40E_AQ_NVM_REARRANGE_TO_STRUCT 0x40
2178#define I40E_AQ_NVM_FLASH_ONLY 0x80 2180#define I40E_AQ_NVM_FLASH_ONLY 0x80
2179#define I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT 1 2181#define I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT 1
2180#define I40E_AQ_NVM_PRESERVATION_FLAGS_MASK 0x03 2182#define I40E_AQ_NVM_PRESERVATION_FLAGS_MASK 0x03