Lines Matching refs:trans

36 static int iwl_eeprom_acquire_semaphore(struct iwl_trans *trans)  in iwl_eeprom_acquire_semaphore()  argument
43 iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG, in iwl_eeprom_acquire_semaphore()
47 ret = iwl_poll_bit(trans, CSR_HW_IF_CONFIG_REG, in iwl_eeprom_acquire_semaphore()
52 IWL_DEBUG_EEPROM(trans->dev, in iwl_eeprom_acquire_semaphore()
62 static void iwl_eeprom_release_semaphore(struct iwl_trans *trans) in iwl_eeprom_release_semaphore() argument
64 iwl_clear_bit(trans, CSR_HW_IF_CONFIG_REG, in iwl_eeprom_release_semaphore()
68 static int iwl_eeprom_verify_signature(struct iwl_trans *trans, bool nvm_is_otp) in iwl_eeprom_verify_signature() argument
70 u32 gp = iwl_read32(trans, CSR_EEPROM_GP) & CSR_EEPROM_GP_VALID_MSK; in iwl_eeprom_verify_signature()
72 IWL_DEBUG_EEPROM(trans->dev, "EEPROM signature=0x%08x\n", gp); in iwl_eeprom_verify_signature()
77 IWL_ERR(trans, "EEPROM with bad signature: 0x%08x\n", in iwl_eeprom_verify_signature()
85 IWL_ERR(trans, "OTP with bad signature: 0x%08x\n", gp); in iwl_eeprom_verify_signature()
91 IWL_ERR(trans, in iwl_eeprom_verify_signature()
104 static void iwl_set_otp_access_absolute(struct iwl_trans *trans) in iwl_set_otp_access_absolute() argument
106 iwl_read32(trans, CSR_OTP_GP_REG); in iwl_set_otp_access_absolute()
108 iwl_clear_bit(trans, CSR_OTP_GP_REG, in iwl_set_otp_access_absolute()
112 static int iwl_nvm_is_otp(struct iwl_trans *trans) in iwl_nvm_is_otp() argument
117 switch (trans->hw_rev & CSR_HW_REV_TYPE_MSK) { in iwl_nvm_is_otp()
119 IWL_ERR(trans, "Unknown hardware type\n"); in iwl_nvm_is_otp()
127 otpgp = iwl_read32(trans, CSR_OTP_GP_REG); in iwl_nvm_is_otp()
134 static int iwl_init_otp_access(struct iwl_trans *trans) in iwl_init_otp_access() argument
138 ret = iwl_finish_nic_init(trans); in iwl_init_otp_access()
142 iwl_set_bits_prph(trans, APMG_PS_CTRL_REG, in iwl_init_otp_access()
145 iwl_clear_bits_prph(trans, APMG_PS_CTRL_REG, in iwl_init_otp_access()
152 if (trans->trans_cfg->base_params->shadow_ram_support) in iwl_init_otp_access()
153 iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG, in iwl_init_otp_access()
159 static int iwl_read_otp_word(struct iwl_trans *trans, u16 addr, in iwl_read_otp_word() argument
166 iwl_write32(trans, CSR_EEPROM_REG, in iwl_read_otp_word()
168 ret = iwl_poll_bit(trans, CSR_EEPROM_REG, in iwl_read_otp_word()
173 IWL_ERR(trans, "Time out reading OTP[%d]\n", addr); in iwl_read_otp_word()
176 r = iwl_read32(trans, CSR_EEPROM_REG); in iwl_read_otp_word()
178 otpgp = iwl_read32(trans, CSR_OTP_GP_REG); in iwl_read_otp_word()
182 iwl_set_bit(trans, CSR_OTP_GP_REG, in iwl_read_otp_word()
184 IWL_ERR(trans, "Uncorrectable OTP ECC error, abort OTP read\n"); in iwl_read_otp_word()
190 iwl_set_bit(trans, CSR_OTP_GP_REG, in iwl_read_otp_word()
192 IWL_ERR(trans, "Correctable OTP ECC error, continue read\n"); in iwl_read_otp_word()
201 static bool iwl_is_otp_empty(struct iwl_trans *trans) in iwl_is_otp_empty() argument
208 if (!iwl_read_otp_word(trans, next_link_addr, &link_value)) { in iwl_is_otp_empty()
210 IWL_ERR(trans, "OTP is empty\n"); in iwl_is_otp_empty()
214 IWL_ERR(trans, "Unable to read first block of OTP list.\n"); in iwl_is_otp_empty()
231 static int iwl_find_otp_image(struct iwl_trans *trans, in iwl_find_otp_image() argument
239 iwl_set_otp_access_absolute(trans); in iwl_find_otp_image()
242 if (iwl_is_otp_empty(trans)) in iwl_find_otp_image()
256 IWL_DEBUG_EEPROM(trans->dev, "OTP blocks %d addr 0x%x\n", in iwl_find_otp_image()
258 if (iwl_read_otp_word(trans, next_link_addr, &link_value)) in iwl_find_otp_image()
273 } while (usedblocks <= trans->trans_cfg->base_params->max_ll_items); in iwl_find_otp_image()
276 IWL_DEBUG_EEPROM(trans->dev, "OTP has no valid blocks\n"); in iwl_find_otp_image()
288 int iwl_read_eeprom(struct iwl_trans *trans, u8 **eeprom, size_t *eeprom_size) in iwl_read_eeprom() argument
291 u32 gp = iwl_read32(trans, CSR_EEPROM_GP); in iwl_read_eeprom()
302 nvm_is_otp = iwl_nvm_is_otp(trans); in iwl_read_eeprom()
306 sz = trans->trans_cfg->base_params->eeprom_size; in iwl_read_eeprom()
307 IWL_DEBUG_EEPROM(trans->dev, "NVM size = %d\n", sz); in iwl_read_eeprom()
313 ret = iwl_eeprom_verify_signature(trans, nvm_is_otp); in iwl_read_eeprom()
315 IWL_ERR(trans, "EEPROM not found, EEPROM_GP=0x%08x\n", gp); in iwl_read_eeprom()
320 ret = iwl_eeprom_acquire_semaphore(trans); in iwl_read_eeprom()
322 IWL_ERR(trans, "Failed to acquire EEPROM semaphore.\n"); in iwl_read_eeprom()
327 ret = iwl_init_otp_access(trans); in iwl_read_eeprom()
329 IWL_ERR(trans, "Failed to initialize OTP access.\n"); in iwl_read_eeprom()
333 iwl_write32(trans, CSR_EEPROM_GP, in iwl_read_eeprom()
334 iwl_read32(trans, CSR_EEPROM_GP) & in iwl_read_eeprom()
337 iwl_set_bit(trans, CSR_OTP_GP_REG, in iwl_read_eeprom()
341 if (!trans->trans_cfg->base_params->shadow_ram_support) { in iwl_read_eeprom()
342 ret = iwl_find_otp_image(trans, &validblockaddr); in iwl_read_eeprom()
350 ret = iwl_read_otp_word(trans, addr, &eeprom_data); in iwl_read_eeprom()
361 iwl_write32(trans, CSR_EEPROM_REG, in iwl_read_eeprom()
364 ret = iwl_poll_bit(trans, CSR_EEPROM_REG, in iwl_read_eeprom()
369 IWL_ERR(trans, in iwl_read_eeprom()
373 r = iwl_read32(trans, CSR_EEPROM_REG); in iwl_read_eeprom()
378 IWL_DEBUG_EEPROM(trans->dev, "NVM Type: %s\n", in iwl_read_eeprom()
381 iwl_eeprom_release_semaphore(trans); in iwl_read_eeprom()
388 iwl_eeprom_release_semaphore(trans); in iwl_read_eeprom()