Message ID | 20211123171606.129350-1-kai.vehmanen@linux.intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 01429183f479c54c1b5d15453a8ce574ea43e525 |
Headers | show |
Series | [v2,1/3] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step | expand |
On Tue, Nov 23, 2021 at 07:16:04PM +0200, Kai Vehmanen wrote: > Fixes: 5fcdbb2d45df ("ASoC: SOF: Add support for dynamic pipelines") > Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> This doesn't actually apply as a fix FWIW, I've queued it for -next.
Hi, On Wed, 24 Nov 2021, Mark Brown wrote: > On Tue, Nov 23, 2021 at 07:16:04PM +0200, Kai Vehmanen wrote: > > > Fixes: 5fcdbb2d45df ("ASoC: SOF: Add support for dynamic pipelines") > > Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> > > This doesn't actually apply as a fix FWIW, I've queued it for -next. ack, this won't apply on top of for-5.16. The dependencies around the SOF dynamic pipelines (and related code) are unfortunately rather complicated with many recent changes. I now sent these on top of for-5.17/65c16dd2942 as baseline. Given the limited use of dynamic pipelines in current SOF topologies, we should be good for 5.16 even if these are left out. The Fixes tags should still be useful for anyone backporting patches to older kernels. Br, Kai
On Tue, 23 Nov 2021 19:16:04 +0200, Kai Vehmanen wrote: > From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> > > 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. > > [...] Applied to https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next Thanks! [1/3] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step commit: 01429183f479c54c1b5d15453a8ce574ea43e525 [2/3] ASoC: SOF: topology: don't use list_for_each_entry_reverse() commit: fb71d03b29bcbd8c03798d36e7b2a2297b6dea45 [3/3] ASoC: SOF: handle paused streams during system suspend commit: 96da174024b9c63bd5d3358668d0bc12677be877 All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark
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;