OSDN Git Service

ASoC: SOF: Intel: hda: add extended rom status dump to error log
authorRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Tue, 25 Aug 2020 23:50:38 +0000 (16:50 -0700)
committerMark Brown <broonie@kernel.org>
Wed, 26 Aug 2020 12:19:15 +0000 (13:19 +0100)
Dump the extended ROM status information to the error logs
to aid with remote support. The analysis of these logs requires
access to non-public technical information.

Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Jaska Uimonen <jaska.uimonen@intel.com>
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Link: https://lore.kernel.org/r/20200825235040.1586478-6-ranjani.sridharan@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda.c

index 0e8285b..de8e859 100644 (file)
@@ -37,6 +37,7 @@
 #include "shim.h"
 
 #define EXCEPT_MAX_HDR_SIZE    0x400
+#define HDA_EXT_ROM_STATUS_SIZE 8
 
 #if IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE)
 
@@ -414,6 +415,22 @@ void hda_dsp_dump_skl(struct snd_sof_dev *sdev, u32 flags)
        }
 }
 
+/* dump the first 8 dwords representing the extended ROM status */
+static void hda_dsp_dump_ext_rom_status(struct snd_sof_dev *sdev)
+{
+       char msg[128];
+       int len = 0;
+       u32 value;
+       int i;
+
+       for (i = 0; i < HDA_EXT_ROM_STATUS_SIZE; i++) {
+               value = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_ROM_STATUS + i * 0x4);
+               len += snprintf(msg + len, sizeof(msg) - len, " 0x%x", value);
+       }
+
+       dev_err(sdev->dev, "error: extended rom status:%s", msg);
+}
+
 void hda_dsp_dump(struct snd_sof_dev *sdev, u32 flags)
 {
        struct sof_ipc_dsp_oops_xtensa xoops;
@@ -437,6 +454,7 @@ void hda_dsp_dump(struct snd_sof_dev *sdev, u32 flags)
        } else {
                dev_err(sdev->dev, "error: status = 0x%8.8x panic = 0x%8.8x\n",
                        status, panic);
+               hda_dsp_dump_ext_rom_status(sdev);
                hda_dsp_get_status(sdev);
        }
 }