Lines Matching refs:hw

39 i40e_status i40e_init_nvm(struct i40e_hw *hw)  in i40e_init_nvm()  argument
41 struct i40e_nvm_info *nvm = &hw->nvm; in i40e_init_nvm()
49 gens = rd32(hw, I40E_GLNVM_GENS); in i40e_init_nvm()
56 fla = rd32(hw, I40E_GLNVM_FLA); in i40e_init_nvm()
64 i40e_debug(hw, I40E_DEBUG_NVM, "NVM init error: unsupported blank mode.\n"); in i40e_init_nvm()
78 i40e_status i40e_acquire_nvm(struct i40e_hw *hw, in i40e_acquire_nvm() argument
85 if (hw->nvm.blank_nvm_mode) in i40e_acquire_nvm()
88 ret_code = i40e_aq_request_resource(hw, I40E_NVM_RESOURCE_ID, access, in i40e_acquire_nvm()
91 gtime = rd32(hw, I40E_GLVFGEN_TIMER); in i40e_acquire_nvm()
94 hw->nvm.hw_semaphore_timeout = I40E_MS_TO_GTIME(time_left) + gtime; in i40e_acquire_nvm()
97 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_acquire_nvm()
99 access, time_left, ret_code, hw->aq.asq_last_status); in i40e_acquire_nvm()
106 gtime = rd32(hw, I40E_GLVFGEN_TIMER); in i40e_acquire_nvm()
107 ret_code = i40e_aq_request_resource(hw, in i40e_acquire_nvm()
112 hw->nvm.hw_semaphore_timeout = in i40e_acquire_nvm()
118 hw->nvm.hw_semaphore_timeout = 0; in i40e_acquire_nvm()
119 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_acquire_nvm()
121 time_left, ret_code, hw->aq.asq_last_status); in i40e_acquire_nvm()
135 void i40e_release_nvm(struct i40e_hw *hw) in i40e_release_nvm() argument
137 if (!hw->nvm.blank_nvm_mode) in i40e_release_nvm()
138 i40e_aq_release_resource(hw, I40E_NVM_RESOURCE_ID, 0, NULL); in i40e_release_nvm()
147 static i40e_status i40e_poll_sr_srctl_done_bit(struct i40e_hw *hw) in i40e_poll_sr_srctl_done_bit() argument
154 srctl = rd32(hw, I40E_GLNVM_SRCTL); in i40e_poll_sr_srctl_done_bit()
162 i40e_debug(hw, I40E_DEBUG_NVM, "Done bit in GLNVM_SRCTL not set"); in i40e_poll_sr_srctl_done_bit()
174 static i40e_status i40e_read_nvm_word_srctl(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_word_srctl() argument
180 if (offset >= hw->nvm.sr_size) { in i40e_read_nvm_word_srctl()
181 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_word_srctl()
183 offset, hw->nvm.sr_size); in i40e_read_nvm_word_srctl()
189 ret_code = i40e_poll_sr_srctl_done_bit(hw); in i40e_read_nvm_word_srctl()
194 wr32(hw, I40E_GLNVM_SRCTL, sr_reg); in i40e_read_nvm_word_srctl()
197 ret_code = i40e_poll_sr_srctl_done_bit(hw); in i40e_read_nvm_word_srctl()
199 sr_reg = rd32(hw, I40E_GLNVM_SRDATA); in i40e_read_nvm_word_srctl()
206 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_read_nvm_word_srctl()
222 i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_word() argument
225 return i40e_read_nvm_word_srctl(hw, offset, data); in i40e_read_nvm_word()
239 static i40e_status i40e_read_nvm_buffer_srctl(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_buffer_srctl() argument
248 ret_code = i40e_read_nvm_word_srctl(hw, index, &data[word]); in i40e_read_nvm_buffer_srctl()
270 i40e_status i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset, in i40e_read_nvm_buffer() argument
273 return i40e_read_nvm_buffer_srctl(hw, offset, words, data); in i40e_read_nvm_buffer()
287 static i40e_status i40e_write_nvm_aq(struct i40e_hw *hw, u8 module_pointer, in i40e_write_nvm_aq() argument
298 if ((offset + words) > hw->nvm.sr_size) in i40e_write_nvm_aq()
299 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_write_nvm_aq()
301 (offset + words), hw->nvm.sr_size); in i40e_write_nvm_aq()
304 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_write_nvm_aq()
310 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_write_nvm_aq()
314 ret_code = i40e_aq_update_nvm(hw, module_pointer, in i40e_write_nvm_aq()
332 static i40e_status i40e_calc_nvm_checksum(struct i40e_hw *hw, in i40e_calc_nvm_checksum() argument
343 ret_code = i40e_allocate_virt_mem(hw, &vmem, in i40e_calc_nvm_checksum()
350 ret_code = i40e_read_nvm_word(hw, I40E_SR_VPD_PTR, &vpd_module); in i40e_calc_nvm_checksum()
357 ret_code = i40e_read_nvm_word(hw, I40E_SR_PCIE_ALT_AUTO_LOAD_PTR, in i40e_calc_nvm_checksum()
367 for (i = 0; i < hw->nvm.sr_size; i++) { in i40e_calc_nvm_checksum()
372 ret_code = i40e_read_nvm_buffer(hw, i, &words, data); in i40e_calc_nvm_checksum()
401 i40e_free_virt_mem(hw, &vmem); in i40e_calc_nvm_checksum()
413 i40e_status i40e_update_nvm_checksum(struct i40e_hw *hw) in i40e_update_nvm_checksum() argument
418 ret_code = i40e_calc_nvm_checksum(hw, &checksum); in i40e_update_nvm_checksum()
420 ret_code = i40e_write_nvm_aq(hw, 0x00, I40E_SR_SW_CHECKSUM_WORD, in i40e_update_nvm_checksum()
434 i40e_status i40e_validate_nvm_checksum(struct i40e_hw *hw, in i40e_validate_nvm_checksum() argument
441 ret_code = i40e_calc_nvm_checksum(hw, &checksum_local); in i40e_validate_nvm_checksum()
448 i40e_read_nvm_word(hw, I40E_SR_SW_CHECKSUM_WORD, &checksum_sr); in i40e_validate_nvm_checksum()
464 static i40e_status i40e_nvmupd_state_init(struct i40e_hw *hw,
467 static i40e_status i40e_nvmupd_state_reading(struct i40e_hw *hw,
470 static i40e_status i40e_nvmupd_state_writing(struct i40e_hw *hw,
473 static enum i40e_nvmupd_cmd i40e_nvmupd_validate_command(struct i40e_hw *hw,
476 static i40e_status i40e_nvmupd_nvm_erase(struct i40e_hw *hw,
479 static i40e_status i40e_nvmupd_nvm_write(struct i40e_hw *hw,
482 static i40e_status i40e_nvmupd_nvm_read(struct i40e_hw *hw,
519 i40e_status i40e_nvmupd_command(struct i40e_hw *hw, in i40e_nvmupd_command() argument
528 switch (hw->nvmupd_state) { in i40e_nvmupd_command()
530 status = i40e_nvmupd_state_init(hw, cmd, bytes, errno); in i40e_nvmupd_command()
534 status = i40e_nvmupd_state_reading(hw, cmd, bytes, errno); in i40e_nvmupd_command()
538 status = i40e_nvmupd_state_writing(hw, cmd, bytes, errno); in i40e_nvmupd_command()
543 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_command()
544 "NVMUPD: no such state %d\n", hw->nvmupd_state); in i40e_nvmupd_command()
562 static i40e_status i40e_nvmupd_state_init(struct i40e_hw *hw, in i40e_nvmupd_state_init() argument
569 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, errno); in i40e_nvmupd_state_init()
573 status = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_nvmupd_state_init()
576 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
578 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, errno); in i40e_nvmupd_state_init()
579 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
584 status = i40e_acquire_nvm(hw, I40E_RESOURCE_READ); in i40e_nvmupd_state_init()
587 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
589 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, errno); in i40e_nvmupd_state_init()
591 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
593 hw->nvmupd_state = I40E_NVMUPD_STATE_READING; in i40e_nvmupd_state_init()
598 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
601 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
603 status = i40e_nvmupd_nvm_erase(hw, cmd, errno); in i40e_nvmupd_state_init()
605 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
607 hw->aq.nvm_release_on_done = true; in i40e_nvmupd_state_init()
612 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
615 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
617 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, errno); in i40e_nvmupd_state_init()
619 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
621 hw->aq.nvm_release_on_done = true; in i40e_nvmupd_state_init()
626 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
629 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
631 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, errno); in i40e_nvmupd_state_init()
633 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
635 hw->nvmupd_state = I40E_NVMUPD_STATE_WRITING; in i40e_nvmupd_state_init()
640 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_init()
643 hw->aq.asq_last_status); in i40e_nvmupd_state_init()
645 status = i40e_update_nvm_checksum(hw); in i40e_nvmupd_state_init()
647 *errno = hw->aq.asq_last_status ? in i40e_nvmupd_state_init()
649 hw->aq.asq_last_status) : in i40e_nvmupd_state_init()
651 i40e_release_nvm(hw); in i40e_nvmupd_state_init()
653 hw->aq.nvm_release_on_done = true; in i40e_nvmupd_state_init()
659 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_state_init()
679 static i40e_status i40e_nvmupd_state_reading(struct i40e_hw *hw, in i40e_nvmupd_state_reading() argument
686 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, errno); in i40e_nvmupd_state_reading()
691 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, errno); in i40e_nvmupd_state_reading()
695 status = i40e_nvmupd_nvm_read(hw, cmd, bytes, errno); in i40e_nvmupd_state_reading()
696 i40e_release_nvm(hw); in i40e_nvmupd_state_reading()
697 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_reading()
701 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_state_reading()
721 static i40e_status i40e_nvmupd_state_writing(struct i40e_hw *hw, in i40e_nvmupd_state_writing() argument
729 upd_cmd = i40e_nvmupd_validate_command(hw, cmd, errno); in i40e_nvmupd_state_writing()
734 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, errno); in i40e_nvmupd_state_writing()
738 status = i40e_nvmupd_nvm_write(hw, cmd, bytes, errno); in i40e_nvmupd_state_writing()
740 hw->aq.nvm_release_on_done = true; in i40e_nvmupd_state_writing()
741 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_writing()
745 status = i40e_update_nvm_checksum(hw); in i40e_nvmupd_state_writing()
747 *errno = hw->aq.asq_last_status ? in i40e_nvmupd_state_writing()
749 hw->aq.asq_last_status) : in i40e_nvmupd_state_writing()
751 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_writing()
756 status = i40e_update_nvm_checksum(hw); in i40e_nvmupd_state_writing()
758 *errno = hw->aq.asq_last_status ? in i40e_nvmupd_state_writing()
760 hw->aq.asq_last_status) : in i40e_nvmupd_state_writing()
763 hw->aq.nvm_release_on_done = true; in i40e_nvmupd_state_writing()
764 hw->nvmupd_state = I40E_NVMUPD_STATE_INIT; in i40e_nvmupd_state_writing()
768 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_state_writing()
782 if (status && (hw->aq.asq_last_status == I40E_AQ_RC_EBUSY) && in i40e_nvmupd_state_writing()
785 u32 old_asq_status = hw->aq.asq_last_status; in i40e_nvmupd_state_writing()
788 gtime = rd32(hw, I40E_GLVFGEN_TIMER); in i40e_nvmupd_state_writing()
789 if (gtime >= hw->nvm.hw_semaphore_timeout) { in i40e_nvmupd_state_writing()
790 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_nvmupd_state_writing()
792 gtime, hw->nvm.hw_semaphore_timeout); in i40e_nvmupd_state_writing()
793 i40e_release_nvm(hw); in i40e_nvmupd_state_writing()
794 status = i40e_acquire_nvm(hw, I40E_RESOURCE_WRITE); in i40e_nvmupd_state_writing()
796 i40e_debug(hw, I40E_DEBUG_ALL, in i40e_nvmupd_state_writing()
798 hw->aq.asq_last_status); in i40e_nvmupd_state_writing()
800 hw->aq.asq_last_status = old_asq_status; in i40e_nvmupd_state_writing()
819 static enum i40e_nvmupd_cmd i40e_nvmupd_validate_command(struct i40e_hw *hw, in i40e_nvmupd_validate_command() argument
834 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_validate_command()
888 i40e_debug(hw, I40E_DEBUG_NVM, "%s state %d nvm_release_on_hold %d\n", in i40e_nvmupd_validate_command()
890 hw->nvmupd_state, in i40e_nvmupd_validate_command()
891 hw->aq.nvm_release_on_done); in i40e_nvmupd_validate_command()
895 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_validate_command()
911 static i40e_status i40e_nvmupd_nvm_read(struct i40e_hw *hw, in i40e_nvmupd_nvm_read() argument
923 status = i40e_aq_read_nvm(hw, module, cmd->offset, (u16)cmd->data_size, in i40e_nvmupd_nvm_read()
926 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_read()
929 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_read()
931 status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_read()
932 *errno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_read()
946 static i40e_status i40e_nvmupd_nvm_erase(struct i40e_hw *hw, in i40e_nvmupd_nvm_erase() argument
957 status = i40e_aq_erase_nvm(hw, module, cmd->offset, (u16)cmd->data_size, in i40e_nvmupd_nvm_erase()
960 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_erase()
963 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_erase()
965 status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_erase()
966 *errno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_erase()
981 static i40e_status i40e_nvmupd_nvm_write(struct i40e_hw *hw, in i40e_nvmupd_nvm_write() argument
993 status = i40e_aq_update_nvm(hw, module, cmd->offset, in i40e_nvmupd_nvm_write()
996 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_write()
999 i40e_debug(hw, I40E_DEBUG_NVM, in i40e_nvmupd_nvm_write()
1001 status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_write()
1002 *errno = i40e_aq_rc_to_posix(status, hw->aq.asq_last_status); in i40e_nvmupd_nvm_write()