Lines Matching +full:x +full:- +full:-

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * Copyright (C) 2012-2014, 2018-2025 Intel Corporation
4 * Copyright (C) 2013-2014 Intel Mobile Communications GmbH
5 * Copyright (C) 2015-2017 Intel Deutschland GmbH
8 #include "iwl-drv.h"
12 #include "iwl-io.h"
13 #include "iwl-prph.h"
14 #include "iwl-csr.h"
27 * read with u32-sized accesses, any members with a different size
38 u32 data1; /* error-specific data */
39 u32 data2; /* error-specific data */
40 u32 data3; /* error-specific data */
79 * UMAC error struct - relevant starting from family 8000 chip.
82 * read with u32-sized accesses, any members with a different size
92 u32 data1; /* error-specific data */
93 u32 data2; /* error-specific data */
94 u32 data3; /* error-specific data */
119 struct iwl_trans *trans = fwrt->trans; in iwl_fwrt_dump_umac_error_log()
121 u32 base = fwrt->trans->dbg.umac_error_event_table; in iwl_fwrt_dump_umac_error_log()
125 !(fwrt->trans->dbg.error_event_table_tlv_status & in iwl_fwrt_dump_umac_error_log()
132 fwrt->dump.umac_err_id = table.error_id; in iwl_fwrt_dump_umac_error_log()
134 if (!iwl_fwrt_if_errorid_other_cpu(fwrt->dump.umac_err_id) && in iwl_fwrt_dump_umac_error_log()
135 !fwrt->trans->dbg.dump_file_name_ext_valid) { in iwl_fwrt_dump_umac_error_log()
136 fwrt->trans->dbg.dump_file_name_ext_valid = true; in iwl_fwrt_dump_umac_error_log()
137 snprintf(fwrt->trans->dbg.dump_file_name_ext, IWL_FW_INI_MAX_NAME, in iwl_fwrt_dump_umac_error_log()
138 "0x%x", fwrt->dump.umac_err_id); in iwl_fwrt_dump_umac_error_log()
143 IWL_ERR(trans, "Transport status: 0x%08lX, valid: %d\n", in iwl_fwrt_dump_umac_error_log()
144 fwrt->trans->status, table.valid); in iwl_fwrt_dump_umac_error_log()
154 IWL_ERR(fwrt, "0x%08X | %s\n", table.error_id, in iwl_fwrt_dump_umac_error_log()
156 IWL_ERR(fwrt, "0x%08X | umac branchlink1\n", table.blink1); in iwl_fwrt_dump_umac_error_log()
157 IWL_ERR(fwrt, "0x%08X | umac branchlink2\n", table.blink2); in iwl_fwrt_dump_umac_error_log()
158 IWL_ERR(fwrt, "0x%08X | umac interruptlink1\n", table.ilink1); in iwl_fwrt_dump_umac_error_log()
159 IWL_ERR(fwrt, "0x%08X | umac interruptlink2\n", table.ilink2); in iwl_fwrt_dump_umac_error_log()
160 IWL_ERR(fwrt, "0x%08X | umac data1\n", table.data1); in iwl_fwrt_dump_umac_error_log()
161 IWL_ERR(fwrt, "0x%08X | umac data2\n", table.data2); in iwl_fwrt_dump_umac_error_log()
162 IWL_ERR(fwrt, "0x%08X | umac data3\n", table.data3); in iwl_fwrt_dump_umac_error_log()
163 IWL_ERR(fwrt, "0x%08X | umac major\n", table.umac_major); in iwl_fwrt_dump_umac_error_log()
164 IWL_ERR(fwrt, "0x%08X | umac minor\n", table.umac_minor); in iwl_fwrt_dump_umac_error_log()
165 IWL_ERR(fwrt, "0x%08X | frame pointer\n", table.frame_pointer); in iwl_fwrt_dump_umac_error_log()
166 IWL_ERR(fwrt, "0x%08X | stack pointer\n", table.stack_pointer); in iwl_fwrt_dump_umac_error_log()
167 IWL_ERR(fwrt, "0x%08X | last host cmd\n", table.cmd_header); in iwl_fwrt_dump_umac_error_log()
168 IWL_ERR(fwrt, "0x%08X | isr status reg\n", table.nic_isr_pref); in iwl_fwrt_dump_umac_error_log()
173 struct iwl_trans *trans = fwrt->trans; in iwl_fwrt_dump_lmac_error_log()
175 u32 val, base = fwrt->trans->dbg.lmac_error_event_table[lmac_num]; in iwl_fwrt_dump_lmac_error_log()
177 if (fwrt->cur_fw_img == IWL_UCODE_INIT) { in iwl_fwrt_dump_lmac_error_log()
179 base = fwrt->fw->init_errlog_ptr; in iwl_fwrt_dump_lmac_error_log()
182 base = fwrt->fw->inst_errlog_ptr; in iwl_fwrt_dump_lmac_error_log()
187 "Not valid error log pointer 0x%08X for %s uCode\n", in iwl_fwrt_dump_lmac_error_log()
189 (fwrt->cur_fw_img == IWL_UCODE_INIT) in iwl_fwrt_dump_lmac_error_log()
214 fwrt->dump.lmac_err_id[lmac_num] = table.error_id; in iwl_fwrt_dump_lmac_error_log()
216 if (!iwl_fwrt_if_errorid_other_cpu(fwrt->dump.lmac_err_id[lmac_num]) && in iwl_fwrt_dump_lmac_error_log()
217 !fwrt->trans->dbg.dump_file_name_ext_valid) { in iwl_fwrt_dump_lmac_error_log()
218 fwrt->trans->dbg.dump_file_name_ext_valid = true; in iwl_fwrt_dump_lmac_error_log()
219 snprintf(fwrt->trans->dbg.dump_file_name_ext, IWL_FW_INI_MAX_NAME, in iwl_fwrt_dump_lmac_error_log()
220 "0x%x", fwrt->dump.lmac_err_id[lmac_num]); in iwl_fwrt_dump_lmac_error_log()
225 IWL_ERR(trans, "Transport status: 0x%08lX, valid: %d\n", in iwl_fwrt_dump_lmac_error_log()
226 fwrt->trans->status, table.valid); in iwl_fwrt_dump_lmac_error_log()
229 /* Do not change this output - scripts rely on it */ in iwl_fwrt_dump_lmac_error_log()
231 IWL_ERR(fwrt, "Loaded firmware version: %s\n", fwrt->fw->fw_version); in iwl_fwrt_dump_lmac_error_log()
233 IWL_ERR(fwrt, "0x%08X | %-28s\n", table.error_id, in iwl_fwrt_dump_lmac_error_log()
235 IWL_ERR(fwrt, "0x%08X | trm_hw_status0\n", table.trm_hw_status0); in iwl_fwrt_dump_lmac_error_log()
236 IWL_ERR(fwrt, "0x%08X | trm_hw_status1\n", table.trm_hw_status1); in iwl_fwrt_dump_lmac_error_log()
237 IWL_ERR(fwrt, "0x%08X | branchlink2\n", table.blink2); in iwl_fwrt_dump_lmac_error_log()
238 IWL_ERR(fwrt, "0x%08X | interruptlink1\n", table.ilink1); in iwl_fwrt_dump_lmac_error_log()
239 IWL_ERR(fwrt, "0x%08X | interruptlink2\n", table.ilink2); in iwl_fwrt_dump_lmac_error_log()
240 IWL_ERR(fwrt, "0x%08X | data1\n", table.data1); in iwl_fwrt_dump_lmac_error_log()
241 IWL_ERR(fwrt, "0x%08X | data2\n", table.data2); in iwl_fwrt_dump_lmac_error_log()
242 IWL_ERR(fwrt, "0x%08X | data3\n", table.data3); in iwl_fwrt_dump_lmac_error_log()
243 IWL_ERR(fwrt, "0x%08X | beacon time\n", table.bcon_time); in iwl_fwrt_dump_lmac_error_log()
244 IWL_ERR(fwrt, "0x%08X | tsf low\n", table.tsf_low); in iwl_fwrt_dump_lmac_error_log()
245 IWL_ERR(fwrt, "0x%08X | tsf hi\n", table.tsf_hi); in iwl_fwrt_dump_lmac_error_log()
246 IWL_ERR(fwrt, "0x%08X | time gp1\n", table.gp1); in iwl_fwrt_dump_lmac_error_log()
247 IWL_ERR(fwrt, "0x%08X | time gp2\n", table.gp2); in iwl_fwrt_dump_lmac_error_log()
248 IWL_ERR(fwrt, "0x%08X | uCode revision type\n", table.fw_rev_type); in iwl_fwrt_dump_lmac_error_log()
249 IWL_ERR(fwrt, "0x%08X | uCode version major\n", table.major); in iwl_fwrt_dump_lmac_error_log()
250 IWL_ERR(fwrt, "0x%08X | uCode version minor\n", table.minor); in iwl_fwrt_dump_lmac_error_log()
251 IWL_ERR(fwrt, "0x%08X | hw version\n", table.hw_ver); in iwl_fwrt_dump_lmac_error_log()
252 IWL_ERR(fwrt, "0x%08X | board version\n", table.brd_ver); in iwl_fwrt_dump_lmac_error_log()
253 IWL_ERR(fwrt, "0x%08X | hcmd\n", table.hcmd); in iwl_fwrt_dump_lmac_error_log()
254 IWL_ERR(fwrt, "0x%08X | isr0\n", table.isr0); in iwl_fwrt_dump_lmac_error_log()
255 IWL_ERR(fwrt, "0x%08X | isr1\n", table.isr1); in iwl_fwrt_dump_lmac_error_log()
256 IWL_ERR(fwrt, "0x%08X | isr2\n", table.isr2); in iwl_fwrt_dump_lmac_error_log()
257 IWL_ERR(fwrt, "0x%08X | isr3\n", table.isr3); in iwl_fwrt_dump_lmac_error_log()
258 IWL_ERR(fwrt, "0x%08X | isr4\n", table.isr4); in iwl_fwrt_dump_lmac_error_log()
259 IWL_ERR(fwrt, "0x%08X | last cmd Id\n", table.last_cmd_id); in iwl_fwrt_dump_lmac_error_log()
260 IWL_ERR(fwrt, "0x%08X | wait_event\n", table.wait_event); in iwl_fwrt_dump_lmac_error_log()
261 IWL_ERR(fwrt, "0x%08X | l2p_control\n", table.l2p_control); in iwl_fwrt_dump_lmac_error_log()
262 IWL_ERR(fwrt, "0x%08X | l2p_duration\n", table.l2p_duration); in iwl_fwrt_dump_lmac_error_log()
263 IWL_ERR(fwrt, "0x%08X | l2p_mhvalid\n", table.l2p_mhvalid); in iwl_fwrt_dump_lmac_error_log()
264 IWL_ERR(fwrt, "0x%08X | l2p_addr_match\n", table.l2p_addr_match); in iwl_fwrt_dump_lmac_error_log()
265 IWL_ERR(fwrt, "0x%08X | lmpm_pmg_sel\n", table.lmpm_pmg_sel); in iwl_fwrt_dump_lmac_error_log()
266 IWL_ERR(fwrt, "0x%08X | timestamp\n", table.u_timestamp); in iwl_fwrt_dump_lmac_error_log()
267 IWL_ERR(fwrt, "0x%08X | flow_handler\n", table.flow_handler); in iwl_fwrt_dump_lmac_error_log()
274 * read with u32-sized accesses, any members with a different size
296 struct iwl_trans *trans = fwrt->trans; in iwl_fwrt_dump_tcm_error_log()
298 u32 base = fwrt->trans->dbg.tcm_error_event_table[idx]; in iwl_fwrt_dump_tcm_error_log()
303 if (!base || !(fwrt->trans->dbg.error_event_table_tlv_status & flag)) in iwl_fwrt_dump_tcm_error_log()
309 fwrt->dump.tcm_err_id[idx] = table.error_id; in iwl_fwrt_dump_tcm_error_log()
311 if (!iwl_fwrt_if_errorid_other_cpu(fwrt->dump.tcm_err_id[idx]) && in iwl_fwrt_dump_tcm_error_log()
312 !fwrt->trans->dbg.dump_file_name_ext_valid) { in iwl_fwrt_dump_tcm_error_log()
313 fwrt->trans->dbg.dump_file_name_ext_valid = true; in iwl_fwrt_dump_tcm_error_log()
314 snprintf(fwrt->trans->dbg.dump_file_name_ext, IWL_FW_INI_MAX_NAME, in iwl_fwrt_dump_tcm_error_log()
315 "0x%x", fwrt->dump.tcm_err_id[idx]); in iwl_fwrt_dump_tcm_error_log()
319 IWL_ERR(fwrt, "0x%08X | error ID\n", table.error_id); in iwl_fwrt_dump_tcm_error_log()
320 IWL_ERR(fwrt, "0x%08X | tcm branchlink2\n", table.blink2); in iwl_fwrt_dump_tcm_error_log()
321 IWL_ERR(fwrt, "0x%08X | tcm interruptlink1\n", table.ilink1); in iwl_fwrt_dump_tcm_error_log()
322 IWL_ERR(fwrt, "0x%08X | tcm interruptlink2\n", table.ilink2); in iwl_fwrt_dump_tcm_error_log()
323 IWL_ERR(fwrt, "0x%08X | tcm data1\n", table.data1); in iwl_fwrt_dump_tcm_error_log()
324 IWL_ERR(fwrt, "0x%08X | tcm data2\n", table.data2); in iwl_fwrt_dump_tcm_error_log()
325 IWL_ERR(fwrt, "0x%08X | tcm data3\n", table.data3); in iwl_fwrt_dump_tcm_error_log()
326 IWL_ERR(fwrt, "0x%08X | tcm log PC\n", table.logpc); in iwl_fwrt_dump_tcm_error_log()
327 IWL_ERR(fwrt, "0x%08X | tcm frame pointer\n", table.frame_pointer); in iwl_fwrt_dump_tcm_error_log()
328 IWL_ERR(fwrt, "0x%08X | tcm stack pointer\n", table.stack_pointer); in iwl_fwrt_dump_tcm_error_log()
329 IWL_ERR(fwrt, "0x%08X | tcm msg ID\n", table.msgid); in iwl_fwrt_dump_tcm_error_log()
330 IWL_ERR(fwrt, "0x%08X | tcm ISR status\n", table.isr); in iwl_fwrt_dump_tcm_error_log()
332 IWL_ERR(fwrt, "0x%08X | tcm HW status[%d]\n", in iwl_fwrt_dump_tcm_error_log()
335 IWL_ERR(fwrt, "0x%08X | tcm SW status[%d]\n", in iwl_fwrt_dump_tcm_error_log()
343 * read with u32-sized accesses, any members with a different size
370 struct iwl_trans *trans = fwrt->trans; in iwl_fwrt_dump_rcm_error_log()
372 u32 base = fwrt->trans->dbg.rcm_error_event_table[idx]; in iwl_fwrt_dump_rcm_error_log()
376 if (!base || !(fwrt->trans->dbg.error_event_table_tlv_status & flag)) in iwl_fwrt_dump_rcm_error_log()
382 fwrt->dump.rcm_err_id[idx] = table.error_id; in iwl_fwrt_dump_rcm_error_log()
384 if (!iwl_fwrt_if_errorid_other_cpu(fwrt->dump.rcm_err_id[idx]) && in iwl_fwrt_dump_rcm_error_log()
385 !fwrt->trans->dbg.dump_file_name_ext_valid) { in iwl_fwrt_dump_rcm_error_log()
386 fwrt->trans->dbg.dump_file_name_ext_valid = true; in iwl_fwrt_dump_rcm_error_log()
387 snprintf(fwrt->trans->dbg.dump_file_name_ext, IWL_FW_INI_MAX_NAME, in iwl_fwrt_dump_rcm_error_log()
388 "0x%x", fwrt->dump.rcm_err_id[idx]); in iwl_fwrt_dump_rcm_error_log()
392 IWL_ERR(fwrt, "0x%08X | error ID\n", table.error_id); in iwl_fwrt_dump_rcm_error_log()
393 IWL_ERR(fwrt, "0x%08X | rcm branchlink2\n", table.blink2); in iwl_fwrt_dump_rcm_error_log()
394 IWL_ERR(fwrt, "0x%08X | rcm interruptlink1\n", table.ilink1); in iwl_fwrt_dump_rcm_error_log()
395 IWL_ERR(fwrt, "0x%08X | rcm interruptlink2\n", table.ilink2); in iwl_fwrt_dump_rcm_error_log()
396 IWL_ERR(fwrt, "0x%08X | rcm data1\n", table.data1); in iwl_fwrt_dump_rcm_error_log()
397 IWL_ERR(fwrt, "0x%08X | rcm data2\n", table.data2); in iwl_fwrt_dump_rcm_error_log()
398 IWL_ERR(fwrt, "0x%08X | rcm data3\n", table.data3); in iwl_fwrt_dump_rcm_error_log()
399 IWL_ERR(fwrt, "0x%08X | rcm log PC\n", table.logpc); in iwl_fwrt_dump_rcm_error_log()
400 IWL_ERR(fwrt, "0x%08X | rcm frame pointer\n", table.frame_pointer); in iwl_fwrt_dump_rcm_error_log()
401 IWL_ERR(fwrt, "0x%08X | rcm stack pointer\n", table.stack_pointer); in iwl_fwrt_dump_rcm_error_log()
402 IWL_ERR(fwrt, "0x%08X | rcm msg ID\n", table.msgid); in iwl_fwrt_dump_rcm_error_log()
403 IWL_ERR(fwrt, "0x%08X | rcm ISR status\n", table.isr); in iwl_fwrt_dump_rcm_error_log()
404 IWL_ERR(fwrt, "0x%08X | frame HW status\n", table.frame_hw_status); in iwl_fwrt_dump_rcm_error_log()
405 IWL_ERR(fwrt, "0x%08X | LMAC-to-RCM request mbox\n", in iwl_fwrt_dump_rcm_error_log()
407 IWL_ERR(fwrt, "0x%08X | RCM-to-LMAC request mbox\n", in iwl_fwrt_dump_rcm_error_log()
409 IWL_ERR(fwrt, "0x%08X | MAC header control\n", table.mh_ctl); in iwl_fwrt_dump_rcm_error_log()
410 IWL_ERR(fwrt, "0x%08X | MAC header addr1 low\n", table.mh_addr1_lo); in iwl_fwrt_dump_rcm_error_log()
411 IWL_ERR(fwrt, "0x%08X | MAC header info\n", table.mh_info); in iwl_fwrt_dump_rcm_error_log()
412 IWL_ERR(fwrt, "0x%08X | MAC header error\n", table.mh_err); in iwl_fwrt_dump_rcm_error_log()
417 struct iwl_trans *trans = fwrt->trans; in iwl_fwrt_dump_iml_error_log()
420 if (fwrt->trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_22000) { in iwl_fwrt_dump_iml_error_log()
423 } else if (fwrt->trans->mac_cfg->device_family >= in iwl_fwrt_dump_iml_error_log()
436 IWL_ERR(trans, "0x%04X | IML/ROM SYSASSERT\n", error >> 16); in iwl_fwrt_dump_iml_error_log()
438 IWL_ERR(fwrt, "0x%08X | IML/ROM error/state\n", error); in iwl_fwrt_dump_iml_error_log()
439 IWL_ERR(fwrt, "0x%08X | IML/ROM data1\n", in iwl_fwrt_dump_iml_error_log()
442 if (fwrt->trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_22000) in iwl_fwrt_dump_iml_error_log()
443 IWL_ERR(fwrt, "0x%08X | IML/ROM WFPM_AUTH_KEY_0\n", in iwl_fwrt_dump_iml_error_log()
447 #define FSEQ_REG(x) { .addr = (x), .str = #x, } argument
451 struct iwl_trans *trans = fwrt->trans; in iwl_fwrt_dump_fseq_regs()
481 IWL_ERR(fwrt, "0x%08X | %s\n", in iwl_fwrt_dump_fseq_regs()
493 if (!iwl_trans_device_enabled(fwrt->trans)) { in iwl_fwrt_dump_error_logs()
500 if (fwrt->trans->dbg.lmac_error_event_table[1]) in iwl_fwrt_dump_error_logs()
505 if (fwrt->trans->dbg.tcm_error_event_table[1]) in iwl_fwrt_dump_error_logs()
507 if (fwrt->trans->dbg.rcm_error_event_table[1]) in iwl_fwrt_dump_error_logs()
511 if (fwrt->trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_22000) { in iwl_fwrt_dump_error_logs()
512 pc_data = fwrt->trans->dbg.pc_data; in iwl_fwrt_dump_error_logs()
514 if (!iwl_trans_grab_nic_access(fwrt->trans)) in iwl_fwrt_dump_error_logs()
516 for (count = 0; count < fwrt->trans->dbg.num_pc; in iwl_fwrt_dump_error_logs()
518 IWL_ERR(fwrt, "%s: 0x%x\n", in iwl_fwrt_dump_error_logs()
519 pc_data->pc_name, in iwl_fwrt_dump_error_logs()
520 iwl_read_prph_no_grab(fwrt->trans, in iwl_fwrt_dump_error_logs()
521 pc_data->pc_address)); in iwl_fwrt_dump_error_logs()
522 iwl_trans_release_nic_access(fwrt->trans); in iwl_fwrt_dump_error_logs()
525 if (fwrt->trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) { in iwl_fwrt_dump_error_logs()
526 u32 scratch = iwl_read32(fwrt->trans, CSR_FUNC_SCRATCH); in iwl_fwrt_dump_error_logs()
529 IWL_ERR(fwrt, "0x%08X | Func Scratch\n", scratch); in iwl_fwrt_dump_error_logs()