Merge series "ASoC: SOF: Intel: fix to dsp state dump trace levels" from Kai Vehmanen <kai.vehmanen@linux.intel.com>:
Small series that addresses a problem where DSP status dump for a failure case, ends up being printed as as debug print. This is important information for any bug report. While at it, the series contains a few cleanups to related code. Ranjani Sridharan (3): ASoC: SOF: Intel: hda: remove duplicated status dump ASoC: SOF: modify the SOF_DBG flags ASoC: SOF: Intel: hda: fix the condition passed to sof_dev_dbg_or_err sound/soc/sof/debug.c | 2 +- sound/soc/sof/intel/byt.c | 2 +- sound/soc/sof/intel/hda-loader.c | 19 +++++++++++++------ sound/soc/sof/intel/hda.c | 10 ++++------ sound/soc/sof/loader.c | 4 ++-- sound/soc/sof/ops.c | 2 +- sound/soc/sof/sof-priv.h | 13 ++++++++----- 7 files changed, 30 insertions(+), 22 deletions(-) -- 2.29.2zero-sugar-mainline-defconfig
commit
84de089e77
|
@ -817,7 +817,7 @@ void snd_sof_handle_fw_exception(struct snd_sof_dev *sdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dump vital information to the logs */
|
/* dump vital information to the logs */
|
||||||
snd_sof_dsp_dbg_dump(sdev, SOF_DBG_REGS | SOF_DBG_MBOX);
|
snd_sof_dsp_dbg_dump(sdev, SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_MBOX);
|
||||||
snd_sof_ipc_dump(sdev);
|
snd_sof_ipc_dump(sdev);
|
||||||
snd_sof_trace_notify_for_error(sdev);
|
snd_sof_trace_notify_for_error(sdev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -336,7 +336,7 @@ static int byt_run(struct snd_sof_dev *sdev)
|
||||||
}
|
}
|
||||||
if (tries < 0) {
|
if (tries < 0) {
|
||||||
dev_err(sdev->dev, "error: unable to run DSP firmware\n");
|
dev_err(sdev->dev, "error: unable to run DSP firmware\n");
|
||||||
byt_dump(sdev, SOF_DBG_REGS | SOF_DBG_MBOX);
|
byt_dump(sdev, SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_MBOX);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,7 @@ static int cl_dsp_init(struct snd_sof_dev *sdev, int stream_tag)
|
||||||
struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
|
struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
|
||||||
const struct sof_intel_dsp_desc *chip = hda->desc;
|
const struct sof_intel_dsp_desc *chip = hda->desc;
|
||||||
unsigned int status;
|
unsigned int status;
|
||||||
|
u32 flags;
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -175,7 +176,13 @@ static int cl_dsp_init(struct snd_sof_dev *sdev, int stream_tag)
|
||||||
__func__);
|
__func__);
|
||||||
|
|
||||||
err:
|
err:
|
||||||
hda_dsp_dump(sdev, SOF_DBG_REGS | SOF_DBG_PCI | SOF_DBG_MBOX);
|
flags = SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_PCI | SOF_DBG_DUMP_MBOX;
|
||||||
|
|
||||||
|
/* force error log level after max boot attempts */
|
||||||
|
if (hda->boot_iteration == HDA_FW_BOOT_ATTEMPTS)
|
||||||
|
flags |= SOF_DBG_DUMP_FORCE_ERR_LEVEL;
|
||||||
|
|
||||||
|
hda_dsp_dump(sdev, flags);
|
||||||
hda_dsp_core_reset_power_down(sdev, chip->host_managed_cores_mask);
|
hda_dsp_core_reset_power_down(sdev, chip->host_managed_cores_mask);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -408,10 +415,13 @@ int hda_dsp_cl_boot_firmware(struct snd_sof_dev *sdev)
|
||||||
* should be ready for code loading and firmware boot
|
* should be ready for code loading and firmware boot
|
||||||
*/
|
*/
|
||||||
ret = cl_copy_fw(sdev, stream);
|
ret = cl_copy_fw(sdev, stream);
|
||||||
if (!ret)
|
if (!ret) {
|
||||||
dev_dbg(sdev->dev, "Firmware download successful, booting...\n");
|
dev_dbg(sdev->dev, "Firmware download successful, booting...\n");
|
||||||
else
|
} else {
|
||||||
|
hda_dsp_dump(sdev, SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_PCI | SOF_DBG_DUMP_MBOX |
|
||||||
|
SOF_DBG_DUMP_FORCE_ERR_LEVEL);
|
||||||
dev_err(sdev->dev, "error: load fw failed ret: %d\n", ret);
|
dev_err(sdev->dev, "error: load fw failed ret: %d\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
/*
|
/*
|
||||||
|
@ -435,9 +445,6 @@ cleanup:
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return chip_info->init_core_mask;
|
return chip_info->init_core_mask;
|
||||||
|
|
||||||
/* dump dsp registers and disable DSP upon error */
|
|
||||||
hda_dsp_dump(sdev, SOF_DBG_REGS | SOF_DBG_PCI | SOF_DBG_MBOX);
|
|
||||||
|
|
||||||
/* disable DSP */
|
/* disable DSP */
|
||||||
snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR,
|
snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR,
|
||||||
SOF_HDA_REG_PP_PPCTL,
|
SOF_HDA_REG_PP_PPCTL,
|
||||||
|
|
|
@ -416,9 +416,8 @@ void hda_dsp_dump_skl(struct snd_sof_dev *sdev, u32 flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dump the first 8 dwords representing the extended ROM status */
|
/* dump the first 8 dwords representing the extended ROM status */
|
||||||
static void hda_dsp_dump_ext_rom_status(struct snd_sof_dev *sdev)
|
static void hda_dsp_dump_ext_rom_status(struct snd_sof_dev *sdev, u32 flags)
|
||||||
{
|
{
|
||||||
struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
|
|
||||||
char msg[128];
|
char msg[128];
|
||||||
int len = 0;
|
int len = 0;
|
||||||
u32 value;
|
u32 value;
|
||||||
|
@ -429,14 +428,13 @@ static void hda_dsp_dump_ext_rom_status(struct snd_sof_dev *sdev)
|
||||||
len += snprintf(msg + len, sizeof(msg) - len, " 0x%x", value);
|
len += snprintf(msg + len, sizeof(msg) - len, " 0x%x", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
sof_dev_dbg_or_err(sdev->dev, hda->boot_iteration == HDA_FW_BOOT_ATTEMPTS,
|
sof_dev_dbg_or_err(sdev->dev, flags & SOF_DBG_DUMP_FORCE_ERR_LEVEL,
|
||||||
"extended rom status: %s", msg);
|
"extended rom status: %s", msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void hda_dsp_dump(struct snd_sof_dev *sdev, u32 flags)
|
void hda_dsp_dump(struct snd_sof_dev *sdev, u32 flags)
|
||||||
{
|
{
|
||||||
struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
|
|
||||||
struct sof_ipc_dsp_oops_xtensa xoops;
|
struct sof_ipc_dsp_oops_xtensa xoops;
|
||||||
struct sof_ipc_panic_info panic_info;
|
struct sof_ipc_panic_info panic_info;
|
||||||
u32 stack[HDA_DSP_STACK_DUMP_SIZE];
|
u32 stack[HDA_DSP_STACK_DUMP_SIZE];
|
||||||
|
@ -456,11 +454,11 @@ void hda_dsp_dump(struct snd_sof_dev *sdev, u32 flags)
|
||||||
snd_sof_get_status(sdev, status, panic, &xoops, &panic_info,
|
snd_sof_get_status(sdev, status, panic, &xoops, &panic_info,
|
||||||
stack, HDA_DSP_STACK_DUMP_SIZE);
|
stack, HDA_DSP_STACK_DUMP_SIZE);
|
||||||
} else {
|
} else {
|
||||||
sof_dev_dbg_or_err(sdev->dev, hda->boot_iteration == HDA_FW_BOOT_ATTEMPTS,
|
sof_dev_dbg_or_err(sdev->dev, flags & SOF_DBG_DUMP_FORCE_ERR_LEVEL,
|
||||||
"status = 0x%8.8x panic = 0x%8.8x\n",
|
"status = 0x%8.8x panic = 0x%8.8x\n",
|
||||||
status, panic);
|
status, panic);
|
||||||
|
|
||||||
hda_dsp_dump_ext_rom_status(sdev);
|
hda_dsp_dump_ext_rom_status(sdev, flags);
|
||||||
hda_dsp_get_status(sdev);
|
hda_dsp_get_status(sdev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -856,8 +856,8 @@ int snd_sof_run_firmware(struct snd_sof_dev *sdev)
|
||||||
msecs_to_jiffies(sdev->boot_timeout));
|
msecs_to_jiffies(sdev->boot_timeout));
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
dev_err(sdev->dev, "error: firmware boot failure\n");
|
dev_err(sdev->dev, "error: firmware boot failure\n");
|
||||||
snd_sof_dsp_dbg_dump(sdev, SOF_DBG_REGS | SOF_DBG_MBOX |
|
snd_sof_dsp_dbg_dump(sdev, SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_MBOX |
|
||||||
SOF_DBG_TEXT | SOF_DBG_PCI);
|
SOF_DBG_DUMP_TEXT | SOF_DBG_DUMP_PCI | SOF_DBG_DUMP_FORCE_ERR_LEVEL);
|
||||||
sdev->fw_state = SOF_FW_BOOT_FAILED;
|
sdev->fw_state = SOF_FW_BOOT_FAILED;
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,7 +157,7 @@ void snd_sof_dsp_panic(struct snd_sof_dev *sdev, u32 offset)
|
||||||
dev_dbg(sdev->dev, "panic: dsp_oops_offset %zu offset %d\n",
|
dev_dbg(sdev->dev, "panic: dsp_oops_offset %zu offset %d\n",
|
||||||
sdev->dsp_oops_offset, offset);
|
sdev->dsp_oops_offset, offset);
|
||||||
|
|
||||||
snd_sof_dsp_dbg_dump(sdev, SOF_DBG_REGS | SOF_DBG_MBOX);
|
snd_sof_dsp_dbg_dump(sdev, SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_MBOX);
|
||||||
snd_sof_trace_notify_for_error(sdev);
|
snd_sof_trace_notify_for_error(sdev);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(snd_sof_dsp_panic);
|
EXPORT_SYMBOL(snd_sof_dsp_panic);
|
||||||
|
|
|
@ -22,11 +22,14 @@
|
||||||
|
|
||||||
/* debug flags */
|
/* debug flags */
|
||||||
#define SOF_DBG_ENABLE_TRACE BIT(0)
|
#define SOF_DBG_ENABLE_TRACE BIT(0)
|
||||||
#define SOF_DBG_REGS BIT(1)
|
#define SOF_DBG_RETAIN_CTX BIT(1) /* prevent DSP D3 on FW exception */
|
||||||
#define SOF_DBG_MBOX BIT(2)
|
|
||||||
#define SOF_DBG_TEXT BIT(3)
|
#define SOF_DBG_DUMP_REGS BIT(0)
|
||||||
#define SOF_DBG_PCI BIT(4)
|
#define SOF_DBG_DUMP_MBOX BIT(1)
|
||||||
#define SOF_DBG_RETAIN_CTX BIT(5) /* prevent DSP D3 on FW exception */
|
#define SOF_DBG_DUMP_TEXT BIT(2)
|
||||||
|
#define SOF_DBG_DUMP_PCI BIT(3)
|
||||||
|
#define SOF_DBG_DUMP_FORCE_ERR_LEVEL BIT(4) /* used to dump dsp status with error log level */
|
||||||
|
|
||||||
|
|
||||||
/* global debug state set by SOF_DBG_ flags */
|
/* global debug state set by SOF_DBG_ flags */
|
||||||
extern int sof_core_debug;
|
extern int sof_core_debug;
|
||||||
|
|
Loading…
Reference in New Issue