On 1/24/22 07:59, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > > The patch below does not apply to the 5.16-stable tree. > If someone wants it applied there, or to any other stable or longterm > tree, then please email the backport, including the original git commit > id to <stable@xxxxxxxxxxxxxxx>. Yes, it looks like we've missing two dependencies. the following sequence applies on top of v5.16.2 git cherry-pick 7cc7b9ba21d4978d19f0e3edc2b00d44c9d66ff6 git cherry-pick b2ebcf42a48f4560862bb811f3268767d17ebdcd and then this commit git cherry-pick 01429183f479c54c1b5d15453a8ce574ea43e525 I would recommend adding these three patches to avoid issues with dynamic pipelines. > thanks, > > greg k-h > > ------------------ original commit in Linus's tree ------------------ > > From 01429183f479c54c1b5d15453a8ce574ea43e525 Mon Sep 17 00:00:00 2001 > From: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > Date: Tue, 23 Nov 2021 19:16:04 +0200 > Subject: [PATCH] ASoC: SOF: sof-audio: setup sched widgets during pipeline > complete step > > Older firmware prior to ABI 3.19 has a dependency where the scheduler > widgets need to be setup last. Moving the call to sof_widget_setup() > before the pipeline_complete() call also helps remove the need for the > 'reverse' direction when walking through the widget list - this was > only working because of the topology macros but the topology does not > require any order. > > Fixes: 5fcdbb2d45df ("ASoC: SOF: Add support for dynamic pipelines") > Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > Reviewed-by: Ranjani Sridharan <ranjani.sridharan@xxxxxxxxxxxxxxx> > Signed-off-by: Kai Vehmanen <kai.vehmanen@xxxxxxxxxxxxxxx> > Link: https://lore.kernel.org/r/20211123171606.129350-1-kai.vehmanen@xxxxxxxxxxxxxxx > Signed-off-by: Mark Brown <broonie@xxxxxxxxxx> > > diff --git a/sound/soc/sof/sof-audio.c b/sound/soc/sof/sof-audio.c > index 0f2566f7c094..f4e142ec0fbd 100644 > --- a/sound/soc/sof/sof-audio.c > +++ b/sound/soc/sof/sof-audio.c > @@ -637,16 +637,25 @@ const struct sof_ipc_pipe_new *snd_sof_pipeline_find(struct snd_sof_dev *sdev, > > int sof_set_up_pipelines(struct snd_sof_dev *sdev, bool verify) > { > + struct sof_ipc_fw_version *v = &sdev->fw_ready.version; > struct snd_sof_widget *swidget; > struct snd_sof_route *sroute; > int ret; > > /* restore pipeline components */ > - list_for_each_entry_reverse(swidget, &sdev->widget_list, list) { > + list_for_each_entry(swidget, &sdev->widget_list, list) { > /* only set up the widgets belonging to static pipelines */ > if (!verify && swidget->dynamic_pipeline_widget) > continue; > > + /* > + * For older firmware, skip scheduler widgets in this loop, > + * sof_widget_setup() will be called in the 'complete pipeline' loop > + */ > + if (v->abi_version < SOF_ABI_VER(3, 19, 0) && > + swidget->id == snd_soc_dapm_scheduler) > + continue; > + > /* update DAI config. The IPC will be sent in sof_widget_setup() */ > if (WIDGET_IS_DAI(swidget->id)) { > struct snd_sof_dai *dai = swidget->private; > @@ -694,6 +703,12 @@ int sof_set_up_pipelines(struct snd_sof_dev *sdev, bool verify) > if (!verify && swidget->dynamic_pipeline_widget) > continue; > > + if (v->abi_version < SOF_ABI_VER(3, 19, 0)) { > + ret = sof_widget_setup(sdev, swidget); > + if (ret < 0) > + return ret; > + } > + > swidget->complete = > snd_sof_complete_pipeline(sdev, swidget); > break; > @@ -722,7 +737,7 @@ int sof_tear_down_pipelines(struct snd_sof_dev *sdev, bool verify) > * sroute->setup because during suspend all streams are suspended and during topology > * loading the sound card unavailable to open PCMs. > */ > - list_for_each_entry_reverse(swidget, &sdev->widget_list, list) { > + list_for_each_entry(swidget, &sdev->widget_list, list) { > if (swidget->dynamic_pipeline_widget) > continue; > >