Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: SOF: mediatek: add adsp debug dump

Add mt8188 and mt8186 .dbg_dump callback to print some information when
DSP panic occurs.

Signed-off-by: Trevor Wu <trevor.wu@mediatek.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Yaochun Hung <yc.hung@mediatek.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20230601034939.15802-2-trevor.wu@mediatek.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Trevor Wu and committed by
Mark Brown
089adf33 8f4007e8

+27
+22
sound/soc/sof/mediatek/mt8186/mt8186.c
··· 24 24 #include "../../sof-of-dev.h" 25 25 #include "../../sof-audio.h" 26 26 #include "../adsp_helper.h" 27 + #include "../mtk-adsp-common.h" 27 28 #include "mt8186.h" 28 29 #include "mt8186-clk.h" 29 30 ··· 474 473 return pos; 475 474 } 476 475 476 + static void mt8186_adsp_dump(struct snd_sof_dev *sdev, u32 flags) 477 + { 478 + u32 dbg_pc, dbg_data, dbg_inst, dbg_ls0stat, dbg_status, faultinfo; 479 + 480 + /* dump debug registers */ 481 + dbg_pc = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGPC); 482 + dbg_data = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGDATA); 483 + dbg_inst = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGINST); 484 + dbg_ls0stat = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGLS0STAT); 485 + dbg_status = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PDEBUGSTATUS); 486 + faultinfo = snd_sof_dsp_read(sdev, DSP_REG_BAR, DSP_PFAULTINFO); 487 + 488 + dev_info(sdev->dev, "adsp dump : pc %#x, data %#x, dbg_inst %#x,", 489 + dbg_pc, dbg_data, dbg_inst); 490 + dev_info(sdev->dev, "ls0stat %#x, status %#x, faultinfo %#x", 491 + dbg_ls0stat, dbg_status, faultinfo); 492 + 493 + mtk_adsp_dump(sdev, flags); 494 + } 495 + 477 496 static struct snd_soc_dai_driver mt8186_dai[] = { 478 497 { 479 498 .name = "SOF_DL1", ··· 576 555 .num_drv = ARRAY_SIZE(mt8186_dai), 577 556 578 557 /* Debug information */ 558 + .dbg_dump = mt8186_adsp_dump, 579 559 .debugfs_add_region_item = snd_sof_debugfs_add_region_item_iomem, 580 560 581 561 /* PM */
+5
sound/soc/sof/mediatek/mt8186/mt8186.h
··· 38 38 #define DSP_MBOX3_IRQ_EN BIT(3) 39 39 #define DSP_MBOX4_IRQ_EN BIT(4) 40 40 #define DSP_PDEBUGPC 0x013C 41 + #define DSP_PDEBUGDATA 0x0140 42 + #define DSP_PDEBUGINST 0x0144 43 + #define DSP_PDEBUGLS0STAT 0x0148 44 + #define DSP_PDEBUGSTATUS 0x014C 45 + #define DSP_PFAULTINFO 0x0150 41 46 #define ADSP_CK_EN 0x1000 42 47 #define CORE_CLK_EN BIT(0) 43 48 #define COREDBG_EN BIT(1)