diff options
author | Mark Brown <broonie@kernel.org> | 2022-05-20 12:17:53 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2022-05-20 12:17:53 +0100 |
commit | b4ce6dd4de3f75f6ee1751148198beaf4e37bedb (patch) | |
tree | e90dbeeb95d365b7f6d0a7a929609e11516b0511 /sound/soc/sof/mediatek/mt8195/mt8195.c | |
parent | bb94bb86286b3560ebb539a84b299ca03141940f (diff) | |
parent | 3a054f90e95500387cc871f5a04ad91def1664ed (diff) | |
download | linux-stable-b4ce6dd4de3f75f6ee1751148198beaf4e37bedb.tar.gz linux-stable-b4ce6dd4de3f75f6ee1751148198beaf4e37bedb.tar.bz2 linux-stable-b4ce6dd4de3f75f6ee1751148198beaf4e37bedb.zip |
ASoC: SOF: mediatek: add debug dump
Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:
Add the ability to generate debug dumps on MediaTek SOF implementations.
Diffstat (limited to 'sound/soc/sof/mediatek/mt8195/mt8195.c')
-rw-r--r-- | sound/soc/sof/mediatek/mt8195/mt8195.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sound/soc/sof/mediatek/mt8195/mt8195.c b/sound/soc/sof/mediatek/mt8195/mt8195.c index 7278132300e0..30111ab23bf5 100644 --- a/sound/soc/sof/mediatek/mt8195/mt8195.c +++ b/sound/soc/sof/mediatek/mt8195/mt8195.c @@ -24,6 +24,7 @@ #include "../../sof-of-dev.h" #include "../../sof-audio.h" #include "../adsp_helper.h" +#include "../mtk-adsp-common.h" #include "mt8195.h" #include "mt8195-clk.h" @@ -485,6 +486,31 @@ static int mt8195_ipc_msg_data(struct snd_sof_dev *sdev, return 0; } +static void mt8195_adsp_dump(struct snd_sof_dev *sdev, u32 flags) +{ + u32 dbg_pc, dbg_data, dbg_bus0, dbg_bus1, dbg_inst; + u32 dbg_ls0stat, dbg_ls1stat, faultbus, faultinfo, swrest; + + /* dump debug registers */ + dbg_pc = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGPC); + dbg_data = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGDATA); + dbg_bus0 = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGBUS0); + dbg_bus1 = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGBUS1); + dbg_inst = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGINST); + dbg_ls0stat = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGLS0STAT); + dbg_ls1stat = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGLS1STAT); + faultbus = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PFAULTBUS); + faultinfo = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PFAULTINFO); + swrest = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_RESET_SW); + + dev_info(sdev->dev, "adsp dump : pc %#x, data %#x, bus0 %#x, bus1 %#x, swrest %#x", + dbg_pc, dbg_data, dbg_bus0, dbg_bus1, swrest); + dev_info(sdev->dev, "dbg_inst %#x, ls0stat %#x, ls1stat %#x, faultbus %#x, faultinfo %#x", + dbg_inst, dbg_ls0stat, dbg_ls1stat, faultbus, faultinfo); + + mtk_adsp_dump(sdev, flags); +} + static struct snd_soc_dai_driver mt8195_dai[] = { { .name = "SOF_DL2", @@ -552,6 +578,9 @@ static struct snd_sof_dsp_ops sof_mt8195_ops = { /* Firmware ops */ .dsp_arch_ops = &sof_xtensa_arch_ops, + /* Debug information */ + .dbg_dump = mt8195_adsp_dump, + /* DAI drivers */ .drv = mt8195_dai, .num_drv = ARRAY_SIZE(mt8195_dai), |