Skip to content

Commit

Permalink
ASoC: SOF: set swidget's core for scheduler widget
Browse files Browse the repository at this point in the history
Set the swidget's core for scheduler type widgets to match that of the
pipeline core. This simplifies the flow for core get/put during widget
setup/free.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20220307181111.49392-4-ranjani.sridharan@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
ranj063 authored and broonie committed Mar 8, 2022
1 parent 80df222 commit 3a790f3
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 18 deletions.
23 changes: 5 additions & 18 deletions sound/soc/sof/sof-audio.c
Expand Up @@ -103,7 +103,7 @@ int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
.id = swidget->comp_id,
};
struct sof_ipc_reply reply;
int ret, ret1, core;
int ret, ret1;

if (!swidget->private)
return 0;
Expand All @@ -112,14 +112,9 @@ int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
if (--swidget->use_count)
return 0;

core = swidget->core;

switch (swidget->id) {
case snd_soc_dapm_scheduler:
{
const struct sof_ipc_pipe_new *pipeline = swidget->private;

core = pipeline->core;
ipc_free.hdr.cmd |= SOF_IPC_TPLG_PIPE_FREE;
break;
}
Expand Down Expand Up @@ -149,10 +144,10 @@ int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
* disable widget core. continue to route setup status and complete flag
* even if this fails and return the appropriate error
*/
ret1 = snd_sof_dsp_core_put(sdev, core);
ret1 = snd_sof_dsp_core_put(sdev, swidget->core);
if (ret1 < 0) {
dev_err(sdev->dev, "error: failed to disable target core: %d for widget %s\n",
core, swidget->widget->name);
swidget->core, swidget->widget->name);
if (!ret)
ret = ret1;
}
Expand All @@ -177,7 +172,6 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
struct snd_sof_dai *dai;
size_t ipc_size;
int ret;
int core;

/* skip if there is no private data */
if (!swidget->private)
Expand All @@ -187,15 +181,8 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
if (++swidget->use_count > 1)
return 0;

/* set core ID */
core = swidget->core;
if (swidget->id == snd_soc_dapm_scheduler) {
pipeline = swidget->private;
core = pipeline->core;
}

/* enable widget core */
ret = snd_sof_dsp_core_get(sdev, core);
ret = snd_sof_dsp_core_get(sdev, swidget->core);
if (ret < 0) {
dev_err(sdev->dev, "error: failed to enable target core for widget %s\n",
swidget->widget->name);
Expand Down Expand Up @@ -275,7 +262,7 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
return 0;

core_put:
snd_sof_dsp_core_put(sdev, core);
snd_sof_dsp_core_put(sdev, swidget->core);
use_count_dec:
swidget->use_count--;
return ret;
Expand Down
1 change: 1 addition & 0 deletions sound/soc/sof/topology.c
Expand Up @@ -1707,6 +1707,7 @@ static int sof_widget_load_pipeline(struct snd_soc_component *scomp, int index,
pipeline->period_mips, pipeline->core, pipeline->frames_per_sched,
swidget->dynamic_pipeline_widget);

swidget->core = pipeline->core;
swidget->private = pipeline;

return 0;
Expand Down

0 comments on commit 3a790f3

Please sign in to comment.