diff mbox series

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

Message ID 20240328135233.1204694-1-rodrigo.vivi@intel.com (mailing list archive)
State New, archived
Headers show
Series [topic/core-for-CI] ASoC: SOF: Core: Add remove_late() to sof_init_environment failure path | expand

Commit Message

Rodrigo Vivi March 28, 2024, 1:52 p.m. UTC
From: Chaitanya Kumar Borah <chaitanya.kumar.borah@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@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@intel.com>
Tested-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@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@intel.com>
---
 sound/soc/sof/core.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

Comments

Lucas De Marchi March 28, 2024, 5:50 p.m. UTC | #1
On Thu, Mar 28, 2024 at 09:52:33AM -0400, Rodrigo Vivi wrote:
>From: Chaitanya Kumar Borah <chaitanya.kumar.borah@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@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@intel.com>
>Tested-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>Reviewed-by: Rodrigo Vivi <rodrigo.vivi@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@intel.com>


Acked-by: Lucas De Marchi <lucas.demarchi@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
>
diff mbox series

Patch

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;
 }