Lines Matching refs:hw
19 int i40e_init_nvm(struct i40e_hw *hw) in i40e_init_nvm() argument
21 struct i40e_nvm_info *nvm = &hw->nvm; in i40e_init_nvm()
29 gens = rd32(hw, I40E_GLNVM_GENS); in i40e_init_nvm()
35 fla = rd32(hw, I40E_GLNVM_FLA); in i40e_init_nvm()
43 i40e_debug(hw, I40E_DEBUG_NVM, "NVM init error: unsupported blank mode.\n"); in i40e_init_nvm()
57 int i40e_acquire_nvm(struct i40e_hw *hw, in i40e_acquire_nvm() argument
64 if (hw->nvm.blank_nvm_mode) in i40e_acquire_nvm()
67 ret_code = i40e_aq_request_resource(hw, I40E_NVM_RESOURCE_ID, access, in i40e_acquire_nvm()
70 gtime = rd32(hw, I40E_GLVFGEN_TIMER); in i40e_acquire_nvm()
73 hw->nvm.hw_semaphore_timeout = I40E_MS_TO_GTIME(time_left) + gtime; in i40e_acquire_nvm()
76 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_acquire_nvm()
78 access, time_left, ret_code, hw->aq.asq_last_status); in i40e_acquire_nvm()
85 gtime = rd32(hw, I40E_GLVFGEN_TIMER); in i40e_acquire_nvm()
86 ret_code = i40e_aq_request_resource(hw, in i40e_acquire_nvm()
91 hw->nvm.hw_semaphore_timeout = in i40e_acquire_nvm()
97 hw->nvm.hw_semaphore_timeout = 0; in i40e_acquire_nvm()
98 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_acquire_nvm()
100 time_left, ret_code, hw->aq.asq_last_status); in i40e_acquire_nvm()
114 void i40e_release_nvm(struct i40e_hw *hw) in i40e_release_nvm() argument
119 if (hw->nvm.blank_nvm_mode) in i40e_release_nvm()
122 ret_code = i40e_aq_release_resource(hw, I40E_NVM_RESOURCE_ID, 0, NULL); in i40e_release_nvm()
128 (total_delay < hw->aq.asq_cmd_timeout)) { in i40e_release_nvm()
130 ret_code = i40e_aq_release_resource(hw, in i40e_release_nvm()
143 static int i40e_poll_sr_srctl_done_bit(struct i40e_hw *hw) in i40e_poll_sr_srctl_done_bit() argument
150 srctl = rd32(hw, I40E_GLNVM_SRCTL); in i40e_poll_sr_srctl_done_bit()
158 i40e_debug(hw, I40E_DEBUG_NVM, "Done bit in GLNVM_SRCTL not set"); in i40e_poll_sr_srctl_done_bit()
170 static int i40e_read_nvm_word_srctl(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_word_srctl() argument
176 if (offset >= hw->nvm.sr_size) { in i40e_read_nvm_word_srctl()
177 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_word_srctl()
179 offset, hw->nvm.sr_size); in i40e_read_nvm_word_srctl()
185 ret_code = i40e_poll_sr_srctl_done_bit(hw); in i40e_read_nvm_word_srctl()
190 wr32(hw, I40E_GLNVM_SRCTL, sr_reg); in i40e_read_nvm_word_srctl()
193 ret_code = i40e_poll_sr_srctl_done_bit(hw); in i40e_read_nvm_word_srctl()
195 sr_reg = rd32(hw, I40E_GLNVM_SRDATA); in i40e_read_nvm_word_srctl()
201 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_word_srctl()
220 static int i40e_read_nvm_aq(struct i40e_hw *hw, in i40e_read_nvm_aq() argument
229 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_read_nvm_aq()
236 if ((offset + words) > hw->nvm.sr_size) in i40e_read_nvm_aq()
237 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_aq()
239 (offset + words), hw->nvm.sr_size); in i40e_read_nvm_aq()
242 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_aq()
248 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_aq()
252 ret_code = i40e_aq_read_nvm(hw, module_pointer, in i40e_read_nvm_aq()
268 static int i40e_read_nvm_word_aq(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_word_aq() argument
273 ret_code = i40e_read_nvm_aq(hw, 0x0, offset, 1, data, true); in i40e_read_nvm_word_aq()
290 static int __i40e_read_nvm_word(struct i40e_hw *hw, in __i40e_read_nvm_word() argument
293 if (test_bit(I40E_HW_CAP_AQ_SRCTL_ACCESS_ENABLE, hw->caps)) in __i40e_read_nvm_word()
294 return i40e_read_nvm_word_aq(hw, offset, data); in __i40e_read_nvm_word()
296 return i40e_read_nvm_word_srctl(hw, offset, data); in __i40e_read_nvm_word()
307 int i40e_read_nvm_word(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_word() argument
312 if (test_bit(I40E_HW_CAP_NVM_READ_REQUIRES_LOCK, hw->caps)) in i40e_read_nvm_word()
313 ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_read_nvm_word()
317 ret_code = __i40e_read_nvm_word(hw, offset, data); in i40e_read_nvm_word()
319 if (test_bit(I40E_HW_CAP_NVM_READ_REQUIRES_LOCK, hw->caps)) in i40e_read_nvm_word()
320 i40e_release_nvm(hw); in i40e_read_nvm_word()
334 int i40e_read_nvm_module_data(struct i40e_hw *hw, in i40e_read_nvm_module_data() argument
347 status = i40e_read_nvm_word(hw, module_ptr, &ptr_value); in i40e_read_nvm_module_data()
349 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_read_nvm_module_data()
361 i40e_debug(hw, I40E_DEBUG_ALL, "Pointer not initialized.\n"); in i40e_read_nvm_module_data()
368 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_read_nvm_module_data()
375 status = i40e_read_nvm_word(hw, ptr_value + module_offset, in i40e_read_nvm_module_data()
378 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_read_nvm_module_data()
387 status = i40e_read_nvm_buffer(hw, offset, &words_data_size, in i40e_read_nvm_module_data()
390 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_read_nvm_module_data()
410 static int i40e_read_nvm_buffer_srctl(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_buffer_srctl() argument
419 ret_code = i40e_read_nvm_word_srctl(hw, index, &data[word]); in i40e_read_nvm_buffer_srctl()
441 static int i40e_read_nvm_buffer_aq(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_buffer_aq() argument
467 ret_code = i40e_read_nvm_aq(hw, 0x0, offset, read_size, in i40e_read_nvm_buffer_aq()
497 static int __i40e_read_nvm_buffer(struct i40e_hw *hw, in __i40e_read_nvm_buffer() argument
501 if (test_bit(I40E_HW_CAP_AQ_SRCTL_ACCESS_ENABLE, hw->caps)) in __i40e_read_nvm_buffer()
502 return i40e_read_nvm_buffer_aq(hw, offset, words, data); in __i40e_read_nvm_buffer()
504 return i40e_read_nvm_buffer_srctl(hw, offset, words, data); in __i40e_read_nvm_buffer()
518 int i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_buffer() argument
523 if (test_bit(I40E_HW_CAP_AQ_SRCTL_ACCESS_ENABLE, hw->caps)) { in i40e_read_nvm_buffer()
524 ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_read_nvm_buffer()
526 ret_code = i40e_read_nvm_buffer_aq(hw, offset, words, in i40e_read_nvm_buffer()
528 i40e_release_nvm(hw); in i40e_read_nvm_buffer()
531 ret_code = i40e_read_nvm_buffer_srctl(hw, offset, words, data); in i40e_read_nvm_buffer()
548 static int i40e_write_nvm_aq(struct i40e_hw *hw, u8 module_pointer, in i40e_write_nvm_aq() argument
556 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_write_nvm_aq()
563 if ((offset + words) > hw->nvm.sr_size) in i40e_write_nvm_aq()
564 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_write_nvm_aq()
566 (offset + words), hw->nvm.sr_size); in i40e_write_nvm_aq()
569 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_write_nvm_aq()
575 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_write_nvm_aq()
579 ret_code = i40e_aq_update_nvm(hw, module_pointer, in i40e_write_nvm_aq()
598 static int i40e_calc_nvm_checksum(struct i40e_hw *hw, in i40e_calc_nvm_checksum() argument
609 ret_code = i40e_allocate_virt_mem(hw, &vmem, in i40e_calc_nvm_checksum()
616 ret_code = __i40e_read_nvm_word(hw, I40E_SR_VPD_PTR, &vpd_module); in i40e_calc_nvm_checksum()
623 ret_code = __i40e_read_nvm_word(hw, I40E_SR_PCIE_ALT_AUTO_LOAD_PTR, in i40e_calc_nvm_checksum()
633 for (i = 0; i < hw->nvm.sr_size; i++) { in i40e_calc_nvm_checksum()
638 ret_code = __i40e_read_nvm_buffer(hw, i, &words, data); in i40e_calc_nvm_checksum()
667 i40e_free_virt_mem(hw, &vmem); in i40e_calc_nvm_checksum()
679 int i40e_update_nvm_checksum(struct i40e_hw *hw) in i40e_update_nvm_checksum() argument
685 ret_code = i40e_calc_nvm_checksum(hw, &checksum); in i40e_update_nvm_checksum()
688 ret_code = i40e_write_nvm_aq(hw, 0x00, I40E_SR_SW_CHECKSUM_WORD, in i40e_update_nvm_checksum()
703 int i40e_validate_nvm_checksum(struct i40e_hw *hw, in i40e_validate_nvm_checksum() argument
715 ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_validate_nvm_checksum()
718 ret_code = i40e_calc_nvm_checksum(hw, &checksum_local); in i40e_validate_nvm_checksum()
719 __i40e_read_nvm_word(hw, I40E_SR_SW_CHECKSUM_WORD, &checksum_sr); in i40e_validate_nvm_checksum()
720 i40e_release_nvm(hw); in i40e_validate_nvm_checksum()
780 i40e_nvmupd_validate_command(struct i40e_hw *hw, struct i40e_nvm_access *cmd, in i40e_nvmupd_validate_command() argument
794 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_validate_command()
872 static int i40e_nvmupd_nvm_erase(struct i40e_hw *hw, in i40e_nvmupd_nvm_erase() argument
886 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_nvmupd_nvm_erase()
888 status = i40e_aq_erase_nvm(hw, module, cmd->offset, (u16)cmd->data_size, in i40e_nvmupd_nvm_erase()
891 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_erase()
894 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_erase()
896 __func__, status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_erase()
897 *perrno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_erase()
912 static int i40e_nvmupd_nvm_write(struct i40e_hw *hw, in i40e_nvmupd_nvm_write() argument
928 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_nvmupd_nvm_write()
930 status = i40e_aq_update_nvm(hw, module, cmd->offset, in i40e_nvmupd_nvm_write()
934 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_write()
937 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_write()
939 __func__, status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_write()
940 *perrno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_write()
955 static int i40e_nvmupd_nvm_read(struct i40e_hw *hw, in i40e_nvmupd_nvm_read() argument
969 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_nvmupd_nvm_read()
971 status = i40e_aq_read_nvm(hw, module, cmd->offset, (u16)cmd->data_size, in i40e_nvmupd_nvm_read()
974 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_read()
977 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_read()
979 __func__, status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_read()
980 *perrno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_read()
995 static int i40e_nvmupd_exec_aq(struct i40e_hw *hw, in i40e_nvmupd_exec_aq() argument
1007 i40e_debug(hw, I40E_DEBUG_NVM, "NVMUPD: %s\n", __func__); in i40e_nvmupd_exec_aq()
1012 cmd_details.wb_desc = &hw->nvm_wb_desc; in i40e_nvmupd_exec_aq()
1015 memset(&hw->nvm_wb_desc, 0, aq_desc_len); in i40e_nvmupd_exec_aq()
1019 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_exec_aq()
1031 if (!hw->nvm_buff.va) { in i40e_nvmupd_exec_aq()
1032 status = i40e_allocate_virt_mem(hw, &hw->nvm_buff, in i40e_nvmupd_exec_aq()
1033 hw->aq.asq_buf_size); in i40e_nvmupd_exec_aq()
1035 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_exec_aq()
1040 if (hw->nvm_buff.va) { in i40e_nvmupd_exec_aq()
1041 buff = hw->nvm_buff.va; in i40e_nvmupd_exec_aq()
1047 memset(&hw->nvm_aq_event_desc, 0, aq_desc_len); in i40e_nvmupd_exec_aq()
1050 status = i40e_asq_send_command(hw, aq_desc, buff, in i40e_nvmupd_exec_aq()
1053 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_exec_aq()
1056 i40e_aq_str(hw, hw->aq.asq_last_status)); in i40e_nvmupd_exec_aq()
1057 *perrno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_exec_aq()
1063 hw->nvm_wait_opcode = cmd->offset; in i40e_nvmupd_exec_aq()
1064 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_exec_aq()
1079 static int i40e_nvmupd_get_aq_result(struct i40e_hw *hw, in i40e_nvmupd_get_aq_result() argument
1088 i40e_debug(hw, I40E_DEBUG_NVM, "NVMUPD: %s\n", __func__); in i40e_nvmupd_get_aq_result()
1091 aq_total_len = aq_desc_len + le16_to_cpu(hw->nvm_wb_desc.datalen); in i40e_nvmupd_get_aq_result()
1095 i40e_debug(hw, I40E_DEBUG_NVM, "%s: offset too big %d > %d\n", in i40e_nvmupd_get_aq_result()
1105 i40e_debug(hw, I40E_DEBUG_NVM, "%s: copy length %d too big, trimming to %d\n", in i40e_nvmupd_get_aq_result()
1115 i40e_debug(hw, I40E_DEBUG_NVM, "%s: aq_desc bytes %d to %d\n", in i40e_nvmupd_get_aq_result()
1118 buff = ((u8 *)&hw->nvm_wb_desc) + cmd->offset; in i40e_nvmupd_get_aq_result()
1123 buff = hw->nvm_buff.va; in i40e_nvmupd_get_aq_result()
1125 buff = hw->nvm_buff.va + (cmd->offset - aq_desc_len); in i40e_nvmupd_get_aq_result()
1129 int start_byte = buff - (u8 *)hw->nvm_buff.va; in i40e_nvmupd_get_aq_result()
1131 i40e_debug(hw, I40E_DEBUG_NVM, "%s: databuf bytes %d to %d\n", in i40e_nvmupd_get_aq_result()
1148 static int i40e_nvmupd_get_aq_event(struct i40e_hw *hw, in i40e_nvmupd_get_aq_event() argument
1155 i40e_debug(hw, I40E_DEBUG_NVM, "NVMUPD: %s\n", __func__); in i40e_nvmupd_get_aq_event()
1158 aq_total_len = aq_desc_len + le16_to_cpu(hw->nvm_aq_event_desc.datalen); in i40e_nvmupd_get_aq_event()
1162 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_get_aq_event()
1168 memcpy(bytes, &hw->nvm_aq_event_desc, cmd->data_size); in i40e_nvmupd_get_aq_event()
1183 static int i40e_nvmupd_state_init(struct i40e_hw *hw, in i40e_nvmupd_state_init() argument
1190 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, perrno); in i40e_nvmupd_state_init()
1194 status = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_nvmupd_state_init()
1197 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
1199 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1200 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
1205 status = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_nvmupd_state_init()
1208 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
1210 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1212 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
1214 hw->nvmupd_state = I40E_NVMUPD_STATE_READING; in i40e_nvmupd_state_init()
1219 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
1222 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
1224 status = i40e_nvmupd_nvm_erase(hw, cmd, perrno); in i40e_nvmupd_state_init()
1226 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
1228 hw->nvm_release_on_done = true; in i40e_nvmupd_state_init()
1229 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_erase; in i40e_nvmupd_state_init()
1230 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_init()
1236 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
1239 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
1241 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1243 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
1245 hw->nvm_release_on_done = true; in i40e_nvmupd_state_init()
1246 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_init()
1247 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_init()
1253 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
1256 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
1258 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1260 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
1262 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_init()
1263 hw->nvmupd_state = I40E_NVMUPD_STATE_WRITE_WAIT; in i40e_nvmupd_state_init()
1269 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
1272 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
1274 status = i40e_update_nvm_checksum(hw); in i40e_nvmupd_state_init()
1276 *perrno = hw->aq.asq_last_status ? in i40e_nvmupd_state_init()
1278 hw->aq.asq_last_status) : in i40e_nvmupd_state_init()
1280 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
1282 hw->nvm_release_on_done = true; in i40e_nvmupd_state_init()
1283 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_init()
1284 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_init()
1290 status = i40e_nvmupd_exec_aq(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1294 status = i40e_nvmupd_get_aq_result(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1298 status = i40e_nvmupd_get_aq_event(hw, cmd, bytes, perrno); in i40e_nvmupd_state_init()
1302 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_state_init()
1322 static int i40e_nvmupd_state_reading(struct i40e_hw *hw, in i40e_nvmupd_state_reading() argument
1329 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, perrno); in i40e_nvmupd_state_reading()
1334 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, perrno); in i40e_nvmupd_state_reading()
1338 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, perrno); in i40e_nvmupd_state_reading()
1339 i40e_release_nvm(hw); in i40e_nvmupd_state_reading()
1340 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_reading()
1344 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_state_reading()
1364 static int i40e_nvmupd_state_writing(struct i40e_hw *hw, in i40e_nvmupd_state_writing() argument
1372 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, perrno); in i40e_nvmupd_state_writing()
1377 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, perrno); in i40e_nvmupd_state_writing()
1379 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_writing()
1380 hw->nvmupd_state = I40E_NVMUPD_STATE_WRITE_WAIT; in i40e_nvmupd_state_writing()
1385 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, perrno); in i40e_nvmupd_state_writing()
1387 *perrno = hw->aq.asq_last_status ? in i40e_nvmupd_state_writing()
1389 hw->aq.asq_last_status) : in i40e_nvmupd_state_writing()
1391 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_writing()
1393 hw->nvm_release_on_done = true; in i40e_nvmupd_state_writing()
1394 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_writing()
1395 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_writing()
1401 status = i40e_update_nvm_checksum(hw); in i40e_nvmupd_state_writing()
1403 *perrno = hw->aq.asq_last_status ? in i40e_nvmupd_state_writing()
1405 hw->aq.asq_last_status) : in i40e_nvmupd_state_writing()
1407 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_writing()
1409 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_writing()
1410 hw->nvmupd_state = I40E_NVMUPD_STATE_WRITE_WAIT; in i40e_nvmupd_state_writing()
1416 status = i40e_update_nvm_checksum(hw); in i40e_nvmupd_state_writing()
1418 *perrno = hw->aq.asq_last_status ? in i40e_nvmupd_state_writing()
1420 hw->aq.asq_last_status) : in i40e_nvmupd_state_writing()
1422 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_writing()
1424 hw->nvm_release_on_done = true; in i40e_nvmupd_state_writing()
1425 hw->nvm_wait_opcode = i40e_aqc_opc_nvm_update; in i40e_nvmupd_state_writing()
1426 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT_WAIT; in i40e_nvmupd_state_writing()
1431 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_state_writing()
1445 if (status && hw->aq.asq_last_status == I40E_AQ_RC_EBUSY && in i40e_nvmupd_state_writing()
1447 u32 old_asq_status = hw->aq.asq_last_status; in i40e_nvmupd_state_writing()
1451 gtime = rd32(hw, I40E_GLVFGEN_TIMER); in i40e_nvmupd_state_writing()
1452 if (gtime >= hw->nvm.hw_semaphore_timeout) { in i40e_nvmupd_state_writing()
1453 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_nvmupd_state_writing()
1455 gtime, hw->nvm.hw_semaphore_timeout); in i40e_nvmupd_state_writing()
1456 i40e_release_nvm(hw); in i40e_nvmupd_state_writing()
1457 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_writing()
1459 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_nvmupd_state_writing()
1461 hw->aq.asq_last_status); in i40e_nvmupd_state_writing()
1463 hw->aq.asq_last_status = old_asq_status; in i40e_nvmupd_state_writing()
1483 int i40e_nvmupd_command(struct i40e_hw *hw, in i40e_nvmupd_command() argument
1494 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, perrno); in i40e_nvmupd_command()
1496 …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()
1498 hw->nvmupd_state, in i40e_nvmupd_command()
1499 hw->nvm_release_on_done, hw->nvm_wait_opcode, in i40e_nvmupd_command()
1504 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_command()
1518 bytes[0] = hw->nvmupd_state; in i40e_nvmupd_command()
1522 *((u16 *)&bytes[2]) = hw->nvm_wait_opcode; in i40e_nvmupd_command()
1526 if (hw->nvmupd_state == I40E_NVMUPD_STATE_ERROR) in i40e_nvmupd_command()
1527 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_command()
1533 if (hw->nvmupd_state == I40E_NVMUPD_STATE_ERROR) { in i40e_nvmupd_command()
1534 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_command()
1536 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_command()
1547 mutex_lock(&hw->aq.arq_mutex); in i40e_nvmupd_command()
1548 switch (hw->nvmupd_state) { in i40e_nvmupd_command()
1550 status = i40e_nvmupd_state_init(hw, cmd, bytes, perrno); in i40e_nvmupd_command()
1554 status = i40e_nvmupd_state_reading(hw, cmd, bytes, perrno); in i40e_nvmupd_command()
1558 status = i40e_nvmupd_state_writing(hw, cmd, bytes, perrno); in i40e_nvmupd_command()
1567 i40e_nvmupd_clear_wait_state(hw); in i40e_nvmupd_command()
1578 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_command()
1579 "NVMUPD: no such state %d\n", hw->nvmupd_state); in i40e_nvmupd_command()
1585 mutex_unlock(&hw->aq.arq_mutex); in i40e_nvmupd_command()
1593 void i40e_nvmupd_clear_wait_state(struct i40e_hw *hw) in i40e_nvmupd_clear_wait_state() argument
1595 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_clear_wait_state()
1597 hw->nvm_wait_opcode); in i40e_nvmupd_clear_wait_state()
1599 if (hw->nvm_release_on_done) { in i40e_nvmupd_clear_wait_state()
1600 i40e_release_nvm(hw); in i40e_nvmupd_clear_wait_state()
1601 hw->nvm_release_on_done = false; in i40e_nvmupd_clear_wait_state()
1603 hw->nvm_wait_opcode = 0; in i40e_nvmupd_clear_wait_state()
1605 if (hw->aq.arq_last_status) { in i40e_nvmupd_clear_wait_state()
1606 hw->nvmupd_state = I40E_NVMUPD_STATE_ERROR; in i40e_nvmupd_clear_wait_state()
1610 switch (hw->nvmupd_state) { in i40e_nvmupd_clear_wait_state()
1612 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_clear_wait_state()
1616 hw->nvmupd_state = I40E_NVMUPD_STATE_WRITING; in i40e_nvmupd_clear_wait_state()
1630 void i40e_nvmupd_check_wait_event(struct i40e_hw *hw, u16 opcode, in i40e_nvmupd_check_wait_event() argument
1635 if (opcode == hw->nvm_wait_opcode) { in i40e_nvmupd_check_wait_event()
1636 memcpy(&hw->nvm_aq_event_desc, desc, aq_desc_len); in i40e_nvmupd_check_wait_event()
1637 i40e_nvmupd_clear_wait_state(hw); in i40e_nvmupd_check_wait_event()