Lines Matching refs:fwrt

117 static void iwl_fwrt_dump_umac_error_log(struct iwl_fw_runtime *fwrt)
119 struct iwl_trans *trans = fwrt->trans;
121 u32 base = fwrt->trans->dbg.umac_error_event_table;
125 !(fwrt->trans->dbg.error_event_table_tlv_status &
132 fwrt->dump.umac_err_id = table.error_id;
134 if (!iwl_fwrt_if_errorid_other_cpu(fwrt->dump.umac_err_id) &&
135 !fwrt->trans->dbg.dump_file_name_ext_valid) {
136 fwrt->trans->dbg.dump_file_name_ext_valid = true;
137 snprintf(fwrt->trans->dbg.dump_file_name_ext, IWL_FW_INI_MAX_NAME,
138 "0x%x", fwrt->dump.umac_err_id);
144 fwrt->trans->status, table.valid);
150 IWL_ERR(fwrt, "PNVM data is missing, please install %s\n",
154 IWL_ERR(fwrt, "0x%08X | %s\n", table.error_id,
156 IWL_ERR(fwrt, "0x%08X | umac branchlink1\n", table.blink1);
157 IWL_ERR(fwrt, "0x%08X | umac branchlink2\n", table.blink2);
158 IWL_ERR(fwrt, "0x%08X | umac interruptlink1\n", table.ilink1);
159 IWL_ERR(fwrt, "0x%08X | umac interruptlink2\n", table.ilink2);
160 IWL_ERR(fwrt, "0x%08X | umac data1\n", table.data1);
161 IWL_ERR(fwrt, "0x%08X | umac data2\n", table.data2);
162 IWL_ERR(fwrt, "0x%08X | umac data3\n", table.data3);
163 IWL_ERR(fwrt, "0x%08X | umac major\n", table.umac_major);
164 IWL_ERR(fwrt, "0x%08X | umac minor\n", table.umac_minor);
165 IWL_ERR(fwrt, "0x%08X | frame pointer\n", table.frame_pointer);
166 IWL_ERR(fwrt, "0x%08X | stack pointer\n", table.stack_pointer);
167 IWL_ERR(fwrt, "0x%08X | last host cmd\n", table.cmd_header);
168 IWL_ERR(fwrt, "0x%08X | isr status reg\n", table.nic_isr_pref);
171 static void iwl_fwrt_dump_lmac_error_log(struct iwl_fw_runtime *fwrt, u8 lmac_num)
173 struct iwl_trans *trans = fwrt->trans;
175 u32 val, base = fwrt->trans->dbg.lmac_error_event_table[lmac_num];
177 if (fwrt->cur_fw_img == IWL_UCODE_INIT) {
179 base = fwrt->fw->init_errlog_ptr;
182 base = fwrt->fw->inst_errlog_ptr;
186 IWL_ERR(fwrt,
189 (fwrt->cur_fw_img == IWL_UCODE_INIT)
214 fwrt->dump.lmac_err_id[lmac_num] = table.error_id;
216 if (!iwl_fwrt_if_errorid_other_cpu(fwrt->dump.lmac_err_id[lmac_num]) &&
217 !fwrt->trans->dbg.dump_file_name_ext_valid) {
218 fwrt->trans->dbg.dump_file_name_ext_valid = true;
219 snprintf(fwrt->trans->dbg.dump_file_name_ext, IWL_FW_INI_MAX_NAME,
220 "0x%x", fwrt->dump.lmac_err_id[lmac_num]);
226 fwrt->trans->status, table.valid);
231 IWL_ERR(fwrt, "Loaded firmware version: %s\n", fwrt->fw->fw_version);
233 IWL_ERR(fwrt, "0x%08X | %-28s\n", table.error_id,
235 IWL_ERR(fwrt, "0x%08X | trm_hw_status0\n", table.trm_hw_status0);
236 IWL_ERR(fwrt, "0x%08X | trm_hw_status1\n", table.trm_hw_status1);
237 IWL_ERR(fwrt, "0x%08X | branchlink2\n", table.blink2);
238 IWL_ERR(fwrt, "0x%08X | interruptlink1\n", table.ilink1);
239 IWL_ERR(fwrt, "0x%08X | interruptlink2\n", table.ilink2);
240 IWL_ERR(fwrt, "0x%08X | data1\n", table.data1);
241 IWL_ERR(fwrt, "0x%08X | data2\n", table.data2);
242 IWL_ERR(fwrt, "0x%08X | data3\n", table.data3);
243 IWL_ERR(fwrt, "0x%08X | beacon time\n", table.bcon_time);
244 IWL_ERR(fwrt, "0x%08X | tsf low\n", table.tsf_low);
245 IWL_ERR(fwrt, "0x%08X | tsf hi\n", table.tsf_hi);
246 IWL_ERR(fwrt, "0x%08X | time gp1\n", table.gp1);
247 IWL_ERR(fwrt, "0x%08X | time gp2\n", table.gp2);
248 IWL_ERR(fwrt, "0x%08X | uCode revision type\n", table.fw_rev_type);
249 IWL_ERR(fwrt, "0x%08X | uCode version major\n", table.major);
250 IWL_ERR(fwrt, "0x%08X | uCode version minor\n", table.minor);
251 IWL_ERR(fwrt, "0x%08X | hw version\n", table.hw_ver);
252 IWL_ERR(fwrt, "0x%08X | board version\n", table.brd_ver);
253 IWL_ERR(fwrt, "0x%08X | hcmd\n", table.hcmd);
254 IWL_ERR(fwrt, "0x%08X | isr0\n", table.isr0);
255 IWL_ERR(fwrt, "0x%08X | isr1\n", table.isr1);
256 IWL_ERR(fwrt, "0x%08X | isr2\n", table.isr2);
257 IWL_ERR(fwrt, "0x%08X | isr3\n", table.isr3);
258 IWL_ERR(fwrt, "0x%08X | isr4\n", table.isr4);
259 IWL_ERR(fwrt, "0x%08X | last cmd Id\n", table.last_cmd_id);
260 IWL_ERR(fwrt, "0x%08X | wait_event\n", table.wait_event);
261 IWL_ERR(fwrt, "0x%08X | l2p_control\n", table.l2p_control);
262 IWL_ERR(fwrt, "0x%08X | l2p_duration\n", table.l2p_duration);
263 IWL_ERR(fwrt, "0x%08X | l2p_mhvalid\n", table.l2p_mhvalid);
264 IWL_ERR(fwrt, "0x%08X | l2p_addr_match\n", table.l2p_addr_match);
265 IWL_ERR(fwrt, "0x%08X | lmpm_pmg_sel\n", table.lmpm_pmg_sel);
266 IWL_ERR(fwrt, "0x%08X | timestamp\n", table.u_timestamp);
267 IWL_ERR(fwrt, "0x%08X | flow_handler\n", table.flow_handler);
294 static void iwl_fwrt_dump_tcm_error_log(struct iwl_fw_runtime *fwrt, int idx)
296 struct iwl_trans *trans = fwrt->trans;
298 u32 base = fwrt->trans->dbg.tcm_error_event_table[idx];
303 if (!base || !(fwrt->trans->dbg.error_event_table_tlv_status & flag))
309 fwrt->dump.tcm_err_id[idx] = table.error_id;
311 if (!iwl_fwrt_if_errorid_other_cpu(fwrt->dump.tcm_err_id[idx]) &&
312 !fwrt->trans->dbg.dump_file_name_ext_valid) {
313 fwrt->trans->dbg.dump_file_name_ext_valid = true;
314 snprintf(fwrt->trans->dbg.dump_file_name_ext, IWL_FW_INI_MAX_NAME,
315 "0x%x", fwrt->dump.tcm_err_id[idx]);
318 IWL_ERR(fwrt, "TCM%d status:\n", idx + 1);
319 IWL_ERR(fwrt, "0x%08X | error ID\n", table.error_id);
320 IWL_ERR(fwrt, "0x%08X | tcm branchlink2\n", table.blink2);
321 IWL_ERR(fwrt, "0x%08X | tcm interruptlink1\n", table.ilink1);
322 IWL_ERR(fwrt, "0x%08X | tcm interruptlink2\n", table.ilink2);
323 IWL_ERR(fwrt, "0x%08X | tcm data1\n", table.data1);
324 IWL_ERR(fwrt, "0x%08X | tcm data2\n", table.data2);
325 IWL_ERR(fwrt, "0x%08X | tcm data3\n", table.data3);
326 IWL_ERR(fwrt, "0x%08X | tcm log PC\n", table.logpc);
327 IWL_ERR(fwrt, "0x%08X | tcm frame pointer\n", table.frame_pointer);
328 IWL_ERR(fwrt, "0x%08X | tcm stack pointer\n", table.stack_pointer);
329 IWL_ERR(fwrt, "0x%08X | tcm msg ID\n", table.msgid);
330 IWL_ERR(fwrt, "0x%08X | tcm ISR status\n", table.isr);
332 IWL_ERR(fwrt, "0x%08X | tcm HW status[%d]\n",
335 IWL_ERR(fwrt, "0x%08X | tcm SW status[%d]\n",
368 static void iwl_fwrt_dump_rcm_error_log(struct iwl_fw_runtime *fwrt, int idx)
370 struct iwl_trans *trans = fwrt->trans;
372 u32 base = fwrt->trans->dbg.rcm_error_event_table[idx];
376 if (!base || !(fwrt->trans->dbg.error_event_table_tlv_status & flag))
382 fwrt->dump.rcm_err_id[idx] = table.error_id;
384 if (!iwl_fwrt_if_errorid_other_cpu(fwrt->dump.rcm_err_id[idx]) &&
385 !fwrt->trans->dbg.dump_file_name_ext_valid) {
386 fwrt->trans->dbg.dump_file_name_ext_valid = true;
387 snprintf(fwrt->trans->dbg.dump_file_name_ext, IWL_FW_INI_MAX_NAME,
388 "0x%x", fwrt->dump.rcm_err_id[idx]);
391 IWL_ERR(fwrt, "RCM%d status:\n", idx + 1);
392 IWL_ERR(fwrt, "0x%08X | error ID\n", table.error_id);
393 IWL_ERR(fwrt, "0x%08X | rcm branchlink2\n", table.blink2);
394 IWL_ERR(fwrt, "0x%08X | rcm interruptlink1\n", table.ilink1);
395 IWL_ERR(fwrt, "0x%08X | rcm interruptlink2\n", table.ilink2);
396 IWL_ERR(fwrt, "0x%08X | rcm data1\n", table.data1);
397 IWL_ERR(fwrt, "0x%08X | rcm data2\n", table.data2);
398 IWL_ERR(fwrt, "0x%08X | rcm data3\n", table.data3);
399 IWL_ERR(fwrt, "0x%08X | rcm log PC\n", table.logpc);
400 IWL_ERR(fwrt, "0x%08X | rcm frame pointer\n", table.frame_pointer);
401 IWL_ERR(fwrt, "0x%08X | rcm stack pointer\n", table.stack_pointer);
402 IWL_ERR(fwrt, "0x%08X | rcm msg ID\n", table.msgid);
403 IWL_ERR(fwrt, "0x%08X | rcm ISR status\n", table.isr);
404 IWL_ERR(fwrt, "0x%08X | frame HW status\n", table.frame_hw_status);
405 IWL_ERR(fwrt, "0x%08X | LMAC-to-RCM request mbox\n",
407 IWL_ERR(fwrt, "0x%08X | RCM-to-LMAC request mbox\n",
409 IWL_ERR(fwrt, "0x%08X | MAC header control\n", table.mh_ctl);
410 IWL_ERR(fwrt, "0x%08X | MAC header addr1 low\n", table.mh_addr1_lo);
411 IWL_ERR(fwrt, "0x%08X | MAC header info\n", table.mh_info);
412 IWL_ERR(fwrt, "0x%08X | MAC header error\n", table.mh_err);
415 static void iwl_fwrt_dump_iml_error_log(struct iwl_fw_runtime *fwrt)
417 struct iwl_trans *trans = fwrt->trans;
420 if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000) {
423 } else if (fwrt->trans->trans_cfg->device_family >=
438 IWL_ERR(fwrt, "0x%08X | IML/ROM error/state\n", error);
439 IWL_ERR(fwrt, "0x%08X | IML/ROM data1\n",
442 if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000)
443 IWL_ERR(fwrt, "0x%08X | IML/ROM WFPM_AUTH_KEY_0\n",
449 static void iwl_fwrt_dump_fseq_regs(struct iwl_fw_runtime *fwrt)
451 struct iwl_trans *trans = fwrt->trans;
478 IWL_ERR(fwrt, "Fseq Registers:\n");
481 IWL_ERR(fwrt, "0x%08X | %s\n",
488 void iwl_fwrt_dump_error_logs(struct iwl_fw_runtime *fwrt)
493 if (!test_bit(STATUS_DEVICE_ENABLED, &fwrt->trans->status)) {
494 IWL_ERR(fwrt,
499 iwl_fwrt_dump_lmac_error_log(fwrt, 0);
500 if (fwrt->trans->dbg.lmac_error_event_table[1])
501 iwl_fwrt_dump_lmac_error_log(fwrt, 1);
502 iwl_fwrt_dump_umac_error_log(fwrt);
503 iwl_fwrt_dump_tcm_error_log(fwrt, 0);
504 iwl_fwrt_dump_rcm_error_log(fwrt, 0);
505 if (fwrt->trans->dbg.tcm_error_event_table[1])
506 iwl_fwrt_dump_tcm_error_log(fwrt, 1);
507 if (fwrt->trans->dbg.rcm_error_event_table[1])
508 iwl_fwrt_dump_rcm_error_log(fwrt, 1);
509 iwl_fwrt_dump_iml_error_log(fwrt);
510 iwl_fwrt_dump_fseq_regs(fwrt);
511 if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000) {
512 pc_data = fwrt->trans->dbg.pc_data;
514 if (!iwl_trans_grab_nic_access(fwrt->trans))
516 for (count = 0; count < fwrt->trans->dbg.num_pc;
518 IWL_ERR(fwrt, "%s: 0x%x\n",
520 iwl_read_prph_no_grab(fwrt->trans,
522 iwl_trans_release_nic_access(fwrt->trans);
525 if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) {
526 u32 scratch = iwl_read32(fwrt->trans, CSR_FUNC_SCRATCH);
528 IWL_ERR(fwrt, "Function Scratch status:\n");
529 IWL_ERR(fwrt, "0x%08X | Func Scratch\n", scratch);