From 2ed6c89b173c10585f8fda78de48562a32e93a58 Mon Sep 17 00:00:00 2001 From: Janusz Jankowski Date: Thu, 16 May 2019 16:49:59 +0200 Subject: [PATCH] ASoC: SOF: Intel: hda: add IPC counters Read IPC counters provided by firmware and log them on IPC timeout to help debug. Signed-off-by: Janusz Jankowski --- sound/soc/sof/intel/hda.c | 9 +++++++++ sound/soc/sof/intel/hda.h | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c index c7d419d340c8ac..2455decaeace40 100644 --- a/sound/soc/sof/intel/hda.c +++ b/sound/soc/sof/intel/hda.c @@ -184,6 +184,7 @@ void hda_ipc_dump(struct snd_sof_dev *sdev) u32 hipcie; u32 hipct; u32 hipcctl; + u32 ipc_rec, ipc_proc; /* read IPC status */ hipcie = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCIE); @@ -195,6 +196,14 @@ void hda_ipc_dump(struct snd_sof_dev *sdev) dev_err(sdev->dev, "error: host status 0x%8.8x dsp status 0x%8.8x mask 0x%8.8x\n", hipcie, hipct, hipcctl); + + ipc_rec = snd_sof_dsp_read(sdev, HDA_DSP_BAR, + HDA_DSP_SRAM_REG_FW_IPC_RECEIVED_COUNT); + ipc_proc = snd_sof_dsp_read(sdev, HDA_DSP_BAR, + HDA_DSP_SRAM_REG_FW_IPC_PROCESSED_COUNT); + + dev_err(sdev->dev, "error: ipc received: %u processed: %u\n", + ipc_rec, ipc_proc); } static int hda_init(struct snd_sof_dev *sdev) diff --git a/sound/soc/sof/intel/hda.h b/sound/soc/sof/intel/hda.h index 455046612b9494..5523d667edb24d 100644 --- a/sound/soc/sof/intel/hda.h +++ b/sound/soc/sof/intel/hda.h @@ -153,7 +153,9 @@ /* FW and ROM share offset 4 */ #define HDA_DSP_SRAM_REG_FW_STATUS (HDA_DSP_MBOX_OFFSET + 0x4) #define HDA_DSP_SRAM_REG_FW_TRACEP (HDA_DSP_MBOX_OFFSET + 0x8) -#define HDA_DSP_SRAM_REG_FW_END (HDA_DSP_MBOX_OFFSET + 0xc) +#define HDA_DSP_SRAM_REG_FW_IPC_RECEIVED_COUNT (HDA_DSP_MBOX_OFFSET + 0xc) +#define HDA_DSP_SRAM_REG_FW_IPC_PROCESSED_COUNT (HDA_DSP_MBOX_OFFSET + 0x10) +#define HDA_DSP_SRAM_REG_FW_END (HDA_DSP_MBOX_OFFSET + 0x14) #define HDA_DSP_MBOX_UPLINK_OFFSET 0x81000