Re: [PATCH] ASoC: SOF: Move sof_of_machine_select() to core.c from sof-of-dev.c

From: Péter Ujfalusi
Date: Mon Dec 04 2023 - 06:03:30 EST




On 04/12/2023 05:35, Chen-Yu Tsai wrote:
> This reverts commit 014fdeb0d747304111cfecf93df4407c1a0c80db.
>
> Commit 014fdeb0d747 ("ASoC: SOF: Move sof_of_machine_select() to
> sof-of-dev.c from sof-audio.c") caused a circular dependency between
> the snd_sof and snd_sof_of modules:
>
> depmod: ERROR: Cycle detected: snd_sof -> snd_sof_of -> snd_sof
> depmod: ERROR: Found 2 modules in dependency cycles!
>
> Move the function back with sof_machine_select().
>
> Fixes: 014fdeb0d747 ("ASoC: SOF: Move sof_of_machine_select() to sof-of-dev.c from sof-audio.c")
> Signed-off-by: Chen-Yu Tsai <wenst@xxxxxxxxxxxx>

Oh, I have re-done the compile test and that does not detect this (I
don't have ARM device to runtime test it), but looks valid.
I wonder if we should do this similarly to acpi machine select via ops
to cut the circular dependency?
That can be done in a followup patch.

Acked-by: Peter Ujfalusi <peter.ujfalusi@xxxxxxxxxxxxxxx>

> ---
> Not sure what the proper arrangement would be, but this gets my builds
> going again.
>
> sound/soc/sof/core.c | 22 ++++++++++++++++++++++
> sound/soc/sof/sof-of-dev.c | 23 -----------------------
> sound/soc/sof/sof-of-dev.h | 9 ---------
> 3 files changed, 22 insertions(+), 32 deletions(-)
>
> diff --git a/sound/soc/sof/core.c b/sound/soc/sof/core.c
> index a2afec8f5879..425b023b03b4 100644
> --- a/sound/soc/sof/core.c
> +++ b/sound/soc/sof/core.c
> @@ -144,6 +144,28 @@ void sof_set_fw_state(struct snd_sof_dev *sdev, enum sof_fw_state new_state)
> }
> EXPORT_SYMBOL(sof_set_fw_state);
>
> +static struct snd_sof_of_mach *sof_of_machine_select(struct snd_sof_dev *sdev)
> +{
> + struct snd_sof_pdata *sof_pdata = sdev->pdata;
> + const struct sof_dev_desc *desc = sof_pdata->desc;
> + struct snd_sof_of_mach *mach = desc->of_machines;
> +
> + if (!mach)
> + return NULL;
> +
> + for (; mach->compatible; mach++) {
> + if (of_machine_is_compatible(mach->compatible)) {
> + sof_pdata->tplg_filename = mach->sof_tplg_filename;
> + if (mach->fw_filename)
> + sof_pdata->fw_filename = mach->fw_filename;
> +
> + return mach;
> + }
> + }
> +
> + return NULL;
> +}
> +
> /* SOF Driver enumeration */
> static int sof_machine_check(struct snd_sof_dev *sdev)
> {
> diff --git a/sound/soc/sof/sof-of-dev.c b/sound/soc/sof/sof-of-dev.c
> index fa92da5ee9b3..b9a499e92b9a 100644
> --- a/sound/soc/sof/sof-of-dev.c
> +++ b/sound/soc/sof/sof-of-dev.c
> @@ -41,29 +41,6 @@ static void sof_of_probe_complete(struct device *dev)
> pm_runtime_enable(dev);
> }
>
> -struct snd_sof_of_mach *sof_of_machine_select(struct snd_sof_dev *sdev)
> -{
> - struct snd_sof_pdata *sof_pdata = sdev->pdata;
> - const struct sof_dev_desc *desc = sof_pdata->desc;
> - struct snd_sof_of_mach *mach = desc->of_machines;
> -
> - if (!mach)
> - return NULL;
> -
> - for (; mach->compatible; mach++) {
> - if (of_machine_is_compatible(mach->compatible)) {
> - sof_pdata->tplg_filename = mach->sof_tplg_filename;
> - if (mach->fw_filename)
> - sof_pdata->fw_filename = mach->fw_filename;
> -
> - return mach;
> - }
> - }
> -
> - return NULL;
> -}
> -EXPORT_SYMBOL(sof_of_machine_select);
> -
> int sof_of_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> diff --git a/sound/soc/sof/sof-of-dev.h b/sound/soc/sof/sof-of-dev.h
> index 547e358a37e3..b6cc70595f3b 100644
> --- a/sound/soc/sof/sof-of-dev.h
> +++ b/sound/soc/sof/sof-of-dev.h
> @@ -16,15 +16,6 @@ struct snd_sof_of_mach {
> const char *sof_tplg_filename;
> };
>
> -#if IS_ENABLED(CONFIG_SND_SOC_SOF_OF_DEV)
> -struct snd_sof_of_mach *sof_of_machine_select(struct snd_sof_dev *sdev);
> -#else
> -static inline struct snd_sof_of_mach *sof_of_machine_select(struct snd_sof_dev *sdev)
> -{
> - return NULL;
> -}
> -#endif
> -
> extern const struct dev_pm_ops sof_of_pm;
>
> int sof_of_probe(struct platform_device *pdev);

--
Péter