Commit 3a9e204d authored by Liam Girdwood's avatar Liam Girdwood Committed by Mark Brown

ASoC: SOF: Intel: Add context data to any IPC timeout.

Helps with FW debug as it provides DSP IPC processing context.
Signed-off-by: default avatarLiam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20190927200538.660-13-pierre-louis.bossart@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent f567ff6c
...@@ -241,7 +241,7 @@ static void bdw_dump(struct snd_sof_dev *sdev, u32 flags) ...@@ -241,7 +241,7 @@ static void bdw_dump(struct snd_sof_dev *sdev, u32 flags)
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[BDW_STACK_DUMP_SIZE]; u32 stack[BDW_STACK_DUMP_SIZE];
u32 status, panic; u32 status, panic, imrx, imrd;
/* now try generic SOF status messages */ /* now try generic SOF status messages */
status = snd_sof_dsp_read(sdev, BDW_DSP_BAR, SHIM_IPCD); status = snd_sof_dsp_read(sdev, BDW_DSP_BAR, SHIM_IPCD);
...@@ -250,6 +250,26 @@ static void bdw_dump(struct snd_sof_dev *sdev, u32 flags) ...@@ -250,6 +250,26 @@ static void bdw_dump(struct snd_sof_dev *sdev, u32 flags)
BDW_STACK_DUMP_SIZE); BDW_STACK_DUMP_SIZE);
snd_sof_get_status(sdev, status, panic, &xoops, &panic_info, stack, snd_sof_get_status(sdev, status, panic, &xoops, &panic_info, stack,
BDW_STACK_DUMP_SIZE); BDW_STACK_DUMP_SIZE);
/* provide some context for firmware debug */
imrx = snd_sof_dsp_read(sdev, BDW_DSP_BAR, SHIM_IMRX);
imrd = snd_sof_dsp_read(sdev, BDW_DSP_BAR, SHIM_IMRD);
dev_err(sdev->dev,
"error: ipc host -> DSP: pending %s complete %s raw 0x%8.8x\n",
panic & SHIM_IPCX_BUSY ? "yes" : "no",
panic & SHIM_IPCX_DONE ? "yes" : "no", panic);
dev_err(sdev->dev,
"error: mask host: pending %s complete %s raw 0x%8.8x\n",
imrx & SHIM_IMRX_BUSY ? "yes" : "no",
imrx & SHIM_IMRX_DONE ? "yes" : "no", imrx);
dev_err(sdev->dev,
"error: ipc DSP -> host: pending %s complete %s raw 0x%8.8x\n",
status & SHIM_IPCD_BUSY ? "yes" : "no",
status & SHIM_IPCD_DONE ? "yes" : "no", status);
dev_err(sdev->dev,
"error: mask DSP: pending %s complete %s raw 0x%8.8x\n",
imrd & SHIM_IMRD_BUSY ? "yes" : "no",
imrd & SHIM_IMRD_DONE ? "yes" : "no", imrd);
} }
/* /*
......
...@@ -139,7 +139,7 @@ static void byt_dump(struct snd_sof_dev *sdev, u32 flags) ...@@ -139,7 +139,7 @@ static void byt_dump(struct snd_sof_dev *sdev, u32 flags)
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[BYT_STACK_DUMP_SIZE]; u32 stack[BYT_STACK_DUMP_SIZE];
u32 status, panic; u32 status, panic, imrd, imrx;
/* now try generic SOF status messages */ /* now try generic SOF status messages */
status = snd_sof_dsp_read(sdev, BYT_DSP_BAR, SHIM_IPCD); status = snd_sof_dsp_read(sdev, BYT_DSP_BAR, SHIM_IPCD);
...@@ -148,6 +148,27 @@ static void byt_dump(struct snd_sof_dev *sdev, u32 flags) ...@@ -148,6 +148,27 @@ static void byt_dump(struct snd_sof_dev *sdev, u32 flags)
BYT_STACK_DUMP_SIZE); BYT_STACK_DUMP_SIZE);
snd_sof_get_status(sdev, status, panic, &xoops, &panic_info, stack, snd_sof_get_status(sdev, status, panic, &xoops, &panic_info, stack,
BYT_STACK_DUMP_SIZE); BYT_STACK_DUMP_SIZE);
/* provide some context for firmware debug */
imrx = snd_sof_dsp_read(sdev, BYT_DSP_BAR, SHIM_IMRX);
imrd = snd_sof_dsp_read(sdev, BYT_DSP_BAR, SHIM_IMRD);
dev_err(sdev->dev,
"error: ipc host -> DSP: pending %s complete %s raw 0x%8.8x\n",
panic & SHIM_IPCX_BUSY ? "yes" : "no",
panic & SHIM_IPCX_DONE ? "yes" : "no", panic);
dev_err(sdev->dev,
"error: mask host: pending %s complete %s raw 0x%8.8x\n",
imrx & SHIM_IMRX_BUSY ? "yes" : "no",
imrx & SHIM_IMRX_DONE ? "yes" : "no", imrx);
dev_err(sdev->dev,
"error: ipc DSP -> host: pending %s complete %s raw 0x%8.8x\n",
status & SHIM_IPCD_BUSY ? "yes" : "no",
status & SHIM_IPCD_DONE ? "yes" : "no", status);
dev_err(sdev->dev,
"error: mask DSP: pending %s complete %s raw 0x%8.8x\n",
imrd & SHIM_IMRD_BUSY ? "yes" : "no",
imrd & SHIM_IMRD_DONE ? "yes" : "no", imrd);
} }
/* /*
......
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