Re: snd_hda_intel/sst-acpi sound breakage on suspend/resume since 5.6-rc1

Cezary Rojewski
2020-03-19T17:33:57Z

On 2020-03-19 17:51, Dominik Brodowski wrote:
> On Thu, Mar 19, 2020 at 04:48:03PM +0100, Cezary Rojewski wrote:
>> On 2020-03-19 14:41, Mark Brown wrote:
>>> On Thu, Mar 19, 2020 at 02:00:49PM +0100, Dominik Brodowski wrote:
>>>
>>>> Have some good news now, namely that a bisect is complete: That pointed to
>>>> 1272063a7ee4 ("ASoC: soc-core: care .ignore_suspend for Component suspend");
>>>> therefore I've added Kuninori Morimoto to this e-mail thread.
>>>
>>> If that's an issue it feels more like a driver bug in that if the driver
>>> asked for ignore_suspend then it should expect not to have the suspend
>>> callback called.
>>>
>>
>> Requested for tests with following diff applied:
>>
>> diff --git a/sound/soc/intel/boards/broadwell.c
>> b/sound/soc/intel/boards/broadwell.c
>> index db7e1e87156d..6ed4c1b0a515 100644
>> --- a/sound/soc/intel/boards/broadwell.c
>> +++ b/sound/soc/intel/boards/broadwell.c
>> @@ -212,7 +212,6 @@ static struct snd_soc_dai_link broadwell_rt286_dais[] =
>> {
>> .init = broadwell_rt286_codec_init,
>> .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
>> SND_SOC_DAIFMT_CBS_CFS,
>> - .ignore_suspend = 1,
>> .ignore_pmdown_time = 1,
>> .be_hw_params_fixup = broadwell_ssp0_fixup,
>> .ops = &broadwell_rt286_ops,
>
> That patch fixes the issue(s). I didn't even need to revert 64df6afa0dab
> ("ASoC: Intel: broadwell: change cpu_dai and platform components for SOF")
> on top of that. But you can assess better whether that patch needs care for
> other reasons; for me, this one-liner you have suggested is perfect.
>
> Many thanks -- it's been a pleasure to work with you on tracking this issue
> down.
>
> Dominik
>

Thank you for being so cooperative during this 2day debug session.

The patch I mentioned earlier unintentionally (?) changed 'platform'
component param for ssp0_port from 'dummy' to 'platform' for non-SOF
solution:

diff --git a/sound/soc/intel/boards/broadwell.c
b/sound/soc/intel/boards/broadwell.c
index b9c12e24c70b..db7e1e87156d 100644
--- a/sound/soc/intel/boards/broadwell.c
+++ b/sound/soc/intel/boards/broadwell.c
@@ -164,14 +164,6 @@ SND_SOC_DAILINK_DEF(platform,
SND_SOC_DAILINK_DEF(codec,
DAILINK_COMP_ARRAY(COMP_CODEC("i2c-INT343A:00", "rt286-aif1")));

-#if IS_ENABLED(CONFIG_SND_SOC_SOF_BROADWELL)
-SND_SOC_DAILINK_DEF(ssp0_port,
- DAILINK_COMP_ARRAY(COMP_CPU("ssp0-port")));
-#else
-SND_SOC_DAILINK_DEF(ssp0_port,
- DAILINK_COMP_ARRAY(COMP_DUMMY()));
-#endif
-
/* broadwell digital audio interface glue - connects codec <--> CPU */
static struct snd_soc_dai_link broadwell_rt286_dais[] = {
/* Front End DAI links */
@@ -226,7 +218,7 @@ static struct snd_soc_dai_link
broadwell_rt286_dais[] = {
.ops = &broadwell_rt286_ops,
.dpcm_playback = 1,
.dpcm_capture = 1,
- SND_SOC_DAILINK_REG(ssp0_port, codec, platform),
+ SND_SOC_DAILINK_REG(dummy, codec, dummy),
},

Said change causes following to occur:

(stream start)
[ 113.251950] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000003000000 size: 77
[ 113.252090] haswell-pcm-audio haswell-pcm-audio: > rx:
0x0000000043000000 size: 48
[ 113.252097] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006301000 size: 20
[ 113.252147] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006301000 size: 20
[ 113.252179] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006100000 size: 0
[ 113.252219] snd_soc_core:dpcm_fe_dai_hw_params: System PCM: ASoC:
hw_params FE System PCM rate 48000 chan 2 fmt 2
[ 113.252229] snd_soc_core:dapm_update_dai_unlocked: haswell-pcm-audio
haswell-pcm-audio: Update DAI routes for System Pin playback
[ 113.252236] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006000000 size: 0
[ 113.252304] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000004000000 size: 4
[ 113.252425] snd_soc_sst_haswell_pcm:create_adsp_page_table: System
PCM: generating page table for 00000000a8c2b8a6 size 0x17700 pages 24

(In essence these tx'es denote sequence for stream initialization while
the last two for stream RESET (0x6000000) and FREE (0x4000000))

and that is only to recreate the stream once again:

[ 113.252673] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000003000000 size: 77
[ 113.252803] haswell-pcm-audio haswell-pcm-audio: > rx:
0x0000000043000000 size: 48
[ 113.252810] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006301000 size: 20
[ 113.252864] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006301000 size: 20
[ 113.252900] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006100000 size: 0
[ 113.252987] snd_soc_core:dpcm_fe_dai_prepare: System PCM: ASoC:
prepare FE System PCM
[ 113.252993] snd_soc_core:dpcm_be_dai_prepare: Codec: ASoC: prepare
BE Codec
[ 113.253028] snd_soc_core:dpcm_dapm_stream_event: Codec: ASoC: BE
Codec event 1 dir 0
[ 113.254962] snd_soc_core:dpcm_do_trigger: Codec: ASoC: trigger BE
Codec cmd 1

Because of that we ended up in _reset and _free being called twice:

[ 113.254969] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006200000 size: 0
[ 113.254980] snd_soc_core:dpcm_dai_trigger_fe_be: System PCM: ASoC:
post trigger FE System PCM cmd 1
[ 113.254983] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006200000 size: 0
[ 113.254996] snd_soc_sst_ipc:ipc_tx_msgs: haswell-pcm-audio
haswell-pcm-audio: ipc_tx_msgs dsp busy
[ 118.486291] System PCM: ASoC: trigger FE cmd: 7 failed: -22
[ 118.486431] snd_soc_core:dpcm_dai_trigger_fe_be: System PCM: ASoC:
pre trigger FE System PCM cmd 0
[ 118.486464] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006100000 size: 0
[ 118.486495] snd_soc_core:dpcm_do_trigger: Codec: ASoC: trigger BE
Codec cmd 0
[ 118.486514] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006100000 size: 0
[ 118.486550] snd_soc_core:dpcm_fe_dai_hw_free: System PCM: ASoC:
hw_free FE System PCM
[ 118.486569] snd_soc_core:dpcm_be_dai_hw_free: Codec: ASoC: hw_free
BE Codec
[ 118.486719] snd_soc_core:dpcm_fe_dai_hw_free: System PCM: ASoC:
hw_free FE System PCM
[ 118.486734] snd_soc_core:dpcm_be_dai_hw_free: Codec: ASoC: hw_free
BE Codec
[ 118.486751] snd_soc_core:dpcm_be_dai_shutdown: Codec: ASoC: close BE
Codec
[ 118.486801] snd_soc_sst_ipc:ipc_tx_msgs: haswell-pcm-audio
haswell-pcm-audio: ipc_tx_msgs dsp busy
[ 118.489279] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000006000000 size: 0
[ 118.489382] haswell-pcm-audio haswell-pcm-audio: tx:
0x0000000004000000 size: 4
[ 118.489535] snd_soc_core:dpcm_fe_dai_shutdown: System PCM: ASoC:
close FE System PCM
[ 118.489547] haswell-pcm-audio haswell-pcm-audio: warning: stream is
NULL, no stream to reset, ignore it.
[ 118.489553] haswell-pcm-audio haswell-pcm-audio: warning: stream is
NULL, no stream to free, ignore it.
[ 118.489571] snd_soc_core:dpcm_be_disconnect: System PCM: ASoC: BE
playback disconnect check for Codec
[ 118.489580] snd_soc_core:dpcm_be_disconnect: System PCM: freed DSP
playback path System PCM -> Codec

Could you confirm the same happens on your machine when revert of
mentioned patch is not applied ("stream is NULL" messages occur)? Issue
may be harmless but explained sequence does not look right.

Czarek