Re: [GIT PULL] sound updates for 5.9

From: John Stultz
Date: Fri Aug 07 2020 - 20:23:41 EST


On Thu, Aug 6, 2020 at 3:33 AM Takashi Iwai <tiwai@xxxxxxx> wrote:
>
> Linus,
>
> please pull sound updates for v5.9 from:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-5.9-rc1
>
> The topmost commit is c7fabbc51352f50cc58242a6dc3b9c1a3599849b
>
> ----------------------------------------------------------------
>
> sound updates for 5.9
>
> This became wide and scattered updates all over the sound tree as
> diffstat shows: lots of (still ongoing) refactoring works in ASoC,
> fixes and cleanups caught by static analysis, inclusive term
> conversions as well as lots of new drivers. Below are highlights:
>
> ASoC core:
> * API cleanups and conversions to the unified mute_stream() call
> * Simplify I/O helper functions
> * Use helper macros to retrieve RTD from substreams
...
> Kuninori Morimoto (90):
> ASoC: soc-component: add soc_component_pin() and share code
> ASoC: soc-component: move snd_soc_component_xxx_regmap() to soc-component
> ASoC: soc-component: move snd_soc_component_initialize() to soc-component.c
> ASoC: soc-component: add soc_component_err()
> ASoC: soc-component: add snd_soc_pcm_component_prepare()
> ASoC: soc-component: add snd_soc_pcm_component_hw_params()
> ASoC: soc-component: add snd_soc_pcm_component_hw_free()
> ASoC: soc-component: add snd_soc_pcm_component_trigger()
> ASoC: soc-component: add snd_soc_component_init()
> ASoC: soc-component: merge soc-io.c into soc-component.c

So oddly, today I bisected down the change "ASoC: soc-component: merge
soc-io.c into soc-component.c":
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=460b42d162e3cf634586999e6a84e74ca52e626d

as causing audio regressions on Dragonboard 845c running AOSP.

On boot I was seeing tons of:
q6routing remoteproc-adsp:glink-edge:apr:apr-service@8:routing: ASoC:
error at soc_component_read_no_lock on
remoteproc-adsp:glink-edge:apr:: -5

And when audio was supposed to play I'd see:
[ 227.462986] qcom-q6afe aprsvc:apr-service:4:4: cmd = 0x100e5
returned error = 0x9
[ 227.470720] qcom-q6afe aprsvc:apr-service:4:4: DSP returned error[9]
[ 227.477168] qcom-q6afe aprsvc:apr-service:4:4: AFE enable for port
0x4000 failed -22
[ 227.485038] q6afe-dai
remoteproc-adsp:glink-edge:apr:apr-service@4:dais: fail to start AFE
port 2
[ 227.494013] q6afe-dai
remoteproc-adsp:glink-edge:apr:apr-service@4:dais: ASoC: error at
snd_soc_pcm_dai_prepare on SLIMBUS_0_RX: -22
[ 227.506034] SLIM Playback: ASoC: DAI prepare error: -22
[ 227.511415] SLIM Playback: ASoC: backend prepare failed -22

Its strange, as the bisected patch is really just moving code around
and there's very little in the way of logic changes. After minimizing
the code movement and just focusing on what changed I forward ported a
revert to mainline and minimized it until things were working.

The resulting patch is a twoliner here:
https://git.linaro.org/people/john.stultz/android-dev.git/commit/?h=dev/db845c-mainline-WIP&id=a3527193f39b1224d59bf1519fce3ef8c57d0f5e

I'm a bit baffled as to why this patch works. Logically we are
returning the same value. I suspect when we hit the error, all the
extra error print messages on the console slow things down and end up
causing some timing related initialization failure?

Anyway, I wanted to raise the issue in case anyone had ideas what
might be going wrong.

thanks
-john