|
@@ -696,7 +696,7 @@ i40e_status i40e_nvmupd_command(struct i40e_hw *hw,
|
|
|
i40e_debug(hw, I40E_DEBUG_NVM, "%s state %d nvm_release_on_hold %d cmd 0x%08x config 0x%08x offset 0x%08x data_size 0x%08x\n",
|
|
|
i40e_nvm_update_state_str[upd_cmd],
|
|
|
hw->nvmupd_state,
|
|
|
- hw->aq.nvm_release_on_done,
|
|
|
+ hw->nvm_release_on_done,
|
|
|
cmd->command, cmd->config, cmd->offset, cmd->data_size);
|
|
|
|
|
|
if (upd_cmd == I40E_NVMUPD_INVALID) {
|
|
@@ -799,7 +799,7 @@ static i40e_status i40e_nvmupd_state_init(struct i40e_hw *hw,
|
|
|
if (status) {
|
|
|
i40e_release_nvm(hw);
|
|
|
} else {
|
|
|
- hw->aq.nvm_release_on_done = true;
|
|
|
+ hw->nvm_release_on_done = true;
|
|
|
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT;
|
|
|
}
|
|
|
}
|
|
@@ -815,7 +815,7 @@ static i40e_status i40e_nvmupd_state_init(struct i40e_hw *hw,
|
|
|
if (status) {
|
|
|
i40e_release_nvm(hw);
|
|
|
} else {
|
|
|
- hw->aq.nvm_release_on_done = true;
|
|
|
+ hw->nvm_release_on_done = true;
|
|
|
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT;
|
|
|
}
|
|
|
}
|
|
@@ -849,7 +849,7 @@ static i40e_status i40e_nvmupd_state_init(struct i40e_hw *hw,
|
|
|
-EIO;
|
|
|
i40e_release_nvm(hw);
|
|
|
} else {
|
|
|
- hw->aq.nvm_release_on_done = true;
|
|
|
+ hw->nvm_release_on_done = true;
|
|
|
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT;
|
|
|
}
|
|
|
}
|
|
@@ -953,7 +953,7 @@ retry:
|
|
|
-EIO;
|
|
|
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT;
|
|
|
} else {
|
|
|
- hw->aq.nvm_release_on_done = true;
|
|
|
+ hw->nvm_release_on_done = true;
|
|
|
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT;
|
|
|
}
|
|
|
break;
|
|
@@ -980,7 +980,7 @@ retry:
|
|
|
-EIO;
|
|
|
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT;
|
|
|
} else {
|
|
|
- hw->aq.nvm_release_on_done = true;
|
|
|
+ hw->nvm_release_on_done = true;
|
|
|
hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT;
|
|
|
}
|
|
|
break;
|
|
@@ -1029,6 +1029,37 @@ retry:
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * i40e_nvmupd_check_wait_event - handle NVM update operation events
|
|
|
+ * @hw: pointer to the hardware structure
|
|
|
+ * @opcode: the event that just happened
|
|
|
+ **/
|
|
|
+void i40e_nvmupd_check_wait_event(struct i40e_hw *hw, u16 opcode)
|
|
|
+{
|
|
|
+ if (opcode == i40e_aqc_opc_nvm_erase ||
|
|
|
+ opcode == i40e_aqc_opc_nvm_update) {
|
|
|
+ i40e_debug(hw, I40E_DEBUG_NVM,
|
|
|
+ "NVMUPD: clearing wait on opcode 0x%04x\n", opcode);
|
|
|
+ if (hw->nvm_release_on_done) {
|
|
|
+ i40e_release_nvm(hw);
|
|
|
+ hw->nvm_release_on_done = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (hw->nvmupd_state) {
|
|
|
+ case I40E_NVMUPD_STATE_INIT_WAIT:
|
|
|
+ hw->nvmupd_state = I40E_NVMUPD_STATE_INIT;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case I40E_NVMUPD_STATE_WRITE_WAIT:
|
|
|
+ hw->nvmupd_state = I40E_NVMUPD_STATE_WRITING;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* i40e_nvmupd_validate_command - Validate given command
|
|
|
* @hw: pointer to hardware structure
|