Lines Matching full:hw

8  * @hw: pointer to the HW structure
16 i40e_status i40e_init_nvm(struct i40e_hw *hw) in i40e_init_nvm() argument
18 struct i40e_nvm_info *nvm = &hw->nvm; in i40e_init_nvm()
26 gens = rd32(hw, I40E_GLNVM_GENS); in i40e_init_nvm()
33 fla = rd32(hw, I40E_GLNVM_FLA); in i40e_init_nvm()
41 i40e_debug(hw, I40E_DEBUG_NVM, "NVM init error: unsupported blank mode.\n"); in i40e_init_nvm()
49 * @hw: pointer to the HW structure
55 i40e_status i40e_acquire_nvm(struct i40e_hw *hw, in i40e_acquire_nvm() argument
62 if (hw->nvm.blank_nvm_mode) in i40e_acquire_nvm()
65 ret_code = i40e_aq_request_resource(hw, I40E_NVM_RESOURCE_ID, access, in i40e_acquire_nvm()
68 gtime = rd32(hw, I40E_GLVFGEN_TIMER); in i40e_acquire_nvm()
71 hw->nvm.hw_semaphore_timeout = I40E_MS_TO_GTIME(time_left) + gtime; in i40e_acquire_nvm()
74 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_acquire_nvm()
76 access, time_left, ret_code, hw->aq.asq_last_status); in i40e_acquire_nvm()
83 gtime = rd32(hw, I40E_GLVFGEN_TIMER); in i40e_acquire_nvm()
84 ret_code = i40e_aq_request_resource(hw, in i40e_acquire_nvm()
89 hw->nvm.hw_semaphore_timeout = in i40e_acquire_nvm()
95 hw->nvm.hw_semaphore_timeout = 0; in i40e_acquire_nvm()
96 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_acquire_nvm()
98 time_left, ret_code, hw->aq.asq_last_status); in i40e_acquire_nvm()
108 * @hw: pointer to the HW structure
112 void i40e_release_nvm(struct i40e_hw *hw) in i40e_release_nvm() argument
117 if (hw->nvm.blank_nvm_mode) in i40e_release_nvm()
120 ret_code = i40e_aq_release_resource(hw, I40E_NVM_RESOURCE_ID, 0, NULL); in i40e_release_nvm()
126 (total_delay < hw->aq.asq_cmd_timeout)) { in i40e_release_nvm()
128 ret_code = i40e_aq_release_resource(hw, in i40e_release_nvm()
137 * @hw: pointer to the HW structure
141 static i40e_status i40e_poll_sr_srctl_done_bit(struct i40e_hw *hw) in i40e_poll_sr_srctl_done_bit() argument
148 srctl = rd32(hw, I40E_GLNVM_SRCTL); in i40e_poll_sr_srctl_done_bit()
156 i40e_debug(hw, I40E_DEBUG_NVM, "Done bit in GLNVM_SRCTL not set"); in i40e_poll_sr_srctl_done_bit()
162 * @hw: pointer to the HW structure
168 static i40e_status i40e_read_nvm_word_srctl(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_word_srctl() argument
174 if (offset >= hw->nvm.sr_size) { in i40e_read_nvm_word_srctl()
175 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_word_srctl()
177 offset, hw->nvm.sr_size); in i40e_read_nvm_word_srctl()
183 ret_code = i40e_poll_sr_srctl_done_bit(hw); in i40e_read_nvm_word_srctl()
188 wr32(hw, I40E_GLNVM_SRCTL, sr_reg); in i40e_read_nvm_word_srctl()
191 ret_code = i40e_poll_sr_srctl_done_bit(hw); in i40e_read_nvm_word_srctl()
193 sr_reg = rd32(hw, I40E_GLNVM_SRDATA); in i40e_read_nvm_word_srctl()
200 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_word_srctl()
210 * @hw: pointer to the HW structure.
219 static i40e_status i40e_read_nvm_aq(struct i40e_hw *hw, in i40e_read_nvm_aq() argument
228 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_read_nvm_aq()
235 if ((offset + words) > hw->nvm.sr_size) in i40e_read_nvm_aq()
236 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_aq()
238 (offset + words), hw->nvm.sr_size); in i40e_read_nvm_aq()
241 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_aq()
247 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_aq()
251 ret_code = i40e_aq_read_nvm(hw, module_pointer, in i40e_read_nvm_aq()
261 * @hw: pointer to the HW structure
267 static i40e_status i40e_read_nvm_word_aq(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_word_aq() argument
272 ret_code = i40e_read_nvm_aq(hw, 0x0, offset, 1, data, true); in i40e_read_nvm_word_aq()
280 * @hw: pointer to the HW structure
289 static i40e_status __i40e_read_nvm_word(struct i40e_hw *hw, in __i40e_read_nvm_word() argument
292 if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) in __i40e_read_nvm_word()
293 return i40e_read_nvm_word_aq(hw, offset, data); in __i40e_read_nvm_word()
295 return i40e_read_nvm_word_srctl(hw, offset, data); in __i40e_read_nvm_word()
300 * @hw: pointer to the HW structure
306 i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_word() argument
311 if (hw->flags & I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK) in i40e_read_nvm_word()
312 ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_read_nvm_word()
316 ret_code = __i40e_read_nvm_word(hw, offset, data); in i40e_read_nvm_word()
318 if (hw->flags & I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK) in i40e_read_nvm_word()
319 i40e_release_nvm(hw); in i40e_read_nvm_word()
326 * @hw: Pointer to the HW structure
333 enum i40e_status_code i40e_read_nvm_module_data(struct i40e_hw *hw, in i40e_read_nvm_module_data() argument
346 status = i40e_read_nvm_word(hw, module_ptr, &ptr_value); in i40e_read_nvm_module_data()
348 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_read_nvm_module_data()
360 i40e_debug(hw, I40E_DEBUG_ALL, "Pointer not initialized.\n"); in i40e_read_nvm_module_data()
367 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_read_nvm_module_data()
374 status = i40e_read_nvm_word(hw, ptr_value + module_offset, in i40e_read_nvm_module_data()
377 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_read_nvm_module_data()
386 status = i40e_read_nvm_buffer(hw, offset, &words_data_size, in i40e_read_nvm_module_data()
389 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_read_nvm_module_data()
400 * @hw: pointer to the HW structure
409 static i40e_status i40e_read_nvm_buffer_srctl(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_buffer_srctl() argument
418 ret_code = i40e_read_nvm_word_srctl(hw, index, &data[word]); in i40e_read_nvm_buffer_srctl()
431 * @hw: pointer to the HW structure
440 static i40e_status i40e_read_nvm_buffer_aq(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_buffer_aq() argument
466 ret_code = i40e_read_nvm_aq(hw, 0x0, offset, read_size, in i40e_read_nvm_buffer_aq()
488 * @hw: pointer to the HW structure
496 static i40e_status __i40e_read_nvm_buffer(struct i40e_hw *hw, in __i40e_read_nvm_buffer() argument
500 if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) in __i40e_read_nvm_buffer()
501 return i40e_read_nvm_buffer_aq(hw, offset, words, data); in __i40e_read_nvm_buffer()
503 return i40e_read_nvm_buffer_srctl(hw, offset, words, data); in __i40e_read_nvm_buffer()
508 * @hw: pointer to the HW structure
517 i40e_status i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_buffer() argument
522 if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) { in i40e_read_nvm_buffer()
523 ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_read_nvm_buffer()
525 ret_code = i40e_read_nvm_buffer_aq(hw, offset, words, in i40e_read_nvm_buffer()
527 i40e_release_nvm(hw); in i40e_read_nvm_buffer()
530 ret_code = i40e_read_nvm_buffer_srctl(hw, offset, words, data); in i40e_read_nvm_buffer()
538 * @hw: pointer to the HW structure.
547 static i40e_status i40e_write_nvm_aq(struct i40e_hw *hw, u8 module_pointer, in i40e_write_nvm_aq() argument
555 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_write_nvm_aq()
562 if ((offset + words) > hw->nvm.sr_size) in i40e_write_nvm_aq()
563 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_write_nvm_aq()
565 (offset + words), hw->nvm.sr_size); in i40e_write_nvm_aq()
568 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_write_nvm_aq()
574 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_write_nvm_aq()
578 ret_code = i40e_aq_update_nvm(hw, module_pointer, in i40e_write_nvm_aq()
589 * @hw: pointer to hardware structure
597 static i40e_status i40e_calc_nvm_checksum(struct i40e_hw *hw, in i40e_calc_nvm_checksum() argument
608 ret_code = i40e_allocate_virt_mem(hw, &vmem, in i40e_calc_nvm_checksum()
615 ret_code = __i40e_read_nvm_word(hw, I40E_SR_VPD_PTR, &vpd_module); in i40e_calc_nvm_checksum()
622 ret_code = __i40e_read_nvm_word(hw, I40E_SR_PCIE_ALT_AUTO_LOAD_PTR, in i40e_calc_nvm_checksum()
632 for (i = 0; i < hw->nvm.sr_size; i++) { in i40e_calc_nvm_checksum()
637 ret_code = __i40e_read_nvm_buffer(hw, i, &words, data); in i40e_calc_nvm_checksum()
666 i40e_free_virt_mem(hw, &vmem); in i40e_calc_nvm_checksum()
672 * @hw: pointer to hardware structure
678 i40e_status i40e_update_nvm_checksum(struct i40e_hw *hw) in i40e_update_nvm_checksum() argument
684 ret_code = i40e_calc_nvm_checksum(hw, &checksum); in i40e_update_nvm_checksum()
687 ret_code = i40e_write_nvm_aq(hw, 0x00, I40E_SR_SW_CHECKSUM_WORD, in i40e_update_nvm_checksum()
695 * @hw: pointer to hardware structure
701 i40e_status i40e_validate_nvm_checksum(struct i40e_hw *hw, in i40e_validate_nvm_checksum() argument
713 ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_validate_nvm_checksum()
716 ret_code = i40e_calc_nvm_checksum(hw, &checksum_local); in i40e_validate_nvm_checksum()
717 __i40e_read_nvm_word(hw, I40E_SR_SW_CHECKSUM_WORD, &checksum_sr); in i40e_validate_nvm_checksum()
718 i40e_release_nvm(hw); in i40e_validate_nvm_checksum()
735 static i40e_status i40e_nvmupd_state_init(struct i40e_hw *hw,
738 static i40e_status i40e_nvmupd_state_reading(struct i40e_hw *hw,
741 static i40e_status i40e_nvmupd_state_writing(struct i40e_hw *hw,
744 static enum i40e_nvmupd_cmd i40e_nvmupd_validate_command(struct i40e_hw *hw,
747 static i40e_status i40e_nvmupd_nvm_erase(struct i40e_hw *hw,
750 static i40e_status i40e_nvmupd_nvm_write(struct i40e_hw *hw,
753 static i40e_status i40e_nvmupd_nvm_read(struct i40e_hw *hw,
756 static i40e_status i40e_nvmupd_exec_aq(struct i40e_hw *hw,
759 static i40e_status i40e_nvmupd_get_aq_result(struct i40e_hw *hw,
762 static i40e_status i40e_nvmupd_get_aq_event(struct i40e_hw *hw,
802 * @hw: pointer to hardware structure
809 i40e_status i40e_nvmupd_command(struct i40e_hw *hw, in i40e_nvmupd_command() argument
820 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, perrno); in i40e_nvmupd_command()
822 …i40e_debug(hw, I40E_DEBUG_NVM, "%s state %d nvm_release_on_hold %d opc 0x%04x cmd 0x%08x config 0x… in i40e_nvmupd_command()
824 hw->nvmupd_state, in i40e_nvmupd_command()
825 hw->nvm_release_on_done, hw->nvm_wait_opcode, in i40e_nvmupd_command()
830 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_command()
844 bytes[0] = hw->nvmupd_state; in i40e_nvmupd_command()
848 *((u16 *)&bytes[2]) = hw->nvm_wait_opcode; in i40e_nvmupd_command()
852 if (hw->nvmupd_state == I40E_NVMUPD_STATE_ERROR) in i40e_nvmupd_command()
853 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_command()
859 if (hw->nvmupd_state == I40E_NVMUPD_STATE_ERROR) { in i40e_nvmupd_command()
860 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_command()
862 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_command()
873 mutex_lock(&hw->aq.arq_mutex); in i40e_nvmupd_command()
874 switch (hw->nvmupd_state) { in i40e_nvmupd_command()
876 status = i40e_nvmupd_state_init(hw, cmd, bytes, perrno); in i40e_nvmupd_command()
880 status = i40e_nvmupd_state_reading(hw, cmd, bytes, perrno); in i40e_nvmupd_command()
884 status = i40e_nvmupd_state_writing(hw, cmd, bytes, perrno); in i40e_nvmupd_command()
893 i40e_nvmupd_clear_wait_state(hw); in i40e_nvmupd_command()
904 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_command()
905 "NVMUPD: no such state %d\n", hw->nvmupd_state); in i40e_nvmupd_command()
911 mutex_unlock(&hw->aq.arq_mutex); in i40e_nvmupd_command()
917 * @hw: pointer to hardware structure
925 static i40e_status i40e_nvmupd_state_init(struct i40e_hw *hw, in i40e_nvmupd_state_init() argument
932 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, perrno); in i40e_nvmupd_state_init()
936 status = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_nvmupd_state_init()
939 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
941 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
942 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
947 status = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_nvmupd_state_init()
950 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
952 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
954 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
956 hw->nvmupd_state = I40E_NVMUPD_STATE_READING; in i40e_nvmupd_state_init()
961 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
964 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
966 status = i40e_nvmupd_nvm_erase(hw, cmd, perrno); in i40e_nvmupd_state_init()
968 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
970 hw->nvm_release_on_done = true; in i40e_nvmupd_state_init()
971 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_erase; in i40e_nvmupd_state_init()
972 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_init()
978 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
981 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
983 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
985 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
987 hw->nvm_release_on_done = true; in i40e_nvmupd_state_init()
988 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_init()
989 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_init()
995 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
998 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
1000 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1002 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
1004 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_init()
1005 hw->nvmupd_state = I40E_NVMUPD_STATE_WRITE_WAIT; in i40e_nvmupd_state_init()
1011 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
1014 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
1016 status = i40e_update_nvm_checksum(hw); in i40e_nvmupd_state_init()
1018 *perrno = hw->aq.asq_last_status ? in i40e_nvmupd_state_init()
1020 hw->aq.asq_last_status) : in i40e_nvmupd_state_init()
1022 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
1024 hw->nvm_release_on_done = true; in i40e_nvmupd_state_init()
1025 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_init()
1026 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_init()
1032 status = i40e_nvmupd_exec_aq(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1036 status = i40e_nvmupd_get_aq_result(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1040 status = i40e_nvmupd_get_aq_event(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1044 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_state_init()
1056 * @hw: pointer to hardware structure
1064 static i40e_status i40e_nvmupd_state_reading(struct i40e_hw *hw, in i40e_nvmupd_state_reading() argument
1071 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, perrno); in i40e_nvmupd_state_reading()
1076 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, perrno); in i40e_nvmupd_state_reading()
1080 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, perrno); in i40e_nvmupd_state_reading()
1081 i40e_release_nvm(hw); in i40e_nvmupd_state_reading()
1082 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_reading()
1086 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_state_reading()
1098 * @hw: pointer to hardware structure
1106 static i40e_status i40e_nvmupd_state_writing(struct i40e_hw *hw, in i40e_nvmupd_state_writing() argument
1114 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, perrno); in i40e_nvmupd_state_writing()
1119 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, perrno); in i40e_nvmupd_state_writing()
1121 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_writing()
1122 hw->nvmupd_state = I40E_NVMUPD_STATE_WRITE_WAIT; in i40e_nvmupd_state_writing()
1127 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, perrno); in i40e_nvmupd_state_writing()
1129 *perrno = hw->aq.asq_last_status ? in i40e_nvmupd_state_writing()
1131 hw->aq.asq_last_status) : in i40e_nvmupd_state_writing()
1133 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_writing()
1135 hw->nvm_release_on_done = true; in i40e_nvmupd_state_writing()
1136 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_writing()
1137 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_writing()
1143 status = i40e_update_nvm_checksum(hw); in i40e_nvmupd_state_writing()
1145 *perrno = hw->aq.asq_last_status ? in i40e_nvmupd_state_writing()
1147 hw->aq.asq_last_status) : in i40e_nvmupd_state_writing()
1149 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_writing()
1151 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_writing()
1152 hw->nvmupd_state = I40E_NVMUPD_STATE_WRITE_WAIT; in i40e_nvmupd_state_writing()
1158 status = i40e_update_nvm_checksum(hw); in i40e_nvmupd_state_writing()
1160 *perrno = hw->aq.asq_last_status ? in i40e_nvmupd_state_writing()
1162 hw->aq.asq_last_status) : in i40e_nvmupd_state_writing()
1164 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_writing()
1166 hw->nvm_release_on_done = true; in i40e_nvmupd_state_writing()
1167 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_writing()
1168 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_writing()
1173 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_state_writing()
1187 if (status && (hw->aq.asq_last_status == I40E_AQ_RC_EBUSY) && in i40e_nvmupd_state_writing()
1190 u32 old_asq_status = hw->aq.asq_last_status; in i40e_nvmupd_state_writing()
1193 gtime = rd32(hw, I40E_GLVFGEN_TIMER); in i40e_nvmupd_state_writing()
1194 if (gtime >= hw->nvm.hw_semaphore_timeout) { in i40e_nvmupd_state_writing()
1195 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_nvmupd_state_writing()
1197 gtime, hw->nvm.hw_semaphore_timeout); in i40e_nvmupd_state_writing()
1198 i40e_release_nvm(hw); in i40e_nvmupd_state_writing()
1199 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_writing()
1201 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_nvmupd_state_writing()
1203 hw->aq.asq_last_status); in i40e_nvmupd_state_writing()
1205 hw->aq.asq_last_status = old_asq_status; in i40e_nvmupd_state_writing()
1217 * i40e_nvmupd_clear_wait_state - clear wait state on hw
1218 * @hw: pointer to the hardware structure
1220 void i40e_nvmupd_clear_wait_state(struct i40e_hw *hw) in i40e_nvmupd_clear_wait_state() argument
1222 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_clear_wait_state()
1224 hw->nvm_wait_opcode); in i40e_nvmupd_clear_wait_state()
1226 if (hw->nvm_release_on_done) { in i40e_nvmupd_clear_wait_state()
1227 i40e_release_nvm(hw); in i40e_nvmupd_clear_wait_state()
1228 hw->nvm_release_on_done = false; in i40e_nvmupd_clear_wait_state()
1230 hw->nvm_wait_opcode = 0; in i40e_nvmupd_clear_wait_state()
1232 if (hw->aq.arq_last_status) { in i40e_nvmupd_clear_wait_state()
1233 hw->nvmupd_state = I40E_NVMUPD_STATE_ERROR; in i40e_nvmupd_clear_wait_state()
1237 switch (hw->nvmupd_state) { in i40e_nvmupd_clear_wait_state()
1239 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_clear_wait_state()
1243 hw->nvmupd_state = I40E_NVMUPD_STATE_WRITING; in i40e_nvmupd_clear_wait_state()
1253 * @hw: pointer to the hardware structure
1257 void i40e_nvmupd_check_wait_event(struct i40e_hw *hw, u16 opcode, in i40e_nvmupd_check_wait_event() argument
1262 if (opcode == hw->nvm_wait_opcode) { in i40e_nvmupd_check_wait_event()
1263 memcpy(&hw->nvm_aq_event_desc, desc, aq_desc_len); in i40e_nvmupd_check_wait_event()
1264 i40e_nvmupd_clear_wait_state(hw); in i40e_nvmupd_check_wait_event()
1270 * @hw: pointer to hardware structure
1276 static enum i40e_nvmupd_cmd i40e_nvmupd_validate_command(struct i40e_hw *hw, in i40e_nvmupd_validate_command() argument
1292 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_validate_command()
1365 * @hw: pointer to hardware structure
1372 static i40e_status i40e_nvmupd_exec_aq(struct i40e_hw *hw, in i40e_nvmupd_exec_aq() argument
1384 i40e_debug(hw, I40E_DEBUG_NVM, "NVMUPD: %s\n", __func__); in i40e_nvmupd_exec_aq()
1389 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_nvmupd_exec_aq()
1392 memset(&hw->nvm_wb_desc, 0, aq_desc_len); in i40e_nvmupd_exec_aq()
1396 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_exec_aq()
1408 if (!hw->nvm_buff.va) { in i40e_nvmupd_exec_aq()
1409 status = i40e_allocate_virt_mem(hw, &hw->nvm_buff, in i40e_nvmupd_exec_aq()
1410 hw->aq.asq_buf_size); in i40e_nvmupd_exec_aq()
1412 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_exec_aq()
1417 if (hw->nvm_buff.va) { in i40e_nvmupd_exec_aq()
1418 buff = hw->nvm_buff.va; in i40e_nvmupd_exec_aq()
1424 memset(&hw->nvm_aq_event_desc, 0, aq_desc_len); in i40e_nvmupd_exec_aq()
1427 status = i40e_asq_send_command(hw, aq_desc, buff, in i40e_nvmupd_exec_aq()
1430 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_exec_aq()
1432 i40e_stat_str(hw, status), in i40e_nvmupd_exec_aq()
1433 i40e_aq_str(hw, hw->aq.asq_last_status)); in i40e_nvmupd_exec_aq()
1434 *perrno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_exec_aq()
1440 hw->nvm_wait_opcode = cmd->offset; in i40e_nvmupd_exec_aq()
1441 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_exec_aq()
1449 * @hw: pointer to hardware structure
1456 static i40e_status i40e_nvmupd_get_aq_result(struct i40e_hw *hw, in i40e_nvmupd_get_aq_result() argument
1465 i40e_debug(hw, I40E_DEBUG_NVM, "NVMUPD: %s\n", __func__); in i40e_nvmupd_get_aq_result()
1468 aq_total_len = aq_desc_len + le16_to_cpu(hw->nvm_wb_desc.datalen); in i40e_nvmupd_get_aq_result()
1472 i40e_debug(hw, I40E_DEBUG_NVM, "%s: offset too big %d > %d\n", in i40e_nvmupd_get_aq_result()
1482 i40e_debug(hw, I40E_DEBUG_NVM, "%s: copy length %d too big, trimming to %d\n", in i40e_nvmupd_get_aq_result()
1492 i40e_debug(hw, I40E_DEBUG_NVM, "%s: aq_desc bytes %d to %d\n", in i40e_nvmupd_get_aq_result()
1495 buff = ((u8 *)&hw->nvm_wb_desc) + cmd->offset; in i40e_nvmupd_get_aq_result()
1500 buff = hw->nvm_buff.va; in i40e_nvmupd_get_aq_result()
1502 buff = hw->nvm_buff.va + (cmd->offset - aq_desc_len); in i40e_nvmupd_get_aq_result()
1506 int start_byte = buff - (u8 *)hw->nvm_buff.va; in i40e_nvmupd_get_aq_result()
1508 i40e_debug(hw, I40E_DEBUG_NVM, "%s: databuf bytes %d to %d\n", in i40e_nvmupd_get_aq_result()
1518 * @hw: pointer to hardware structure
1525 static i40e_status i40e_nvmupd_get_aq_event(struct i40e_hw *hw, in i40e_nvmupd_get_aq_event() argument
1532 i40e_debug(hw, I40E_DEBUG_NVM, "NVMUPD: %s\n", __func__); in i40e_nvmupd_get_aq_event()
1535 aq_total_len = aq_desc_len + le16_to_cpu(hw->nvm_aq_event_desc.datalen); in i40e_nvmupd_get_aq_event()
1539 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_get_aq_event()
1545 memcpy(bytes, &hw->nvm_aq_event_desc, cmd->data_size); in i40e_nvmupd_get_aq_event()
1552 * @hw: pointer to hardware structure
1559 static i40e_status i40e_nvmupd_nvm_read(struct i40e_hw *hw, in i40e_nvmupd_nvm_read() argument
1573 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_nvmupd_nvm_read()
1575 status = i40e_aq_read_nvm(hw, module, cmd->offset, (u16)cmd->data_size, in i40e_nvmupd_nvm_read()
1578 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_read()
1581 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_read()
1583 status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_read()
1584 *perrno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_read()
1592 * @hw: pointer to hardware structure
1598 static i40e_status i40e_nvmupd_nvm_erase(struct i40e_hw *hw, in i40e_nvmupd_nvm_erase() argument
1612 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_nvmupd_nvm_erase()
1614 status = i40e_aq_erase_nvm(hw, module, cmd->offset, (u16)cmd->data_size, in i40e_nvmupd_nvm_erase()
1617 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_erase()
1620 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_erase()
1622 status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_erase()
1623 *perrno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_erase()
1631 * @hw: pointer to hardware structure
1638 static i40e_status i40e_nvmupd_nvm_write(struct i40e_hw *hw, in i40e_nvmupd_nvm_write() argument
1654 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_nvmupd_nvm_write()
1656 status = i40e_aq_update_nvm(hw, module, cmd->offset, in i40e_nvmupd_nvm_write()
1660 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_write()
1663 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_write()
1665 status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_write()
1666 *perrno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_write()