diff options
author | Mark Brown <broonie@kernel.org> | 2022-07-19 19:43:27 +0200 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2022-07-19 19:43:27 +0200 |
commit | 09f852894553ac72e25a6b6012a1f5ff34be5be5 (patch) | |
tree | 4de9fa51e64bc9c8a7118aa53271cfd3cc9ce222 /sound | |
parent | ASoC: nau8821: Don't unconditionally free interrupt (diff) | |
parent | ASoC: SOF: mediatek: fix mt8195 StatvectorSel wrong setting (diff) | |
download | linux-09f852894553ac72e25a6b6012a1f5ff34be5be5.tar.xz linux-09f852894553ac72e25a6b6012a1f5ff34be5be5.zip |
ASoC: SOF: mediatek: fix boot sequences
Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:
Changes to DSP_RESET_SW need extra care.
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/sof/mediatek/mt8195/mt8195-loader.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/sound/soc/sof/mediatek/mt8195/mt8195-loader.c b/sound/soc/sof/mediatek/mt8195/mt8195-loader.c index ed18d6379e92..4be99ff4ebd3 100644 --- a/sound/soc/sof/mediatek/mt8195/mt8195-loader.c +++ b/sound/soc/sof/mediatek/mt8195/mt8195-loader.c @@ -21,7 +21,7 @@ void sof_hifixdsp_boot_sequence(struct snd_sof_dev *sdev, u32 boot_addr) /* pull high StatVectorSel to use AltResetVec (set bit4 to 1) */ snd_sof_dsp_update_bits(sdev, DSP_REG_BAR, DSP_RESET_SW, - DSP_RESET_SW, DSP_RESET_SW); + STATVECTOR_SEL, STATVECTOR_SEL); /* toggle DReset & BReset */ /* pull high DReset & BReset */ @@ -29,6 +29,9 @@ void sof_hifixdsp_boot_sequence(struct snd_sof_dev *sdev, u32 boot_addr) ADSP_BRESET_SW | ADSP_DRESET_SW, ADSP_BRESET_SW | ADSP_DRESET_SW); + /* delay 10 DSP cycles at 26M about 1us by IP vendor's suggestion */ + udelay(1); + /* pull low DReset & BReset */ snd_sof_dsp_update_bits(sdev, DSP_REG_BAR, DSP_RESET_SW, ADSP_BRESET_SW | ADSP_DRESET_SW, @@ -46,11 +49,13 @@ void sof_hifixdsp_boot_sequence(struct snd_sof_dev *sdev, u32 boot_addr) void sof_hifixdsp_shutdown(struct snd_sof_dev *sdev) { - /* Clear to 0 firstly */ - snd_sof_dsp_write(sdev, DSP_REG_BAR, DSP_RESET_SW, 0x0); - /* RUN_STALL pull high again to reset */ snd_sof_dsp_update_bits(sdev, DSP_REG_BAR, DSP_RESET_SW, ADSP_RUNSTALL, ADSP_RUNSTALL); + + /* pull high DReset & BReset */ + snd_sof_dsp_update_bits(sdev, DSP_REG_BAR, DSP_RESET_SW, + ADSP_BRESET_SW | ADSP_DRESET_SW, + ADSP_BRESET_SW | ADSP_DRESET_SW); } |