Commit 50650547 authored by Wey-Yi Guy's avatar Wey-Yi Guy

iwlagn: more ucode error log info

No functional changes, just logging more information when uCode crash, also
change change the format.
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
parent 4ce7cc2b
...@@ -1622,10 +1622,7 @@ static const char *desc_lookup(u32 num) ...@@ -1622,10 +1622,7 @@ static const char *desc_lookup(u32 num)
void iwl_dump_nic_error_log(struct iwl_priv *priv) void iwl_dump_nic_error_log(struct iwl_priv *priv)
{ {
u32 data2, line; u32 base;
u32 desc, time, count, base, data1;
u32 blink1, blink2, ilink1, ilink2;
u32 pc, hcmd;
struct iwl_error_event_table table; struct iwl_error_event_table table;
base = priv->device_pointers.error_event_table; base = priv->device_pointers.error_event_table;
...@@ -1648,37 +1645,40 @@ void iwl_dump_nic_error_log(struct iwl_priv *priv) ...@@ -1648,37 +1645,40 @@ void iwl_dump_nic_error_log(struct iwl_priv *priv)
iwl_read_targ_mem_words(priv, base, &table, sizeof(table)); iwl_read_targ_mem_words(priv, base, &table, sizeof(table));
count = table.valid; if (ERROR_START_OFFSET <= table.valid * ERROR_ELEM_SIZE) {
if (ERROR_START_OFFSET <= count * ERROR_ELEM_SIZE) {
IWL_ERR(priv, "Start IWL Error Log Dump:\n"); IWL_ERR(priv, "Start IWL Error Log Dump:\n");
IWL_ERR(priv, "Status: 0x%08lX, count: %d\n", IWL_ERR(priv, "Status: 0x%08lX, count: %d\n",
priv->status, count); priv->status, table.valid);
} }
desc = table.error_id; priv->isr_stats.err_code = table.error_id;
priv->isr_stats.err_code = desc;
pc = table.pc; trace_iwlwifi_dev_ucode_error(priv, table.error_id, table.tsf_low,
blink1 = table.blink1; table.data1, table.data2, table.line,
blink2 = table.blink2; table.blink1, table.blink2, table.ilink1,
ilink1 = table.ilink1; table.ilink2, table.bcon_time, table.gp1,
ilink2 = table.ilink2; table.gp2, table.gp3, table.ucode_ver,
data1 = table.data1; table.hw_ver, table.brd_ver);
data2 = table.data2; IWL_ERR(priv, "0x%08X | %-28s\n", table.error_id,
line = table.line; desc_lookup(table.error_id));
time = table.tsf_low; IWL_ERR(priv, "0x%08X | uPc\n", table.pc);
hcmd = table.hcmd; IWL_ERR(priv, "0x%08X | branchlink1\n", table.blink1);
IWL_ERR(priv, "0x%08X | branchlink2\n", table.blink2);
trace_iwlwifi_dev_ucode_error(priv, desc, time, data1, data2, line, IWL_ERR(priv, "0x%08X | interruptlink1\n", table.ilink1);
blink1, blink2, ilink1, ilink2); IWL_ERR(priv, "0x%08X | interruptlink2\n", table.ilink2);
IWL_ERR(priv, "0x%08X | data1\n", table.data1);
IWL_ERR(priv, "Desc Time " IWL_ERR(priv, "0x%08X | data2\n", table.data2);
"data1 data2 line\n"); IWL_ERR(priv, "0x%08X | line\n", table.line);
IWL_ERR(priv, "%-28s (0x%04X) %010u 0x%08X 0x%08X %u\n", IWL_ERR(priv, "0x%08X | beacon time\n", table.bcon_time);
desc_lookup(desc), desc, time, data1, data2, line); IWL_ERR(priv, "0x%08X | tsf low\n", table.tsf_low);
IWL_ERR(priv, "pc blink1 blink2 ilink1 ilink2 hcmd\n"); IWL_ERR(priv, "0x%08X | tsf hi\n", table.tsf_hi);
IWL_ERR(priv, "0x%05X 0x%05X 0x%05X 0x%05X 0x%05X 0x%05X\n", IWL_ERR(priv, "0x%08X | time gp1\n", table.gp1);
pc, blink1, blink2, ilink1, ilink2, hcmd); IWL_ERR(priv, "0x%08X | time gp2\n", table.gp2);
IWL_ERR(priv, "0x%08X | time gp3\n", table.gp3);
IWL_ERR(priv, "0x%08X | uCode version\n", table.ucode_ver);
IWL_ERR(priv, "0x%08X | hw version\n", table.hw_ver);
IWL_ERR(priv, "0x%08X | board version\n", table.brd_ver);
IWL_ERR(priv, "0x%08X | hcmd\n", table.hcmd);
} }
#define EVENT_START_OFFSET (4 * sizeof(u32)) #define EVENT_START_OFFSET (4 * sizeof(u32))
......
...@@ -209,15 +209,18 @@ TRACE_EVENT(iwlwifi_dev_tx, ...@@ -209,15 +209,18 @@ TRACE_EVENT(iwlwifi_dev_tx,
); );
TRACE_EVENT(iwlwifi_dev_ucode_error, TRACE_EVENT(iwlwifi_dev_ucode_error,
TP_PROTO(struct iwl_priv *priv, u32 desc, u32 time, TP_PROTO(struct iwl_priv *priv, u32 desc, u32 tsf_low,
u32 data1, u32 data2, u32 line, u32 blink1, u32 data1, u32 data2, u32 line, u32 blink1,
u32 blink2, u32 ilink1, u32 ilink2), u32 blink2, u32 ilink1, u32 ilink2, u32 bcon_time,
TP_ARGS(priv, desc, time, data1, data2, line, u32 gp1, u32 gp2, u32 gp3, u32 ucode_ver, u32 hw_ver,
blink1, blink2, ilink1, ilink2), u32 brd_ver),
TP_ARGS(priv, desc, tsf_low, data1, data2, line,
blink1, blink2, ilink1, ilink2, bcon_time, gp1, gp2,
gp3, ucode_ver, hw_ver, brd_ver),
TP_STRUCT__entry( TP_STRUCT__entry(
PRIV_ENTRY PRIV_ENTRY
__field(u32, desc) __field(u32, desc)
__field(u32, time) __field(u32, tsf_low)
__field(u32, data1) __field(u32, data1)
__field(u32, data2) __field(u32, data2)
__field(u32, line) __field(u32, line)
...@@ -225,11 +228,18 @@ TRACE_EVENT(iwlwifi_dev_ucode_error, ...@@ -225,11 +228,18 @@ TRACE_EVENT(iwlwifi_dev_ucode_error,
__field(u32, blink2) __field(u32, blink2)
__field(u32, ilink1) __field(u32, ilink1)
__field(u32, ilink2) __field(u32, ilink2)
__field(u32, bcon_time)
__field(u32, gp1)
__field(u32, gp2)
__field(u32, gp3)
__field(u32, ucode_ver)
__field(u32, hw_ver)
__field(u32, brd_ver)
), ),
TP_fast_assign( TP_fast_assign(
PRIV_ASSIGN; PRIV_ASSIGN;
__entry->desc = desc; __entry->desc = desc;
__entry->time = time; __entry->tsf_low = tsf_low;
__entry->data1 = data1; __entry->data1 = data1;
__entry->data2 = data2; __entry->data2 = data2;
__entry->line = line; __entry->line = line;
...@@ -237,12 +247,25 @@ TRACE_EVENT(iwlwifi_dev_ucode_error, ...@@ -237,12 +247,25 @@ TRACE_EVENT(iwlwifi_dev_ucode_error,
__entry->blink2 = blink2; __entry->blink2 = blink2;
__entry->ilink1 = ilink1; __entry->ilink1 = ilink1;
__entry->ilink2 = ilink2; __entry->ilink2 = ilink2;
__entry->bcon_time = bcon_time;
__entry->gp1 = gp1;
__entry->gp2 = gp2;
__entry->gp3 = gp3;
__entry->ucode_ver = ucode_ver;
__entry->hw_ver = hw_ver;
__entry->brd_ver = brd_ver;
), ),
TP_printk("[%p] #%02d %010u data 0x%08X 0x%08X line %u, " TP_printk("[%p] #%02d %010u data 0x%08X 0x%08X line %u, "
"blink 0x%05X 0x%05X ilink 0x%05X 0x%05X", "blink 0x%05X 0x%05X ilink 0x%05X 0x%05X "
__entry->priv, __entry->desc, __entry->time, __entry->data1, "bcon_tm %010u gp 0x%08X 0x%08X 0x%08X uCode 0x%08X "
"hw 0x%08X brd 0x%08X",
__entry->priv, __entry->desc, __entry->tsf_low,
__entry->data1,
__entry->data2, __entry->line, __entry->blink1, __entry->data2, __entry->line, __entry->blink1,
__entry->blink2, __entry->ilink1, __entry->ilink2) __entry->blink2, __entry->ilink1, __entry->ilink2,
__entry->bcon_time, __entry->gp1, __entry->gp2,
__entry->gp3, __entry->ucode_ver, __entry->hw_ver,
__entry->brd_ver)
); );
TRACE_EVENT(iwlwifi_dev_ucode_event, TRACE_EVENT(iwlwifi_dev_ucode_event,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment