Lines Matching full:trans
94 static int iwl_eeprom_acquire_semaphore(struct iwl_trans *trans) in iwl_eeprom_acquire_semaphore() argument
101 iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG, in iwl_eeprom_acquire_semaphore()
105 ret = iwl_poll_bit(trans, CSR_HW_IF_CONFIG_REG, in iwl_eeprom_acquire_semaphore()
110 IWL_DEBUG_EEPROM(trans->dev, in iwl_eeprom_acquire_semaphore()
120 static void iwl_eeprom_release_semaphore(struct iwl_trans *trans) in iwl_eeprom_release_semaphore() argument
122 iwl_clear_bit(trans, CSR_HW_IF_CONFIG_REG, in iwl_eeprom_release_semaphore()
126 static int iwl_eeprom_verify_signature(struct iwl_trans *trans, bool nvm_is_otp) in iwl_eeprom_verify_signature() argument
128 u32 gp = iwl_read32(trans, CSR_EEPROM_GP) & CSR_EEPROM_GP_VALID_MSK; in iwl_eeprom_verify_signature()
130 IWL_DEBUG_EEPROM(trans->dev, "EEPROM signature=0x%08x\n", gp); in iwl_eeprom_verify_signature()
135 IWL_ERR(trans, "EEPROM with bad signature: 0x%08x\n", in iwl_eeprom_verify_signature()
143 IWL_ERR(trans, "OTP with bad signature: 0x%08x\n", gp); in iwl_eeprom_verify_signature()
149 IWL_ERR(trans, in iwl_eeprom_verify_signature()
162 static void iwl_set_otp_access_absolute(struct iwl_trans *trans) in iwl_set_otp_access_absolute() argument
164 iwl_read32(trans, CSR_OTP_GP_REG); in iwl_set_otp_access_absolute()
166 iwl_clear_bit(trans, CSR_OTP_GP_REG, in iwl_set_otp_access_absolute()
170 static int iwl_nvm_is_otp(struct iwl_trans *trans) in iwl_nvm_is_otp() argument
175 switch (trans->hw_rev & CSR_HW_REV_TYPE_MSK) { in iwl_nvm_is_otp()
177 IWL_ERR(trans, "Unknown hardware type\n"); in iwl_nvm_is_otp()
185 otpgp = iwl_read32(trans, CSR_OTP_GP_REG); in iwl_nvm_is_otp()
192 static int iwl_init_otp_access(struct iwl_trans *trans) in iwl_init_otp_access() argument
196 ret = iwl_finish_nic_init(trans, trans->trans_cfg); in iwl_init_otp_access()
200 iwl_set_bits_prph(trans, APMG_PS_CTRL_REG, in iwl_init_otp_access()
203 iwl_clear_bits_prph(trans, APMG_PS_CTRL_REG, in iwl_init_otp_access()
210 if (trans->trans_cfg->base_params->shadow_ram_support) in iwl_init_otp_access()
211 iwl_set_bit(trans, CSR_DBG_LINK_PWR_MGMT_REG, in iwl_init_otp_access()
217 static int iwl_read_otp_word(struct iwl_trans *trans, u16 addr, in iwl_read_otp_word() argument
224 iwl_write32(trans, CSR_EEPROM_REG, in iwl_read_otp_word()
226 ret = iwl_poll_bit(trans, CSR_EEPROM_REG, in iwl_read_otp_word()
231 IWL_ERR(trans, "Time out reading OTP[%d]\n", addr); in iwl_read_otp_word()
234 r = iwl_read32(trans, CSR_EEPROM_REG); in iwl_read_otp_word()
236 otpgp = iwl_read32(trans, CSR_OTP_GP_REG); in iwl_read_otp_word()
240 iwl_set_bit(trans, CSR_OTP_GP_REG, in iwl_read_otp_word()
242 IWL_ERR(trans, "Uncorrectable OTP ECC error, abort OTP read\n"); in iwl_read_otp_word()
248 iwl_set_bit(trans, CSR_OTP_GP_REG, in iwl_read_otp_word()
250 IWL_ERR(trans, "Correctable OTP ECC error, continue read\n"); in iwl_read_otp_word()
259 static bool iwl_is_otp_empty(struct iwl_trans *trans) in iwl_is_otp_empty() argument
266 if (!iwl_read_otp_word(trans, next_link_addr, &link_value)) { in iwl_is_otp_empty()
268 IWL_ERR(trans, "OTP is empty\n"); in iwl_is_otp_empty()
272 IWL_ERR(trans, "Unable to read first block of OTP list.\n"); in iwl_is_otp_empty()
289 static int iwl_find_otp_image(struct iwl_trans *trans, in iwl_find_otp_image() argument
297 iwl_set_otp_access_absolute(trans); in iwl_find_otp_image()
300 if (iwl_is_otp_empty(trans)) in iwl_find_otp_image()
314 IWL_DEBUG_EEPROM(trans->dev, "OTP blocks %d addr 0x%x\n", in iwl_find_otp_image()
316 if (iwl_read_otp_word(trans, next_link_addr, &link_value)) in iwl_find_otp_image()
331 } while (usedblocks <= trans->trans_cfg->base_params->max_ll_items); in iwl_find_otp_image()
334 IWL_DEBUG_EEPROM(trans->dev, "OTP has no valid blocks\n"); in iwl_find_otp_image()
346 int iwl_read_eeprom(struct iwl_trans *trans, u8 **eeprom, size_t *eeprom_size) in iwl_read_eeprom() argument
349 u32 gp = iwl_read32(trans, CSR_EEPROM_GP); in iwl_read_eeprom()
360 nvm_is_otp = iwl_nvm_is_otp(trans); in iwl_read_eeprom()
364 sz = trans->trans_cfg->base_params->eeprom_size; in iwl_read_eeprom()
365 IWL_DEBUG_EEPROM(trans->dev, "NVM size = %d\n", sz); in iwl_read_eeprom()
371 ret = iwl_eeprom_verify_signature(trans, nvm_is_otp); in iwl_read_eeprom()
373 IWL_ERR(trans, "EEPROM not found, EEPROM_GP=0x%08x\n", gp); in iwl_read_eeprom()
378 ret = iwl_eeprom_acquire_semaphore(trans); in iwl_read_eeprom()
380 IWL_ERR(trans, "Failed to acquire EEPROM semaphore.\n"); in iwl_read_eeprom()
385 ret = iwl_init_otp_access(trans); in iwl_read_eeprom()
387 IWL_ERR(trans, "Failed to initialize OTP access.\n"); in iwl_read_eeprom()
391 iwl_write32(trans, CSR_EEPROM_GP, in iwl_read_eeprom()
392 iwl_read32(trans, CSR_EEPROM_GP) & in iwl_read_eeprom()
395 iwl_set_bit(trans, CSR_OTP_GP_REG, in iwl_read_eeprom()
399 if (!trans->trans_cfg->base_params->shadow_ram_support) { in iwl_read_eeprom()
400 ret = iwl_find_otp_image(trans, &validblockaddr); in iwl_read_eeprom()
408 ret = iwl_read_otp_word(trans, addr, &eeprom_data); in iwl_read_eeprom()
419 iwl_write32(trans, CSR_EEPROM_REG, in iwl_read_eeprom()
422 ret = iwl_poll_bit(trans, CSR_EEPROM_REG, in iwl_read_eeprom()
427 IWL_ERR(trans, in iwl_read_eeprom()
431 r = iwl_read32(trans, CSR_EEPROM_REG); in iwl_read_eeprom()
436 IWL_DEBUG_EEPROM(trans->dev, "NVM Type: %s\n", in iwl_read_eeprom()
439 iwl_eeprom_release_semaphore(trans); in iwl_read_eeprom()
446 iwl_eeprom_release_semaphore(trans); in iwl_read_eeprom()