All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step
@ 2021-11-23 16:17 Kai Vehmanen
  2021-11-23 16:17 ` [PATCH 2/2] ASoC: SOF: topology: don't use list_for_each_entry_reverse() Kai Vehmanen
  2021-11-24 17:36 ` [PATCH 1/2] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step Mark Brown
  0 siblings, 2 replies; 3+ messages in thread
From: Kai Vehmanen @ 2021-11-23 16:17 UTC (permalink / raw)
  To: alsa-devel, broonie
  Cc: kai.vehmanen, yung-chuan.liao, lgirdwood, pierre-louis.bossart,
	ranjani.sridharan, daniel.baluta

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.

Fixes: 5fcdbb2d45df ("ASoC: SOF: Add support for dynamic pipelines")
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
---
 sound/soc/sof/sof-audio.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

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;
 

base-commit: 65c16dd2942f4476a3f96a2625b1475c6137c09a
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] ASoC: SOF: topology: don't use list_for_each_entry_reverse()
  2021-11-23 16:17 [PATCH 1/2] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step Kai Vehmanen
@ 2021-11-23 16:17 ` Kai Vehmanen
  2021-11-24 17:36 ` [PATCH 1/2] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step Mark Brown
  1 sibling, 0 replies; 3+ messages in thread
From: Kai Vehmanen @ 2021-11-23 16:17 UTC (permalink / raw)
  To: alsa-devel, broonie
  Cc: kai.vehmanen, yung-chuan.liao, lgirdwood, pierre-louis.bossart,
	ranjani.sridharan, daniel.baluta

From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>

It's not clear why we would walk the list backwards. That makes no
difference.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
---
 sound/soc/sof/topology.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c
index 63948bb30710..b3ad3a604918 100644
--- a/sound/soc/sof/topology.c
+++ b/sound/soc/sof/topology.c
@@ -3529,7 +3529,7 @@ static int sof_complete(struct snd_soc_component *scomp)
 			 * Apply the dynamic_pipeline_widget flag and set the pipe_widget field
 			 * for all widgets that have the same pipeline ID as the scheduler widget
 			 */
-			list_for_each_entry_reverse(comp_swidget, &sdev->widget_list, list)
+			list_for_each_entry(comp_swidget, &sdev->widget_list, list)
 				if (comp_swidget->pipeline_id == swidget->pipeline_id) {
 					ret = sof_set_pipe_widget(sdev, swidget, comp_swidget);
 					if (ret < 0)
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step
  2021-11-23 16:17 [PATCH 1/2] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step Kai Vehmanen
  2021-11-23 16:17 ` [PATCH 2/2] ASoC: SOF: topology: don't use list_for_each_entry_reverse() Kai Vehmanen
@ 2021-11-24 17:36 ` Mark Brown
  1 sibling, 0 replies; 3+ messages in thread
From: Mark Brown @ 2021-11-24 17:36 UTC (permalink / raw)
  To: alsa-devel, Kai Vehmanen
  Cc: pierre-louis.bossart, daniel.baluta, ranjani.sridharan,
	yung-chuan.liao, lgirdwood

On Tue, 23 Nov 2021 18:17:14 +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/2] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step
      commit: 01429183f479c54c1b5d15453a8ce574ea43e525
[2/2] ASoC: SOF: topology: don't use list_for_each_entry_reverse()
      commit: fb71d03b29bcbd8c03798d36e7b2a2297b6dea45

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

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-11-24 17:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-23 16:17 [PATCH 1/2] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step Kai Vehmanen
2021-11-23 16:17 ` [PATCH 2/2] ASoC: SOF: topology: don't use list_for_each_entry_reverse() Kai Vehmanen
2021-11-24 17:36 ` [PATCH 1/2] ASoC: SOF: sof-audio: setup sched widgets during pipeline complete step Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.