[topic/core-for-CI] ASoC: SOF: Core: Add remove_late() to sof_init_environment failure path

Lucas De Marchi lucas.demarchi at intel.com
Thu Mar 28 17:50:01 UTC 2024


On Thu, Mar 28, 2024 at 09:52:33AM -0400, Rodrigo Vivi wrote:
>From: Chaitanya Kumar Borah <chaitanya.kumar.borah at intel.com>
>
>In cases where the sof driver is unable to find the firmware and/or
>topology file [1], it exits without releasing the i915 runtime
>pm wakeref [2]. This results in dmesg warnings[3] during
>suspend/resume or driver unbind. Add remove_late() to the failure path
>of sof_init_environment so that i915 wakeref is released appropriately
>
>[1]
>
>[    8.990366] sof-audio-pci-intel-mtl 0000:00:1f.3: SOF firmware and/or topology file not found.
>[    8.990396] sof-audio-pci-intel-mtl 0000:00:1f.3: Supported default profiles
>[    8.990398] sof-audio-pci-intel-mtl 0000:00:1f.3: - ipc type 1 (Requested):
>[    8.990399] sof-audio-pci-intel-mtl 0000:00:1f.3:  Firmware file: intel/sof-ipc4/mtl/sof-mtl.ri
>[    8.990401] sof-audio-pci-intel-mtl 0000:00:1f.3:  Topology file: intel/sof-ace-tplg/sof-mtl-rt711-2ch.tplg
>[    8.990402] sof-audio-pci-intel-mtl 0000:00:1f.3: Check if you have 'sof-firmware' package installed.
>[    8.990403] sof-audio-pci-intel-mtl 0000:00:1f.3: Optionally it can be manually downloaded from:
>[    8.990404] sof-audio-pci-intel-mtl 0000:00:1f.3:    https://github.com/thesofproject/sof-bin/
>[    8.999088] sof-audio-pci-intel-mtl 0000:00:1f.3: error: sof_probe_work failed err: -2
>
>[2]
>
>ref_tracker: 0000:00:02.0 at ffff9b8511b6a378 has 1/5 users at
>     track_intel_runtime_pm_wakeref.part.0+0x36/0x70 [i915]
>     __intel_runtime_pm_get+0x51/0xb0 [i915]
>     intel_runtime_pm_get+0x17/0x20 [i915]
>     intel_display_power_get+0x2f/0x70 [i915]
>     i915_audio_component_get_power+0x23/0x120 [i915]
>     snd_hdac_display_power+0x89/0x130 [snd_hda_core]
>     hda_codec_i915_init+0x3f/0x50 [snd_sof_intel_hda]
>     hda_dsp_probe_early+0x170/0x250 [snd_sof_intel_hda_common]
>     snd_sof_device_probe+0x224/0x320 [snd_sof]
>     sof_pci_probe+0x15b/0x220 [snd_sof_pci]
>     hda_pci_intel_probe+0x30/0x70 [snd_sof_intel_hda_common]
>     local_pci_probe+0x4c/0xb0
>     pci_device_probe+0xcc/0x250
>     really_probe+0x18e/0x420
>     __driver_probe_device+0x7e/0x170
>     driver_probe_device+0x23/0xa0
>
>[3]
>[  484.105070] ------------[ cut here ]------------
>[  484.108238] thunderbolt 0000:00:0d.2: PM: pci_pm_suspend_late+0x0/0x50 returned 0 after 0 usecs
>[  484.117106] i915 0000:00:02.0: i915 raw-wakerefs=1 wakelocks=1 on cleanup
>[  484.792005] WARNING: CPU: 2 PID: 2405 at drivers/gpu/drm/i915/intel_runtime_pm.c:444 intel_runtime_pm_driver_release+0x6c/0x80
>
>Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah at intel.com>
>Tested-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
>Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
>[This commit is still under review on the sof tree, but likely targeting 6.10
>Adding to topic branch to unblock RPM in LNL VLK-56970]
>Link: https://github.com/thesofproject/linux/pull/4878
>Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>


Acked-by: Lucas De Marchi <lucas.demarchi at intel.com>

to merge in our topic/core-for-CI branch.

thanks
Lucas De Marchi

>---
> sound/soc/sof/core.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
>diff --git a/sound/soc/sof/core.c b/sound/soc/sof/core.c
>index 425b023b03b4..3e41821562f0 100644
>--- a/sound/soc/sof/core.c
>+++ b/sound/soc/sof/core.c
>@@ -339,8 +339,7 @@ static int sof_init_environment(struct snd_sof_dev *sdev)
> 	ret = snd_sof_probe(sdev);
> 	if (ret < 0) {
> 		dev_err(sdev->dev, "failed to probe DSP %d\n", ret);
>-		sof_ops_free(sdev);
>-		return ret;
>+		goto err_sof_probe;
> 	}
>
> 	/* check machine info */
>@@ -358,15 +357,18 @@ static int sof_init_environment(struct snd_sof_dev *sdev)
> 		ret = validate_sof_ops(sdev);
> 		if (ret < 0) {
> 			snd_sof_remove(sdev);
>+			snd_sof_remove_late(sdev);
> 			return ret;
> 		}
> 	}
>
>+	return 0;
>+
> err_machine_check:
>-	if (ret) {
>-		snd_sof_remove(sdev);
>-		sof_ops_free(sdev);
>-	}
>+	snd_sof_remove(sdev);
>+err_sof_probe:
>+	snd_sof_remove_late(sdev);
>+	sof_ops_free(sdev);
>
> 	return ret;
> }
>-- 
>2.44.0
>


More information about the Intel-gfx mailing list