Lines Matching refs:fwrt

89 static void iwl_read_radio_regs(struct iwl_fw_runtime *fwrt,  in iwl_read_radio_regs()  argument
96 IWL_DEBUG_INFO(fwrt, "WRT radio registers dump\n"); in iwl_read_radio_regs()
98 if (!iwl_trans_grab_nic_access(fwrt->trans, &flags)) in iwl_read_radio_regs()
108 iwl_write_prph_no_grab(fwrt->trans, RSP_RADIO_CMD, rd_cmd); in iwl_read_radio_regs()
109 *pos = (u8)iwl_read_prph_no_grab(fwrt->trans, RSP_RADIO_RDDAT); in iwl_read_radio_regs()
116 iwl_trans_release_nic_access(fwrt->trans, &flags); in iwl_read_radio_regs()
119 static void iwl_fwrt_dump_rxf(struct iwl_fw_runtime *fwrt, in iwl_fwrt_dump_rxf() argument
142 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_rxf()
145 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_rxf()
148 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_rxf()
151 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_rxf()
154 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_rxf()
158 iwl_trans_write_prph(fwrt->trans, RXF_SET_FENCE_MODE + offset, 0x1); in iwl_fwrt_dump_rxf()
160 iwl_trans_write_prph(fwrt->trans, RXF_LD_WR2FENCE + offset, 0x1); in iwl_fwrt_dump_rxf()
162 iwl_trans_write_prph(fwrt->trans, in iwl_fwrt_dump_rxf()
168 fifo_data[i] = iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_rxf()
174 static void iwl_fwrt_dump_txf(struct iwl_fw_runtime *fwrt, in iwl_fwrt_dump_txf() argument
197 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_txf()
200 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_txf()
203 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_txf()
206 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_txf()
209 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_txf()
213 iwl_trans_write_prph(fwrt->trans, TXF_READ_MODIFY_ADDR + offset, in iwl_fwrt_dump_txf()
217 iwl_trans_read_prph(fwrt->trans, TXF_READ_MODIFY_DATA + offset); in iwl_fwrt_dump_txf()
222 fifo_data[i] = iwl_trans_read_prph(fwrt->trans, in iwl_fwrt_dump_txf()
228 static void iwl_fw_dump_rxf(struct iwl_fw_runtime *fwrt, in iwl_fw_dump_rxf() argument
231 struct iwl_fwrt_shared_mem_cfg *cfg = &fwrt->smem_cfg; in iwl_fw_dump_rxf()
234 IWL_DEBUG_INFO(fwrt, "WRT RX FIFO dump\n"); in iwl_fw_dump_rxf()
236 if (!iwl_trans_grab_nic_access(fwrt->trans, &flags)) in iwl_fw_dump_rxf()
239 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_RXF)) { in iwl_fw_dump_rxf()
241 iwl_fwrt_dump_rxf(fwrt, dump_data, in iwl_fw_dump_rxf()
244 iwl_fwrt_dump_rxf(fwrt, dump_data, cfg->rxfifo2_size, in iwl_fw_dump_rxf()
246 fwrt->trans->trans_cfg->umac_prph_offset, 1); in iwl_fw_dump_rxf()
248 if (fwrt->smem_cfg.num_lmacs > 1) in iwl_fw_dump_rxf()
249 iwl_fwrt_dump_rxf(fwrt, dump_data, in iwl_fw_dump_rxf()
254 iwl_trans_release_nic_access(fwrt->trans, &flags); in iwl_fw_dump_rxf()
257 static void iwl_fw_dump_txf(struct iwl_fw_runtime *fwrt, in iwl_fw_dump_txf() argument
261 struct iwl_fwrt_shared_mem_cfg *cfg = &fwrt->smem_cfg; in iwl_fw_dump_txf()
267 IWL_DEBUG_INFO(fwrt, "WRT TX FIFO dump\n"); in iwl_fw_dump_txf()
269 if (!iwl_trans_grab_nic_access(fwrt->trans, &flags)) in iwl_fw_dump_txf()
272 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_TXF)) { in iwl_fw_dump_txf()
274 for (i = 0; i < fwrt->smem_cfg.num_txfifo_entries; i++) { in iwl_fw_dump_txf()
276 iwl_trans_write_prph(fwrt->trans, TXF_LARC_NUM, i); in iwl_fw_dump_txf()
277 iwl_fwrt_dump_txf(fwrt, dump_data, in iwl_fw_dump_txf()
282 if (fwrt->smem_cfg.num_lmacs > 1) { in iwl_fw_dump_txf()
283 for (i = 0; i < fwrt->smem_cfg.num_txfifo_entries; in iwl_fw_dump_txf()
286 iwl_trans_write_prph(fwrt->trans, in iwl_fw_dump_txf()
289 iwl_fwrt_dump_txf(fwrt, dump_data, in iwl_fw_dump_txf()
297 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_INTERNAL_TXF) && in iwl_fw_dump_txf()
298 fw_has_capa(&fwrt->fw->ucode_capa, in iwl_fw_dump_txf()
302 i < ARRAY_SIZE(fwrt->smem_cfg.internal_txfifo_size); in iwl_fw_dump_txf()
306 fifo_len = fwrt->smem_cfg.internal_txfifo_size[i]; in iwl_fw_dump_txf()
321 iwl_trans_write_prph(fwrt->trans, TXF_CPU2_NUM, i + in iwl_fw_dump_txf()
322 fwrt->smem_cfg.num_txfifo_entries); in iwl_fw_dump_txf()
325 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fw_dump_txf()
328 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fw_dump_txf()
331 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fw_dump_txf()
334 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fw_dump_txf()
337 cpu_to_le32(iwl_trans_read_prph(fwrt->trans, in iwl_fw_dump_txf()
341 iwl_trans_write_prph(fwrt->trans, in iwl_fw_dump_txf()
346 iwl_trans_read_prph(fwrt->trans, in iwl_fw_dump_txf()
353 iwl_trans_read_prph(fwrt->trans, in iwl_fw_dump_txf()
359 iwl_trans_release_nic_access(fwrt->trans, &flags); in iwl_fw_dump_txf()
579 static void iwl_dump_prph(struct iwl_fw_runtime *fwrt, in iwl_dump_prph() argument
584 struct iwl_trans *trans = fwrt->trans; in iwl_dump_prph()
659 static void iwl_fw_get_prph_len(struct iwl_fw_runtime *fwrt, in iwl_fw_get_prph_len() argument
681 static void iwl_fw_prph_handler(struct iwl_fw_runtime *fwrt, void *ptr, in iwl_fw_prph_handler() argument
688 if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) { in iwl_fw_prph_handler()
690 handler(fwrt, iwl_prph_dump_addr_ax210, range_len, ptr); in iwl_fw_prph_handler()
691 } else if (fwrt->trans->trans_cfg->device_family >= in iwl_fw_prph_handler()
694 handler(fwrt, iwl_prph_dump_addr_22000, range_len, ptr); in iwl_fw_prph_handler()
697 handler(fwrt, iwl_prph_dump_addr_comm, range_len, ptr); in iwl_fw_prph_handler()
699 if (fwrt->trans->trans_cfg->mq_rx_supported) { in iwl_fw_prph_handler()
701 handler(fwrt, iwl_prph_dump_addr_9000, range_len, ptr); in iwl_fw_prph_handler()
706 static void iwl_fw_dump_mem(struct iwl_fw_runtime *fwrt, in iwl_fw_dump_mem() argument
720 iwl_trans_read_mem_bytes(fwrt->trans, ofs, dump_mem->data, len); in iwl_fw_dump_mem()
723 IWL_DEBUG_INFO(fwrt, "WRT memory dump. Type=%u\n", dump_mem->type); in iwl_fw_dump_mem()
730 static int iwl_fw_rxf_len(struct iwl_fw_runtime *fwrt, in iwl_fw_rxf_len() argument
738 if (!iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_RXF)) in iwl_fw_rxf_len()
754 static int iwl_fw_txf_len(struct iwl_fw_runtime *fwrt, in iwl_fw_txf_len() argument
762 if (!iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_TXF)) in iwl_fw_txf_len()
778 if (!(iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_INTERNAL_TXF) && in iwl_fw_txf_len()
779 fw_has_capa(&fwrt->fw->ucode_capa, in iwl_fw_txf_len()
790 static void iwl_dump_paging(struct iwl_fw_runtime *fwrt, in iwl_dump_paging() argument
795 IWL_DEBUG_INFO(fwrt, "WRT paging dump\n"); in iwl_dump_paging()
796 for (i = 1; i < fwrt->num_of_paging_blk + 1; i++) { in iwl_dump_paging()
799 fwrt->fw_paging_db[i].fw_paging_block; in iwl_dump_paging()
800 dma_addr_t addr = fwrt->fw_paging_db[i].fw_paging_phys; in iwl_dump_paging()
807 dma_sync_single_for_cpu(fwrt->trans->dev, addr, in iwl_dump_paging()
812 dma_sync_single_for_device(fwrt->trans->dev, addr, in iwl_dump_paging()
820 iwl_fw_error_dump_file(struct iwl_fw_runtime *fwrt, in iwl_fw_error_dump_file() argument
829 const struct iwl_fw_dbg_mem_seg_tlv *fw_mem = fwrt->fw->dbg.mem_tlv; in iwl_fw_error_dump_file()
830 struct iwl_fwrt_shared_mem_cfg *mem_cfg = &fwrt->smem_cfg; in iwl_fw_error_dump_file()
832 u32 smem_len = fwrt->fw->dbg.n_mem_tlv ? 0 : fwrt->trans->cfg->smem_len; in iwl_fw_error_dump_file()
833 u32 sram2_len = fwrt->fw->dbg.n_mem_tlv ? in iwl_fw_error_dump_file()
834 0 : fwrt->trans->cfg->dccm2_len; in iwl_fw_error_dump_file()
838 if (!fwrt->trans->cfg->dccm_offset || !fwrt->trans->cfg->dccm_len) { in iwl_fw_error_dump_file()
841 if (fwrt->cur_fw_img >= IWL_UCODE_TYPE_MAX) in iwl_fw_error_dump_file()
843 img = &fwrt->fw->img[fwrt->cur_fw_img]; in iwl_fw_error_dump_file()
847 sram_ofs = fwrt->trans->cfg->dccm_offset; in iwl_fw_error_dump_file()
848 sram_len = fwrt->trans->cfg->dccm_len; in iwl_fw_error_dump_file()
852 if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status)) { in iwl_fw_error_dump_file()
853 fifo_len = iwl_fw_rxf_len(fwrt, mem_cfg); in iwl_fw_error_dump_file()
854 fifo_len += iwl_fw_txf_len(fwrt, mem_cfg); in iwl_fw_error_dump_file()
857 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_PRPH)) in iwl_fw_error_dump_file()
858 iwl_fw_prph_handler(fwrt, &prph_len, in iwl_fw_error_dump_file()
861 if (fwrt->trans->trans_cfg->device_family == in iwl_fw_error_dump_file()
863 iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_RADIO_REG)) in iwl_fw_error_dump_file()
869 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_DEV_FW_INFO)) in iwl_fw_error_dump_file()
871 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_MEM_CFG)) in iwl_fw_error_dump_file()
874 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_MEM)) { in iwl_fw_error_dump_file()
879 if (!fwrt->fw->dbg.n_mem_tlv) in iwl_fw_error_dump_file()
886 for (i = 0; i < fwrt->fw->dbg.n_mem_tlv; i++) in iwl_fw_error_dump_file()
891 if (iwl_fw_dbg_is_paging_enabled(fwrt)) in iwl_fw_error_dump_file()
892 file_len += fwrt->num_of_paging_blk * in iwl_fw_error_dump_file()
897 if (iwl_fw_dbg_is_d3_debug_enabled(fwrt) && fwrt->dump.d3_debug_data) { in iwl_fw_error_dump_file()
899 fwrt->trans->cfg->d3_debug_data_length * 2; in iwl_fw_error_dump_file()
903 if (fwrt->dump.monitor_only) { in iwl_fw_error_dump_file()
908 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_ERROR_INFO) && in iwl_fw_error_dump_file()
909 fwrt->dump.desc) in iwl_fw_error_dump_file()
911 fwrt->dump.desc->len; in iwl_fw_error_dump_file()
922 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_DEV_FW_INFO)) { in iwl_fw_error_dump_file()
927 cpu_to_le32(CSR_HW_REV_TYPE(fwrt->trans->hw_rev)); in iwl_fw_error_dump_file()
929 cpu_to_le32(CSR_HW_REV_STEP(fwrt->trans->hw_rev)); in iwl_fw_error_dump_file()
930 memcpy(dump_info->fw_human_readable, fwrt->fw->human_readable, in iwl_fw_error_dump_file()
932 strncpy(dump_info->dev_human_readable, fwrt->trans->cfg->name, in iwl_fw_error_dump_file()
934 strncpy(dump_info->bus_human_readable, fwrt->dev->bus->name, in iwl_fw_error_dump_file()
936 dump_info->num_of_lmacs = fwrt->smem_cfg.num_lmacs; in iwl_fw_error_dump_file()
938 cpu_to_le32(fwrt->dump.lmac_err_id[0]); in iwl_fw_error_dump_file()
939 if (fwrt->smem_cfg.num_lmacs > 1) in iwl_fw_error_dump_file()
941 cpu_to_le32(fwrt->dump.lmac_err_id[1]); in iwl_fw_error_dump_file()
942 dump_info->umac_err_id = cpu_to_le32(fwrt->dump.umac_err_id); in iwl_fw_error_dump_file()
947 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_MEM_CFG)) { in iwl_fw_error_dump_file()
979 iwl_fw_dump_rxf(fwrt, &dump_data); in iwl_fw_error_dump_file()
980 iwl_fw_dump_txf(fwrt, &dump_data); in iwl_fw_error_dump_file()
984 iwl_read_radio_regs(fwrt, &dump_data); in iwl_fw_error_dump_file()
986 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_ERROR_INFO) && in iwl_fw_error_dump_file()
987 fwrt->dump.desc) { in iwl_fw_error_dump_file()
990 fwrt->dump.desc->len); in iwl_fw_error_dump_file()
992 memcpy(dump_trig, &fwrt->dump.desc->trig_desc, in iwl_fw_error_dump_file()
993 sizeof(*dump_trig) + fwrt->dump.desc->len); in iwl_fw_error_dump_file()
999 if (fwrt->dump.monitor_only) in iwl_fw_error_dump_file()
1002 if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_MEM)) { in iwl_fw_error_dump_file()
1004 fwrt->fw->dbg.mem_tlv; in iwl_fw_error_dump_file()
1006 if (!fwrt->fw->dbg.n_mem_tlv) in iwl_fw_error_dump_file()
1007 iwl_fw_dump_mem(fwrt, &dump_data, sram_len, sram_ofs, in iwl_fw_error_dump_file()
1010 for (i = 0; i < fwrt->fw->dbg.n_mem_tlv; i++) { in iwl_fw_error_dump_file()
1014 iwl_fw_dump_mem(fwrt, &dump_data, len, ofs, in iwl_fw_error_dump_file()
1018 iwl_fw_dump_mem(fwrt, &dump_data, smem_len, in iwl_fw_error_dump_file()
1019 fwrt->trans->cfg->smem_offset, in iwl_fw_error_dump_file()
1022 iwl_fw_dump_mem(fwrt, &dump_data, sram2_len, in iwl_fw_error_dump_file()
1023 fwrt->trans->cfg->dccm2_offset, in iwl_fw_error_dump_file()
1027 if (iwl_fw_dbg_is_d3_debug_enabled(fwrt) && fwrt->dump.d3_debug_data) { in iwl_fw_error_dump_file()
1028 u32 addr = fwrt->trans->cfg->d3_debug_data_base_addr; in iwl_fw_error_dump_file()
1029 size_t data_size = fwrt->trans->cfg->d3_debug_data_length; in iwl_fw_error_dump_file()
1034 memcpy(dump_data->data, fwrt->dump.d3_debug_data, data_size); in iwl_fw_error_dump_file()
1036 kfree(fwrt->dump.d3_debug_data); in iwl_fw_error_dump_file()
1037 fwrt->dump.d3_debug_data = NULL; in iwl_fw_error_dump_file()
1039 iwl_trans_read_mem_bytes(fwrt->trans, addr, in iwl_fw_error_dump_file()
1047 if (iwl_fw_dbg_is_paging_enabled(fwrt)) in iwl_fw_error_dump_file()
1048 iwl_dump_paging(fwrt, &dump_data); in iwl_fw_error_dump_file()
1051 iwl_fw_prph_handler(fwrt, &dump_data, iwl_dump_prph); in iwl_fw_error_dump_file()
1058 static int iwl_dump_ini_prph_iter(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_prph_iter() argument
1071 prph_val = iwl_read_prph(fwrt->trans, addr + i); in iwl_dump_ini_prph_iter()
1080 static int iwl_dump_ini_csr_iter(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_csr_iter() argument
1092 *val++ = cpu_to_le32(iwl_trans_read32(fwrt->trans, addr + i)); in iwl_dump_ini_csr_iter()
1097 static int iwl_dump_ini_dev_mem_iter(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_dev_mem_iter() argument
1106 iwl_trans_read_mem_bytes(fwrt->trans, addr, range->data, in iwl_dump_ini_dev_mem_iter()
1112 static int _iwl_dump_ini_paging_iter(struct iwl_fw_runtime *fwrt, in _iwl_dump_ini_paging_iter() argument
1119 struct page *page = fwrt->fw_paging_db[++idx].fw_paging_block; in _iwl_dump_ini_paging_iter()
1121 dma_addr_t addr = fwrt->fw_paging_db[idx].fw_paging_phys; in _iwl_dump_ini_paging_iter()
1122 u32 page_size = fwrt->fw_paging_db[idx].fw_paging_size; in _iwl_dump_ini_paging_iter()
1126 dma_sync_single_for_cpu(fwrt->trans->dev, addr, page_size, in _iwl_dump_ini_paging_iter()
1129 dma_sync_single_for_device(fwrt->trans->dev, addr, page_size, in _iwl_dump_ini_paging_iter()
1135 static int iwl_dump_ini_paging_iter(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_paging_iter() argument
1142 if (!fwrt->trans->trans_cfg->gen2) in iwl_dump_ini_paging_iter()
1143 return _iwl_dump_ini_paging_iter(fwrt, reg, range_ptr, idx); in iwl_dump_ini_paging_iter()
1146 page_size = fwrt->trans->init_dram.paging[idx].size; in iwl_dump_ini_paging_iter()
1150 memcpy(range->data, fwrt->trans->init_dram.paging[idx].block, in iwl_dump_ini_paging_iter()
1157 iwl_dump_ini_mon_dram_iter(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mon_dram_iter() argument
1162 u32 start_addr = iwl_read_umac_prph(fwrt->trans, in iwl_dump_ini_mon_dram_iter()
1169 range->range_data_size = cpu_to_le32(fwrt->trans->dbg.fw_mon[idx].size); in iwl_dump_ini_mon_dram_iter()
1171 memcpy(range->data, fwrt->trans->dbg.fw_mon[idx].block, in iwl_dump_ini_mon_dram_iter()
1172 fwrt->trans->dbg.fw_mon[idx].size); in iwl_dump_ini_mon_dram_iter()
1177 static bool iwl_ini_txf_iter(struct iwl_fw_runtime *fwrt, in iwl_ini_txf_iter() argument
1180 struct iwl_txf_iter_data *iter = &fwrt->dump.txf_iter_data; in iwl_ini_txf_iter()
1181 struct iwl_fwrt_shared_mem_cfg *cfg = &fwrt->smem_cfg; in iwl_ini_txf_iter()
1212 if (!fw_has_capa(&fwrt->fw->ucode_capa, in iwl_ini_txf_iter()
1226 static int iwl_dump_ini_txf_iter(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_txf_iter() argument
1231 struct iwl_txf_iter_data *iter = &fwrt->dump.txf_iter_data; in iwl_dump_ini_txf_iter()
1240 if (!iwl_ini_txf_iter(fwrt, reg, idx)) in iwl_dump_ini_txf_iter()
1243 if (!iwl_trans_grab_nic_access(fwrt->trans, &flags)) in iwl_dump_ini_txf_iter()
1250 iwl_write_prph_no_grab(fwrt->trans, TXF_LARC_NUM + offs, iter->fifo); in iwl_dump_ini_txf_iter()
1260 reg_dump->data = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, in iwl_dump_ini_txf_iter()
1272 iwl_write_prph_no_grab(fwrt->trans, TXF_READ_MODIFY_ADDR + offs, in iwl_dump_ini_txf_iter()
1276 iwl_read_prph_no_grab(fwrt->trans, TXF_READ_MODIFY_DATA + offs); in iwl_dump_ini_txf_iter()
1282 *data++ = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, addr)); in iwl_dump_ini_txf_iter()
1285 iwl_trans_release_nic_access(fwrt->trans, &flags); in iwl_dump_ini_txf_iter()
1296 static void iwl_ini_get_rxf_data(struct iwl_fw_runtime *fwrt, in iwl_ini_get_rxf_data() argument
1315 data->size = fwrt->smem_cfg.lmac[fifo_idx].rxfifo1_size; in iwl_ini_get_rxf_data()
1322 data->size = fwrt->smem_cfg.rxfifo2_size; in iwl_ini_get_rxf_data()
1332 static int iwl_dump_ini_rxf_iter(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_rxf_iter() argument
1346 iwl_ini_get_rxf_data(fwrt, reg, &rxf_data); in iwl_dump_ini_rxf_iter()
1350 if (!iwl_trans_grab_nic_access(fwrt->trans, &flags)) in iwl_dump_ini_rxf_iter()
1365 reg_dump->data = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, in iwl_dump_ini_rxf_iter()
1383 iwl_write_prph_no_grab(fwrt->trans, RXF_SET_FENCE_MODE + offs, 0x1); in iwl_dump_ini_rxf_iter()
1385 iwl_write_prph_no_grab(fwrt->trans, RXF_LD_WR2FENCE + offs, 0x1); in iwl_dump_ini_rxf_iter()
1387 iwl_write_prph_no_grab(fwrt->trans, RXF_LD_FENCE_OFFSET_ADDR + offs, in iwl_dump_ini_rxf_iter()
1394 *data++ = cpu_to_le32(iwl_read_prph_no_grab(fwrt->trans, addr)); in iwl_dump_ini_rxf_iter()
1397 iwl_trans_release_nic_access(fwrt->trans, &flags); in iwl_dump_ini_rxf_iter()
1402 static void *iwl_dump_ini_mem_fill_header(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mem_fill_header() argument
1414 *iwl_dump_ini_mon_fill_header(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mon_fill_header() argument
1423 if (!iwl_trans_grab_nic_access(fwrt->trans, &flags)) { in iwl_dump_ini_mon_fill_header()
1424 IWL_ERR(fwrt, "Failed to get monitor header\n"); in iwl_dump_ini_mon_fill_header()
1428 write_ptr = iwl_read_prph_no_grab(fwrt->trans, write_ptr_addr); in iwl_dump_ini_mon_fill_header()
1429 cycle_cnt = iwl_read_prph_no_grab(fwrt->trans, cycle_cnt_addr); in iwl_dump_ini_mon_fill_header()
1431 iwl_trans_release_nic_access(fwrt->trans, &flags); in iwl_dump_ini_mon_fill_header()
1441 *iwl_dump_ini_mon_dram_fill_header(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mon_dram_fill_header() argument
1448 switch (fwrt->trans->trans_cfg->device_family) { in iwl_dump_ini_mon_dram_fill_header()
1457 IWL_ERR(fwrt, "Unsupported device family %d\n", in iwl_dump_ini_mon_dram_fill_header()
1458 fwrt->trans->trans_cfg->device_family); in iwl_dump_ini_mon_dram_fill_header()
1462 return iwl_dump_ini_mon_fill_header(fwrt, reg, mon_dump, write_ptr_addr, in iwl_dump_ini_mon_dram_fill_header()
1468 *iwl_dump_ini_mon_smem_fill_header(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mon_smem_fill_header() argument
1473 const struct iwl_cfg *cfg = fwrt->trans->cfg; in iwl_dump_ini_mon_smem_fill_header()
1475 if (fwrt->trans->trans_cfg->device_family != IWL_DEVICE_FAMILY_9000 && in iwl_dump_ini_mon_smem_fill_header()
1476 fwrt->trans->trans_cfg->device_family != IWL_DEVICE_FAMILY_22000) { in iwl_dump_ini_mon_smem_fill_header()
1477 IWL_ERR(fwrt, "Unsupported device family %d\n", in iwl_dump_ini_mon_smem_fill_header()
1478 fwrt->trans->trans_cfg->device_family); in iwl_dump_ini_mon_smem_fill_header()
1482 return iwl_dump_ini_mon_fill_header(fwrt, reg, mon_dump, in iwl_dump_ini_mon_smem_fill_header()
1490 static u32 iwl_dump_ini_mem_ranges(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mem_ranges() argument
1496 static u32 iwl_dump_ini_paging_ranges(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_paging_ranges() argument
1499 if (fwrt->trans->trans_cfg->gen2) in iwl_dump_ini_paging_ranges()
1500 return fwrt->trans->init_dram.paging_cnt; in iwl_dump_ini_paging_ranges()
1502 return fwrt->num_of_paging_blk; in iwl_dump_ini_paging_ranges()
1505 static u32 iwl_dump_ini_mon_dram_ranges(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mon_dram_ranges() argument
1511 static u32 iwl_dump_ini_txf_ranges(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_txf_ranges() argument
1516 while (iwl_ini_txf_iter(fwrt, reg, num_of_fifos)) in iwl_dump_ini_txf_ranges()
1522 static u32 iwl_dump_ini_rxf_ranges(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_rxf_ranges() argument
1531 static u32 iwl_dump_ini_mem_get_size(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mem_get_size() argument
1535 iwl_dump_ini_mem_ranges(fwrt, reg) * in iwl_dump_ini_mem_get_size()
1540 static u32 iwl_dump_ini_paging_get_size(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_paging_get_size() argument
1547 if (fwrt->trans->trans_cfg->gen2) { in iwl_dump_ini_paging_get_size()
1548 for (i = 0; i < iwl_dump_ini_paging_ranges(fwrt, reg); i++) in iwl_dump_ini_paging_get_size()
1550 fwrt->trans->init_dram.paging[i].size; in iwl_dump_ini_paging_get_size()
1552 for (i = 1; i <= iwl_dump_ini_paging_ranges(fwrt, reg); i++) in iwl_dump_ini_paging_get_size()
1554 fwrt->fw_paging_db[i].fw_paging_size; in iwl_dump_ini_paging_get_size()
1560 static u32 iwl_dump_ini_mon_dram_get_size(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mon_dram_get_size() argument
1566 if (fwrt->trans->dbg.num_blocks) in iwl_dump_ini_mon_dram_get_size()
1567 size += fwrt->trans->dbg.fw_mon[0].size; in iwl_dump_ini_mon_dram_get_size()
1572 static u32 iwl_dump_ini_mon_smem_get_size(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_mon_smem_get_size() argument
1576 iwl_dump_ini_mem_ranges(fwrt, reg) * in iwl_dump_ini_mon_smem_get_size()
1581 static u32 iwl_dump_ini_txf_get_size(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_txf_get_size() argument
1584 struct iwl_txf_iter_data *iter = &fwrt->dump.txf_iter_data; in iwl_dump_ini_txf_get_size()
1590 while (iwl_ini_txf_iter(fwrt, reg, size)) { in iwl_dump_ini_txf_get_size()
1602 static u32 iwl_dump_ini_rxf_get_size(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_rxf_get_size() argument
1614 iwl_ini_get_rxf_data(fwrt, reg, &rx_data); in iwl_dump_ini_rxf_get_size()
1630 u32 (*get_num_of_ranges)(struct iwl_fw_runtime *fwrt,
1632 u32 (*get_size)(struct iwl_fw_runtime *fwrt,
1634 void *(*fill_mem_hdr)(struct iwl_fw_runtime *fwrt,
1636 int (*fill_range)(struct iwl_fw_runtime *fwrt,
1652 static u32 iwl_dump_ini_mem(struct iwl_fw_runtime *fwrt, struct list_head *list, in iwl_dump_ini_mem() argument
1666 size = ops->get_size(fwrt, reg); in iwl_dump_ini_mem()
1680 IWL_DEBUG_FW(fwrt, "WRT: Collecting region: id=%d, type=%d\n", in iwl_dump_ini_mem()
1683 num_of_ranges = ops->get_num_of_ranges(fwrt, reg); in iwl_dump_ini_mem()
1692 range = ops->fill_mem_hdr(fwrt, reg, header); in iwl_dump_ini_mem()
1694 IWL_ERR(fwrt, in iwl_dump_ini_mem()
1701 int range_size = ops->fill_range(fwrt, reg, range, i); in iwl_dump_ini_mem()
1704 IWL_ERR(fwrt, in iwl_dump_ini_mem()
1722 static u32 iwl_dump_ini_info(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_info() argument
1747 cpu_to_le32(fwrt->trans->dbg.external_ini_cfg); in iwl_dump_ini_info()
1749 dump->ver_type = cpu_to_le32(fwrt->dump.fw_ver.type); in iwl_dump_ini_info()
1750 dump->ver_subtype = cpu_to_le32(fwrt->dump.fw_ver.subtype); in iwl_dump_ini_info()
1752 dump->hw_step = cpu_to_le32(CSR_HW_REV_STEP(fwrt->trans->hw_rev)); in iwl_dump_ini_info()
1753 dump->hw_type = cpu_to_le32(CSR_HW_REV_TYPE(fwrt->trans->hw_rev)); in iwl_dump_ini_info()
1756 cpu_to_le32(CSR_HW_RFID_FLAVOR(fwrt->trans->hw_rf_id)); in iwl_dump_ini_info()
1757 dump->rf_id_dash = cpu_to_le32(CSR_HW_RFID_DASH(fwrt->trans->hw_rf_id)); in iwl_dump_ini_info()
1758 dump->rf_id_step = cpu_to_le32(CSR_HW_RFID_STEP(fwrt->trans->hw_rf_id)); in iwl_dump_ini_info()
1759 dump->rf_id_type = cpu_to_le32(CSR_HW_RFID_TYPE(fwrt->trans->hw_rf_id)); in iwl_dump_ini_info()
1761 dump->lmac_major = cpu_to_le32(fwrt->dump.fw_ver.lmac_major); in iwl_dump_ini_info()
1762 dump->lmac_minor = cpu_to_le32(fwrt->dump.fw_ver.lmac_minor); in iwl_dump_ini_info()
1763 dump->umac_major = cpu_to_le32(fwrt->dump.fw_ver.umac_major); in iwl_dump_ini_info()
1764 dump->umac_minor = cpu_to_le32(fwrt->dump.fw_ver.umac_minor); in iwl_dump_ini_info()
1767 memcpy(dump->build_tag, fwrt->fw->human_readable, in iwl_dump_ini_info()
1771 memcpy(dump->img_name, fwrt->dump.img_name, sizeof(dump->img_name)); in iwl_dump_ini_info()
1775 memcpy(dump->internal_dbg_cfg_name, fwrt->dump.internal_dbg_cfg_name, in iwl_dump_ini_info()
1781 memcpy(dump->external_dbg_cfg_name, fwrt->dump.external_dbg_cfg_name, in iwl_dump_ini_info()
1864 static u32 iwl_dump_ini_trigger(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_trigger() argument
1875 if (WARN_ON(reg_id >= ARRAY_SIZE(fwrt->dump.active_regs))) in iwl_dump_ini_trigger()
1878 reg = fwrt->dump.active_regs[reg_id]; in iwl_dump_ini_trigger()
1880 IWL_WARN(fwrt, in iwl_dump_ini_trigger()
1894 size += iwl_dump_ini_mem(fwrt, list, reg, in iwl_dump_ini_trigger()
1899 size += iwl_dump_ini_info(fwrt, trigger, list); in iwl_dump_ini_trigger()
1904 static u32 iwl_dump_ini_file_gen(struct iwl_fw_runtime *fwrt, in iwl_dump_ini_file_gen() argument
1913 if (!iwl_fw_ini_trigger_on(fwrt, trig_id)) in iwl_dump_ini_file_gen()
1916 trigger = fwrt->dump.active_trigs[trig_id].trig; in iwl_dump_ini_file_gen()
1926 size = iwl_dump_ini_trigger(fwrt, trigger, list); in iwl_dump_ini_file_gen()
1941 static void iwl_fw_error_dump(struct iwl_fw_runtime *fwrt) in iwl_fw_error_dump() argument
1947 u32 dump_mask = fwrt->fw->dbg.dump_mask; in iwl_fw_error_dump()
1949 dump_file = iwl_fw_error_dump_file(fwrt, &fw_error_dump); in iwl_fw_error_dump()
1953 if (fwrt->dump.monitor_only) in iwl_fw_error_dump()
1956 fw_error_dump.trans_ptr = iwl_trans_dump_data(fwrt->trans, dump_mask); in iwl_fw_error_dump()
1977 dev_coredumpsg(fwrt->trans->dev, sg_dump_data, file_len, in iwl_fw_error_dump()
1984 iwl_fw_free_dump_desc(fwrt); in iwl_fw_error_dump()
1998 static void iwl_fw_error_ini_dump(struct iwl_fw_runtime *fwrt, u8 wk_idx) in iwl_fw_error_ini_dump() argument
2000 enum iwl_fw_ini_trigger_id trig_id = fwrt->dump.wks[wk_idx].ini_trig_id; in iwl_fw_error_ini_dump()
2005 file_len = iwl_dump_ini_file_gen(fwrt, trig_id, &dump_list); in iwl_fw_error_ini_dump()
2020 dev_coredumpsg(fwrt->trans->dev, sg_dump_data, file_len, in iwl_fw_error_ini_dump()
2026 fwrt->dump.wks[wk_idx].ini_trig_id = IWL_FW_TRIGGER_ID_INVALID; in iwl_fw_error_ini_dump()
2036 int iwl_fw_dbg_collect_desc(struct iwl_fw_runtime *fwrt, in iwl_fw_dbg_collect_desc() argument
2044 if (iwl_trans_dbg_ini_valid(fwrt->trans)) { in iwl_fw_dbg_collect_desc()
2045 ret = iwl_fw_dbg_ini_collect(fwrt, trig_type); in iwl_fw_dbg_collect_desc()
2047 iwl_fw_free_dump_desc(fwrt); in iwl_fw_dbg_collect_desc()
2055 if (test_and_set_bit(fwrt->dump.wks[0].idx, &fwrt->dump.active_wks)) in iwl_fw_dbg_collect_desc()
2058 if (WARN_ON(fwrt->dump.desc)) in iwl_fw_dbg_collect_desc()
2059 iwl_fw_free_dump_desc(fwrt); in iwl_fw_dbg_collect_desc()
2061 IWL_WARN(fwrt, "Collecting data: trigger %d fired.\n", in iwl_fw_dbg_collect_desc()
2064 fwrt->dump.desc = desc; in iwl_fw_dbg_collect_desc()
2065 fwrt->dump.monitor_only = monitor_only; in iwl_fw_dbg_collect_desc()
2067 schedule_delayed_work(&fwrt->dump.wks[0].wk, usecs_to_jiffies(delay)); in iwl_fw_dbg_collect_desc()
2073 int iwl_fw_dbg_error_collect(struct iwl_fw_runtime *fwrt, in iwl_fw_dbg_error_collect() argument
2079 if (!test_bit(STATUS_DEVICE_ENABLED, &fwrt->trans->status)) in iwl_fw_dbg_error_collect()
2089 ret = iwl_fw_dbg_collect_desc(fwrt, iwl_dump_error_desc, false, 0); in iwl_fw_dbg_error_collect()
2093 iwl_trans_sync_nmi(fwrt->trans); in iwl_fw_dbg_error_collect()
2099 int iwl_fw_dbg_collect(struct iwl_fw_runtime *fwrt, in iwl_fw_dbg_collect() argument
2115 IWL_WARN(fwrt, "Force restart: trigger %d fired.\n", in iwl_fw_dbg_collect()
2117 iwl_force_nmi(fwrt->trans); in iwl_fw_dbg_collect()
2137 return iwl_fw_dbg_collect_desc(fwrt, desc, monitor_only, delay); in iwl_fw_dbg_collect()
2141 int _iwl_fw_dbg_ini_collect(struct iwl_fw_runtime *fwrt, in _iwl_fw_dbg_ini_collect() argument
2148 if (WARN_ON(!iwl_fw_ini_trigger_on(fwrt, id))) in _iwl_fw_dbg_ini_collect()
2151 if (!iwl_fw_ini_trigger_on(fwrt, id)) { in _iwl_fw_dbg_ini_collect()
2152 IWL_WARN(fwrt, "WRT: Trigger %d is not active, aborting dump\n", in _iwl_fw_dbg_ini_collect()
2157 active = &fwrt->dump.active_trigs[id]; in _iwl_fw_dbg_ini_collect()
2166 IWL_WARN(fwrt, "WRT: Force restart: trigger %d fired.\n", id); in _iwl_fw_dbg_ini_collect()
2167 iwl_force_nmi(fwrt->trans); in _iwl_fw_dbg_ini_collect()
2175 if (fwrt->dump.active_wks == ~0UL) in _iwl_fw_dbg_ini_collect()
2178 idx = ffz(fwrt->dump.active_wks); in _iwl_fw_dbg_ini_collect()
2181 test_and_set_bit(fwrt->dump.wks[idx].idx, &fwrt->dump.active_wks)) in _iwl_fw_dbg_ini_collect()
2184 fwrt->dump.wks[idx].ini_trig_id = id; in _iwl_fw_dbg_ini_collect()
2186 IWL_WARN(fwrt, "WRT: Collecting data: ini trigger %d fired.\n", id); in _iwl_fw_dbg_ini_collect()
2188 schedule_delayed_work(&fwrt->dump.wks[idx].wk, usecs_to_jiffies(delay)); in _iwl_fw_dbg_ini_collect()
2194 int iwl_fw_dbg_ini_collect(struct iwl_fw_runtime *fwrt, u32 legacy_trigger_id) in iwl_fw_dbg_ini_collect() argument
2211 return _iwl_fw_dbg_ini_collect(fwrt, id); in iwl_fw_dbg_ini_collect()
2215 int iwl_fw_dbg_collect_trig(struct iwl_fw_runtime *fwrt, in iwl_fw_dbg_collect_trig() argument
2238 ret = iwl_fw_dbg_collect(fwrt, le32_to_cpu(trigger->id), buf, len, in iwl_fw_dbg_collect_trig()
2248 int iwl_fw_start_dbg_conf(struct iwl_fw_runtime *fwrt, u8 conf_id) in iwl_fw_start_dbg_conf() argument
2254 if (WARN_ONCE(conf_id >= ARRAY_SIZE(fwrt->fw->dbg.conf_tlv), in iwl_fw_start_dbg_conf()
2259 if ((!fwrt->fw->dbg.conf_tlv[conf_id] || in iwl_fw_start_dbg_conf()
2260 !fwrt->fw->dbg.conf_tlv[conf_id]->num_of_hcmds) && in iwl_fw_start_dbg_conf()
2264 if (!fwrt->fw->dbg.conf_tlv[conf_id]) in iwl_fw_start_dbg_conf()
2267 if (fwrt->dump.conf != FW_DBG_INVALID) in iwl_fw_start_dbg_conf()
2268 IWL_WARN(fwrt, "FW already configured (%d) - re-configuring\n", in iwl_fw_start_dbg_conf()
2269 fwrt->dump.conf); in iwl_fw_start_dbg_conf()
2272 ptr = (void *)&fwrt->fw->dbg.conf_tlv[conf_id]->hcmd; in iwl_fw_start_dbg_conf()
2273 for (i = 0; i < fwrt->fw->dbg.conf_tlv[conf_id]->num_of_hcmds; i++) { in iwl_fw_start_dbg_conf()
2281 ret = iwl_trans_send_cmd(fwrt->trans, &hcmd); in iwl_fw_start_dbg_conf()
2289 fwrt->dump.conf = conf_id; in iwl_fw_start_dbg_conf()
2298 static void iwl_fw_dbg_collect_sync(struct iwl_fw_runtime *fwrt, u8 wk_idx) in iwl_fw_dbg_collect_sync() argument
2302 if (!test_bit(wk_idx, &fwrt->dump.active_wks)) in iwl_fw_dbg_collect_sync()
2305 if (fwrt->ops && fwrt->ops->fw_running && in iwl_fw_dbg_collect_sync()
2306 !fwrt->ops->fw_running(fwrt->ops_ctx)) { in iwl_fw_dbg_collect_sync()
2307 IWL_ERR(fwrt, "Firmware not running - cannot dump error\n"); in iwl_fw_dbg_collect_sync()
2308 iwl_fw_free_dump_desc(fwrt); in iwl_fw_dbg_collect_sync()
2313 if (test_bit(STATUS_TRANS_DEAD, &fwrt->trans->status)) { in iwl_fw_dbg_collect_sync()
2314 IWL_ERR(fwrt, "Skip fw error dump since bus is dead\n"); in iwl_fw_dbg_collect_sync()
2318 if (iwl_fw_dbg_stop_restart_recording(fwrt, &params, true)) { in iwl_fw_dbg_collect_sync()
2319 IWL_ERR(fwrt, "Failed to stop DBGC recording, aborting dump\n"); in iwl_fw_dbg_collect_sync()
2323 IWL_DEBUG_FW_INFO(fwrt, "WRT: Data collection start\n"); in iwl_fw_dbg_collect_sync()
2324 if (iwl_trans_dbg_ini_valid(fwrt->trans)) in iwl_fw_dbg_collect_sync()
2325 iwl_fw_error_ini_dump(fwrt, wk_idx); in iwl_fw_dbg_collect_sync()
2327 iwl_fw_error_dump(fwrt); in iwl_fw_dbg_collect_sync()
2328 IWL_DEBUG_FW_INFO(fwrt, "WRT: Data collection done\n"); in iwl_fw_dbg_collect_sync()
2330 iwl_fw_dbg_stop_restart_recording(fwrt, &params, false); in iwl_fw_dbg_collect_sync()
2333 clear_bit(wk_idx, &fwrt->dump.active_wks); in iwl_fw_dbg_collect_sync()
2338 struct iwl_fw_runtime *fwrt; in iwl_fw_error_dump_wk() local
2339 typeof(fwrt->dump.wks[0]) *wks; in iwl_fw_error_dump_wk()
2341 wks = container_of(work, typeof(fwrt->dump.wks[0]), wk.work); in iwl_fw_error_dump_wk()
2342 fwrt = container_of(wks, struct iwl_fw_runtime, dump.wks[wks->idx]); in iwl_fw_error_dump_wk()
2347 if (fwrt->ops && fwrt->ops->dump_start && in iwl_fw_error_dump_wk()
2348 fwrt->ops->dump_start(fwrt->ops_ctx)) in iwl_fw_error_dump_wk()
2351 iwl_fw_dbg_collect_sync(fwrt, wks->idx); in iwl_fw_error_dump_wk()
2353 if (fwrt->ops && fwrt->ops->dump_end) in iwl_fw_error_dump_wk()
2354 fwrt->ops->dump_end(fwrt->ops_ctx); in iwl_fw_error_dump_wk()
2357 void iwl_fw_dbg_read_d3_debug_data(struct iwl_fw_runtime *fwrt) in iwl_fw_dbg_read_d3_debug_data() argument
2359 const struct iwl_cfg *cfg = fwrt->trans->cfg; in iwl_fw_dbg_read_d3_debug_data()
2361 if (!iwl_fw_dbg_is_d3_debug_enabled(fwrt)) in iwl_fw_dbg_read_d3_debug_data()
2364 if (!fwrt->dump.d3_debug_data) { in iwl_fw_dbg_read_d3_debug_data()
2365 fwrt->dump.d3_debug_data = kmalloc(cfg->d3_debug_data_length, in iwl_fw_dbg_read_d3_debug_data()
2367 if (!fwrt->dump.d3_debug_data) { in iwl_fw_dbg_read_d3_debug_data()
2368 IWL_ERR(fwrt, in iwl_fw_dbg_read_d3_debug_data()
2375 iwl_trans_read_mem_bytes(fwrt->trans, cfg->d3_debug_data_base_addr, in iwl_fw_dbg_read_d3_debug_data()
2376 fwrt->dump.d3_debug_data, in iwl_fw_dbg_read_d3_debug_data()
2381 void iwl_fw_dbg_stop_sync(struct iwl_fw_runtime *fwrt) in iwl_fw_dbg_stop_sync() argument
2385 iwl_dbg_tlv_del_timers(fwrt->trans); in iwl_fw_dbg_stop_sync()
2387 iwl_fw_dbg_collect_sync(fwrt, i); in iwl_fw_dbg_stop_sync()
2389 iwl_fw_dbg_stop_restart_recording(fwrt, NULL, true); in iwl_fw_dbg_stop_sync()
2395 void iwl_fw_error_print_fseq_regs(struct iwl_fw_runtime *fwrt) in iwl_fw_error_print_fseq_regs() argument
2397 struct iwl_trans *trans = fwrt->trans; in iwl_fw_error_print_fseq_regs()
2421 IWL_ERR(fwrt, "Fseq Registers:\n"); in iwl_fw_error_print_fseq_regs()
2424 IWL_ERR(fwrt, "0x%08X | %s\n", in iwl_fw_error_print_fseq_regs()
2487 int iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt, in iwl_fw_dbg_stop_restart_recording() argument
2496 if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status) || in iwl_fw_dbg_stop_restart_recording()
2497 (!fwrt->trans->dbg.dest_tlv && in iwl_fw_dbg_stop_restart_recording()
2498 fwrt->trans->dbg.ini_dest == IWL_FW_INI_LOCATION_INVALID)) in iwl_fw_dbg_stop_restart_recording()
2501 if (fw_has_capa(&fwrt->fw->ucode_capa, in iwl_fw_dbg_stop_restart_recording()
2503 ret = iwl_fw_dbg_suspend_resume_hcmd(fwrt->trans, stop); in iwl_fw_dbg_stop_restart_recording()
2505 iwl_fw_dbg_stop_recording(fwrt->trans, params); in iwl_fw_dbg_stop_restart_recording()
2507 ret = iwl_fw_dbg_restart_recording(fwrt->trans, params); in iwl_fw_dbg_stop_restart_recording()
2511 fwrt->trans->dbg.rec_on = false; in iwl_fw_dbg_stop_restart_recording()
2513 iwl_fw_set_dbg_rec_on(fwrt); in iwl_fw_dbg_stop_restart_recording()