Commit 6e6ebf4b authored by Wey-Yi Guy's avatar Wey-Yi Guy

iwlwifi: remember the last uCode sysassert error code

When sysassert happen, uCode will report the error code,
driver dump the information to dmesg. Here also remember
the last error code for future reference.
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
parent cf6da94a
...@@ -1278,7 +1278,6 @@ static void iwl_irq_tasklet_legacy(struct iwl_priv *priv) ...@@ -1278,7 +1278,6 @@ static void iwl_irq_tasklet_legacy(struct iwl_priv *priv)
IWL_ERR(priv, "Microcode SW error detected. " IWL_ERR(priv, "Microcode SW error detected. "
" Restarting 0x%X.\n", inta); " Restarting 0x%X.\n", inta);
priv->isr_stats.sw++; priv->isr_stats.sw++;
priv->isr_stats.sw_err = inta;
iwl_irq_handle_error(priv); iwl_irq_handle_error(priv);
handled |= CSR_INT_BIT_SW_ERR; handled |= CSR_INT_BIT_SW_ERR;
} }
...@@ -1459,7 +1458,6 @@ static void iwl_irq_tasklet(struct iwl_priv *priv) ...@@ -1459,7 +1458,6 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
IWL_ERR(priv, "Microcode SW error detected. " IWL_ERR(priv, "Microcode SW error detected. "
" Restarting 0x%X.\n", inta); " Restarting 0x%X.\n", inta);
priv->isr_stats.sw++; priv->isr_stats.sw++;
priv->isr_stats.sw_err = inta;
iwl_irq_handle_error(priv); iwl_irq_handle_error(priv);
handled |= CSR_INT_BIT_SW_ERR; handled |= CSR_INT_BIT_SW_ERR;
} }
...@@ -2467,6 +2465,7 @@ void iwl_dump_nic_error_log(struct iwl_priv *priv) ...@@ -2467,6 +2465,7 @@ void iwl_dump_nic_error_log(struct iwl_priv *priv)
} }
desc = iwl_read_targ_mem(priv, base + 1 * sizeof(u32)); desc = iwl_read_targ_mem(priv, base + 1 * sizeof(u32));
priv->isr_stats.err_code = desc;
pc = iwl_read_targ_mem(priv, base + 2 * sizeof(u32)); pc = iwl_read_targ_mem(priv, base + 2 * sizeof(u32));
blink1 = iwl_read_targ_mem(priv, base + 3 * sizeof(u32)); blink1 = iwl_read_targ_mem(priv, base + 3 * sizeof(u32));
blink2 = iwl_read_targ_mem(priv, base + 4 * sizeof(u32)); blink2 = iwl_read_targ_mem(priv, base + 4 * sizeof(u32));
......
...@@ -575,10 +575,10 @@ static ssize_t iwl_dbgfs_interrupt_read(struct file *file, ...@@ -575,10 +575,10 @@ static ssize_t iwl_dbgfs_interrupt_read(struct file *file,
priv->isr_stats.hw); priv->isr_stats.hw);
pos += scnprintf(buf + pos, bufsz - pos, "SW Error:\t\t\t %u\n", pos += scnprintf(buf + pos, bufsz - pos, "SW Error:\t\t\t %u\n",
priv->isr_stats.sw); priv->isr_stats.sw);
if (priv->isr_stats.sw > 0) { if (priv->isr_stats.sw || priv->isr_stats.hw) {
pos += scnprintf(buf + pos, bufsz - pos, pos += scnprintf(buf + pos, bufsz - pos,
"\tLast Restarting Code: 0x%X\n", "\tLast Restarting Code: 0x%X\n",
priv->isr_stats.sw_err); priv->isr_stats.err_code);
} }
#ifdef CONFIG_IWLWIFI_DEBUG #ifdef CONFIG_IWLWIFI_DEBUG
pos += scnprintf(buf + pos, bufsz - pos, "Frame transmitted:\t\t %u\n", pos += scnprintf(buf + pos, bufsz - pos, "Frame transmitted:\t\t %u\n",
......
...@@ -945,7 +945,7 @@ enum iwl_pa_type { ...@@ -945,7 +945,7 @@ enum iwl_pa_type {
struct isr_statistics { struct isr_statistics {
u32 hw; u32 hw;
u32 sw; u32 sw;
u32 sw_err; u32 err_code;
u32 sch; u32 sch;
u32 alive; u32 alive;
u32 rfkill; u32 rfkill;
......
...@@ -1730,7 +1730,6 @@ static void iwl3945_irq_tasklet(struct iwl_priv *priv) ...@@ -1730,7 +1730,6 @@ static void iwl3945_irq_tasklet(struct iwl_priv *priv)
IWL_ERR(priv, "Microcode SW error detected. " IWL_ERR(priv, "Microcode SW error detected. "
"Restarting 0x%X.\n", inta); "Restarting 0x%X.\n", inta);
priv->isr_stats.sw++; priv->isr_stats.sw++;
priv->isr_stats.sw_err = inta;
iwl_irq_handle_error(priv); iwl_irq_handle_error(priv);
handled |= CSR_INT_BIT_SW_ERR; handled |= CSR_INT_BIT_SW_ERR;
} }
......
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