Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ASoC: SOF: loader: release_firmware() on failures to avoid batching #2954

Merged
merged 1 commit into from
Jul 7, 2021

Conversation

marc-hb
Copy link
Collaborator

@marc-hb marc-hb commented Jun 1, 2021

OLD, very verbose description below. For the much shorter commit message look at the commit itself.


While this does not seem enough to recover from any sort of DSP crash,
it does help recover from certain ones in my testing and the ability to
try a different firmware file is obviously a minimum that saves
considerable confusion and loss of time.

A simple reproduction of the issue addressed:

  • Add a panic() at a certain point the DSP initialization, see example
    below. Try and fail to load that firmware.
  • Temporarily mv /lib/firmware/intel/ elsewhere.
  • Unload and reload modules to try loading it again. Should be missing.
  • No error reported by request_firmware() in kernel logs, the previous
    SOF firmware version is printed instead!

Trying and failing to alternate between a failing and a working firmware
is another reproduction.

Note this issue is not related to CONFIG_FW_CACHE and happens with and
without caching. It it caused by an undocumented "request batching"
feature implemented in function alloc_lookup_fw_priv(). In other words,
the firmware loader does not know that the first request failed due
to the lack of release_firmware() call. As it assumes the first attempt
was successful, any further attempt is "batched" and re-uses the same
file. This is very clear from these logs:

  1. Try and fail to load with an early panic(1), see exact location below
kernel: firmware_class: fw_set_page_data: fw-intel/sof/community/sof-apl.ri \
           fw_priv=00000000c1917533 data=00000000d2522816 size=234240

kernel: sof-audio-pci-intel-apl 0000:00:0e.0: Attempting iteration 0 of Core En/ROM load...
kernel: sof-audio-pci-intel-apl 0000:00:0e.0: error: firmware boot failure
kernel: sof-audio-pci-intel-apl 0000:00:0e.0: status: fw entered - code 00000005
kernel: sof-audio-pci-intel-apl 0000:00:0e.0: error: extended rom status:  0x5 0x0 0x3200 0x0 0x0 0x0 0x0 0x0
kernel: sof-audio-pci-intel-apl 0000:00:0e.0: error: failed to boot DSP firmware -5
kernel: sof-audio-pci-intel-apl: probe of 0000:00:0e.0 failed with error -5
  1. Remove the panic(1), try (and fail) to load the fixed firmware:
kernel: firmware_class: batched request - sharing the same struct fw_priv and lookup for multiple requests
kernel: firmware_class: fw_set_page_data: fw-intel/sof/community/sof-apl.ri \
           fw_priv=00000000c1917533 data=00000000d2522816 size=234240

kernel: sof-audio-pci-intel-apl 0000:00:0e.0: Attempting iteration 0 of Core En/ROM load...
kernel: sof-audio-pci-intel-apl 0000:00:0e.0: error: firmware boot failure
kernel: sof-audio-pci-intel-apl 0000:00:0e.0: status: fw entered - code 00000005
kernel: sof-audio-pci-intel-apl 0000:00:0e.0: error: extended rom status:  0x5 0x0 0x3200 0x0 0x0 0x0 0x0 0x0
kernel: sof-audio-pci-intel-apl 0000:00:0e.0: error: failed to boot DSP firmware -5
kernel: sof-audio-pci-intel-apl: probe of 0000:00:0e.0 failed with error -5

Note the old fw_priv pointer and data despite the new firmware file.

v2: leverage the now non-empty snd_sof_fw_unload() function to simplify
the code in snd_sof_device_remove(); no functional change in
snd_sof_device_remove(). Thanks Péter Ujfalusi.

To reproduce, make the following change on top of SOF commit
5d9d2dd or a0f789d and test with an Up Squared board:

+++ b/src/trace/dma-trace.c
@@ -122,6 +122,8 @@ out:

 int dma_trace_init_early(struct sof *sof)
 {
+	panic(1);
+
 	sof->dmat = rzalloc(SOF_MEM_ZONE_SYS_SHARED, 0, SOF_MEM_CAPS_RAM, sizeof(*sof->dmat));
 	dma_sg_init(&sof->dmat->config.elem_array);

Signed-off-by: Marc Herbert marc.herbert@intel.com

@marc-hb
Copy link
Collaborator Author

marc-hb commented Jun 1, 2021

[ 815.612129] kernel: IO error in rt700_jack_detect_handler, ret -16 in https://sof-ci.01.org/linuxpr/PR2954/build5822/devicetest/?model=CML_RVP_SDW&testcase=check-suspend-resume-5 seems unrelated.

@marc-hb marc-hb marked this pull request as ready for review June 1, 2021 02:02
Copy link
Collaborator

@ujfalusi ujfalusi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would extend the patch with:

diff --git a/sound/soc/sof/core.c b/sound/soc/sof/core.c
index 6fcbcd8cb8d8..82eaa2d197dd 100644
--- a/sound/soc/sof/core.c
+++ b/sound/soc/sof/core.c
@@ -450,7 +450,6 @@ int snd_sof_device_remove(struct device *dev)
 				 ret);
 
 		snd_sof_ipc_unregister_clients(sdev);
-		snd_sof_fw_unload(sdev);
 		snd_sof_ipc_free(sdev);
 		snd_sof_free_debug(sdev);
 		snd_sof_free_trace(sdev);
@@ -473,8 +472,7 @@ int snd_sof_device_remove(struct device *dev)
 		snd_sof_remove(sdev);
 
 	/* release firmware */
-	release_firmware(pdata->fw);
-	pdata->fw = NULL;
+	snd_sof_fw_unload(sdev);
 
 	return 0;
 }

@@ -714,6 +714,7 @@ int snd_sof_load_firmware_raw(struct snd_sof_dev *sdev)
ret = request_firmware(&plat_data->fw, fw_filename, sdev->dev);

if (ret < 0) {
plat_data->fw = NULL;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you sure you need this?
the sdev->pdata is devm_kzalloced during module loading. Furthermore if we are here the plat_data->fw must have been NULL.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and on request_firmware() failure the plat_data->fw is set to NULL.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was too lazy and paranoid to trust request_firmware but now I see it's even documented.

/* Don't cache a firmware that failed to boot. TODO: fully
* support module unloading at runtime too.
*/
if (sdev->pdata->fw) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need to check, release_firmware() is doing it internally.

@ujfalusi
Copy link
Collaborator

ujfalusi commented Jun 1, 2021

@marc-hb, I can not reproduce the issue you are fixing or the description is not correct.
request_firmware() does tell me that the firmware is missing and thus the probe fails.

@ujfalusi
Copy link
Collaborator

ujfalusi commented Jun 1, 2021

@marc-hb, this is what I get on tgl-h:

  • Add a panic() in the DSP initialization, try and fail to load it.
[15417.419130] sof-audio-pci-intel-tgl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040380
[15417.419303] sof-audio-pci-intel-tgl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[15417.425328] sof-audio-pci-intel-tgl 0000:00:1f.3: use msi interrupt mode
[15417.439615] sof-audio-pci-intel-tgl 0000:00:1f.3: hda codecs found, mask 5
[15417.439618] sof-audio-pci-intel-tgl 0000:00:1f.3: using HDA machine driver skl_hda_dsp_generic now
[15417.439622] sof-audio-pci-intel-tgl 0000:00:1f.3: DMICs detected in NHLT tables: 0
[15417.439739] sof-audio-pci-intel-tgl 0000:00:1f.3: unknown sof_ext_man header type 3 size 0x30
[15417.439744] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware info: version 1:8:0-5d9d2
[15417.439745] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware: ABI 3:18:1 Kernel ABI 3:18:0
[15419.563318] sof-audio-pci-intel-tgl 0000:00:1f.3: error: firmware boot failure
[15419.563324] sof-audio-pci-intel-tgl 0000:00:1f.3: status: fw entered - code 00000005
[15419.563347] sof-audio-pci-intel-tgl 0000:00:1f.3: error: extended rom status:  0x5 0x0 0x4000 0x0 0x0 0x0 0x2530502 0x0
[15419.563348] sof-audio-pci-intel-tgl 0000:00:1f.3: error: failed to boot DSP firmware -5
[15419.563964] sof-audio-pci-intel-tgl 0000:00:1f.3: error: sof_probe_work failed err: -5
  • Temporarily mv /lib/firmware/intel/ elsewhere.
  • Unload and reload modules to try loading it again. Should be missing.
  • No error reported by request_firmware() in kernel logs, the previous SOF firmware version is printed instead!
[15464.997157] sof-audio-pci-intel-tgl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040380
[15464.997342] sof-audio-pci-intel-tgl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[15465.003159] sof-audio-pci-intel-tgl 0000:00:1f.3: use msi interrupt mode
[15465.015473] sof-audio-pci-intel-tgl 0000:00:1f.3: hda codecs found, mask 5
[15465.015476] sof-audio-pci-intel-tgl 0000:00:1f.3: using HDA machine driver skl_hda_dsp_generic now
[15465.015480] sof-audio-pci-intel-tgl 0000:00:1f.3: DMICs detected in NHLT tables: 0
[15465.015512] sof-audio-pci-intel-tgl 0000:00:1f.3: Direct firmware load for intel/sof/sof-tgl-h.ri failed with error -2
[15465.015514] sof-audio-pci-intel-tgl 0000:00:1f.3: error: request firmware intel/sof/sof-tgl-h.ri failed err: -2
[15465.015515] sof-audio-pci-intel-tgl 0000:00:1f.3: you may need to download the firmware from https://github.com/thesofproject/sof-bin/
[15465.015516] sof-audio-pci-intel-tgl 0000:00:1f.3: error: failed to load DSP firmware -2
[15465.016059] sof-audio-pci-intel-tgl 0000:00:1f.3: error: sof_probe_work failed err: -2

It fails as it should when the firmware is not present.
Moving back the working firmware and the audio card probes just fine.

@marc-hb
Copy link
Collaborator Author

marc-hb commented Jun 1, 2021

Thanks for testing this. I thoroughly tested this commit and the description is exactly what I'm experiencing.

You can see the loader code has some platform-specific code, maybe that's why?

I need to test again with your changes anyway, then I will provide an exact SOF commit and panic() location.

@ujfalusi
Copy link
Collaborator

ujfalusi commented Jun 1, 2021

@marc-hb, I have tested without this commit in hope to reproduce the issue it is fixing

@marc-hb
Copy link
Collaborator Author

marc-hb commented Jun 1, 2021

Thanks for testing this. I thoroughly tested this commit and the description is exactly what I'm experiencing.

Sorry, I meant: I thoroughly tested with and without this commit and the description is exactly what I'm experiencing on my APL Up^2

@ujfalusi
Copy link
Collaborator

ujfalusi commented Jun 1, 2021

@marc-hb, I also have an up^2 around but I need to set it up to test on that as well.
It is just odd that I see different behavior...
Never the less, moving the release_firmware() to snd_sof_fw_unload() is the correct thing to do. I think.

@marc-hb
Copy link
Collaborator Author

marc-hb commented Jun 2, 2021

I need to test again with your changes anyway, then I will provide an exact SOF commit and panic() location.

Done, see updated commit message. I've also been using the modprobe scripts at https://github.com/thesofproject/sof-test/tree/1e95bb742af/tools/kmod, please make sure you do the same.

@marc-hb
Copy link
Collaborator Author

marc-hb commented Jun 2, 2021

[ 820.697271] kernel: IO error in rt700_jack_detect_handler, ret -16 in https://sof-ci.01.org/linuxpr/PR2954/build5823/devicetest/?model=CML_RVP_SDW&testcase=check-suspend-resume-5 seems unrelated.

The 16:Write error: -32,Broken pipe in https://sof-ci.01.org/linuxpr/PR2954/build5823/devicetest/?model=BYT_MB_NOCODEC&testcase=test-speaker does not seem related either.

No APL_UP2_HDA was apparently available at the time of this run. Everything else in that run is green.

It is just odd that I see different behavior...

Do you have CONFIG_FW_CACHE=y? I do.

I'm not overly surprised by differences in behavior because as I mentioned above the loader code for APL is slightly different and because request_firmware() has a relatively complex and somewhat documented caching strategy to support loading firmware on resume even before the /lib/firmware filesystem is available. For instance /lib/firmware could be on the network or any other storage requiring firmware.

Now does this "caching" also imply "ignore any new firmware file"? Maybe, maybe not. Maybe there is some SOF-independent error handling bug there in request_firmware() but if releasing firmware on failure avoids that bug then so be it - it's the right thing to do anyway.

Copy link

@lyakh lyakh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure I understand what this is doing.

  1. "Unload and reload modules to try loading it again." - and you did try unloading all SOF modules? Where can the old firmware be kept cached then?
  2. As far as I understand when you add panic() to firmware startup code, the driver still probes fine, only its sof_probe_continue() fails, right? So, then when you unload the driver its snd_sof_device_remove() is called and it calls release_firmware(). After your patch snd_sof_fw_unload() gets called twice: first time when sof_probe_continue() jumps to run_err, second time when you unload the driver. And now sof_probe_continue() is no longer empty, it calls release_firmware() both times, second time with a NULL argument.

Am I missing anything?

@ujfalusi
Copy link
Collaborator

ujfalusi commented Jun 2, 2021

@lyakh, @marc-hb, that is the case if CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y, otherwise the sof_probe_continue() is called directly from the probe and the module loading will fail -> the firmware would not be released.
Calling release_firmware() with NULL is perfectly fine.

When the work is used and the firmware fails to boot then there is no point of keeping it loaded, it can be released. The module will remain loaded, yes, we can not trigger it again to try to load again. The only way to try with a new firmware to rmmod and modprobe the sound modules.

I think the change is OK but I still fail to see how the request_firmware() would not fail if the firmware file is missing from fs. Can it be that systemd does something? I'm using ArtixLinux or Gentoo with openrc and I can not reproduce the issue.
I have CONFIG_FW_CACHE=y and CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y, both apl and tgl-h uses the same firmware related callbacks and other ops are the same (both HDA).

@kv2019i
Copy link
Collaborator

kv2019i commented Jun 2, 2021

I think we need to rootcause why the behaviour is different before we can proceed with this. I'm also getting "error: request firmware intel/sof/sof-tgl.ri failed err: -2" if I rename the FW file after error. I have "CONFIG_FW_CACHE=y" as well.

@kv2019i
Copy link
Collaborator

kv2019i commented Jun 2, 2021

@marc-hb If you set CONFIG_FW_CACHE=n , does the problem disappear?

@plbossart
Copy link
Member

@marc-hb are you still working on this or is this still open? more than 2 weeks since last update...

@marc-hb
Copy link
Collaborator Author

marc-hb commented Jun 18, 2021

This fix is still saving my life regularly so investigating further and answering review comments is still relatively high on my TODO list. However as you've noticed it's not at the very top either. Feel free to close if that helps you managing PRs in this repo, I'm not managing my TODO list in github and I can easily re-open before submitting a new version.

Or how about this middle ground: downgrading this to a draft? Drafts are very easy to exclude for you:
https://github.com/thesofproject/linux/pulls?q=is%3Apr+is%3Aopen+draft%3Afalse
They also appear grey instead of green.

@marc-hb marc-hb marked this pull request as draft June 18, 2021 17:58
@marc-hb marc-hb changed the title ASoC: SOF: loader: release_firmware() on DSP boot failures ASoC: SOF: loader: release_firmware() on failures to avoid batching Jul 2, 2021
@marc-hb marc-hb marked this pull request as ready for review July 2, 2021 01:14
@marc-hb
Copy link
Collaborator Author

marc-hb commented Jul 2, 2021

@marc-hb If you set CONFIG_FW_CACHE=n , does the problem disappear?

No, I reproduced with and without CONFIG_FW_CACHE

I think the change is OK but I still fail to see how the request_firmware() would not fail if the firmware file is missing from fs. Can it be that systemd does something?

I got to the bottom of this: it's not because of caching but because of "batching", an undocumented feature implemented in alloc_lookup_fw_priv(). See new commit message that I just force-pushed and copied into the description (you cannot compare it with the previous commit message because github does not care about commit messages and rewriting commits in general)

The only checkpatch warning at https://sof-ci.01.org/linuxpr/PR2954/build5971/checkpatch/ is
WARNING: Possible unwrapped commit description (prefer a maximum 75 chars per line) because I'm quoting logs

The only thing I changed in this force-push is the commit message, the code is exactly the same as last time. I re-used the same old base to avoid range-diff noise (another thing not supported by github) however this was retested again on a much newer base, more specifically base commit 132b2ee

https://sof-ci.01.org/linuxpr/PR2954/build5971/devicetest/?model=TGLH_RVP_HDA&testcase=check-suspend-resume-5 is the usual rtcwake TIMEOUT

https://sof-ci.01.org/linuxpr/PR2954/build5971/devicetest/?model=APL_UP2_NOCODEC&testcase=check-alsabat-headset-playback is some unrelated alsabat failure

Everything else is green.

@ujfalusi
Copy link
Collaborator

ujfalusi commented Jul 2, 2021

@marc-hb, thank you for the thorough investigation and explanation!

I think there is a reason why Documentation/driver-api/firmware/request_firmware.rst has this written:

request firmware API expected driver use
========================================

Once an API call returns you process the firmware and then release the
firmware.

We load the firmware and then we hold on to it as long as the driver is loaded.
We need to reload the firmware to the DSP at resume, we need a copy of it early on. It might worth revisiting the related code to devm_kmemdup the data, save the size and release the firmware in place. By the look it is a bit more complicated but it is a worthy cleanup candidate..

@ujfalusi ujfalusi self-requested a review July 2, 2021 09:58
ujfalusi
ujfalusi previously approved these changes Jul 2, 2021
Copy link
Collaborator

@ujfalusi ujfalusi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @marc-hb, looks good.

@marc-hb marc-hb requested a review from lyakh July 2, 2021 14:25
* TODO: fully support module unloading at runtime too.
*/
release_firmware(sdev->pdata->fw);
sdev->pdata->fw = NULL;
Copy link
Collaborator

@ranj063 ranj063 Jul 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in terms of what it achieves today , this is fine. But when and if we do start supporting module unload at runtime, won't this need to be moved before snd_sof_remove()?

Copy link
Collaborator Author

@marc-hb marc-hb Jul 2, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ranj063 I don't understand your comment sorry. Do you mean release_firmware() should be invoked before snd_sof_remove() in the future? I don't see why. As @ujfalusi wrote, the only reason we need the struct firmware again is to resume after suspend (especially on platforms without IMR resume), even for that it shouldn't be needed eventually. So releasing struct firmware before or after some releasing other things does not matter, does it? Of course the sooner the better but I don't see any required order or dependency.

I asked the compiler to list all places where we use struct firmware, here is the complete list as of commit 132b2ee

- loader.c
snd_sof_load_firmware_raw()
snd_sof_load_firmware_memcpy()
snd_sof_device_remove() or snd_sof_fw_unload() # this PR
- hda-loader.c
hda_dsp_cl_boot_firmware()
hda_dsp_cl_boot_firmware_iccmax()

It's not used anywhere else with my current .config.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure why the order of release_firmware() would matter, in snd_sof_device_remove() the firmware is not needed, we could have drop it first thing or last thing. It does not really matter.

@ranj063, what does "module unload at runtime" means? Do you want to be able to remove the modules while audio is playing or something else?
Are we preparing for hot-plugable DSPs?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

from what I understood, I think runtime module unload means you load/unload FW modules based on topology. But I could be wrong. And in any cae, we're a bit far from supporting this at the moment. So this PR is good to go for now.

Copy link
Member

@plbossart plbossart left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No objections on the patch proper but if @marc-hb can clean-up the commit message and comments that would be good. they are a bit too verbose for upstream reviews. All you need to mention if the 'request batching' and why it results in the wrong file being used, it's not necessary to include reproduction information outside of the "SOF team".

/* TODO: support module unloading at runtime */
/* Don't cache a firmware that failed to boot.
* TODO: fully support module unloading at runtime too.
*/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't have such plans at the moment, let's remove this to avoid issues when upstreaming.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm confused by this existing TODO, should I leave it as is? Even though I'm adding code below it? Or you asking to remove the comment? But you wrote "we don't have such plans".

I'm confused because we're testing this TODO regularly and it is what this PR fixes.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By editing an existing comment, you make it unclear what exactly Intel will do.
This patch only releases firmware on errors. You can either
a) remove the TODO in a separate patch, or
b) keep it as is for now.

My point was: don't edit something that you didn't modify, and the 'fully' statement is not useful.

Invoke release_firmware() when the firmware fails to boot in
sof_probe_continue().

The request_firmware() framework must be informed of failures in
sof_probe_continue() otherwise its internal "batching"
feature (different from caching) cached the firmware image
forever. Attempts to correct the file in /lib/firmware/ were then
silently and confusingly ignored until the next reboot. Unloading the
drivers did not help because from their disconnected perspective the
firmware had failed so there was nothing to release.

Also leverage the new snd_sof_fw_unload() function to simplify the
snd_sof_device_remove() function.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
Copy link
Member

@plbossart plbossart left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @marc-hb, LGTM. This was a nasty issue to look into.

@marc-hb
Copy link
Collaborator Author

marc-hb commented Jul 7, 2021

"Unload and reload modules to try loading it again." - and you did try unloading all SOF modules?

Yes of course. See below.

Where can the old firmware be kept cached then?

In "batched requests".

As far as I understand when you add panic() to firmware startup code, the driver still probes fine, only its sof_probe_continue() fails, right?

sof_probe_continue() fails indeed and its error handling calls various functions but none invoking release_firmware(). Fixed by this commit.

The drivers appear in lsmod but I don't think you can really say that they "probed fine" because there's no device. aplay -l says "no soundcards found" and /proc/asound/cards has --- no soundcards ---

So, then when you unload the driver its snd_sof_device_remove() is called and it calls release_firmware().

No, when I unload the drivers after a panic then snd_sof_device_remove() is NOT called because there's no device to remove.

After your patch snd_sof_fw_unload() gets called twice: first time when sof_probe_continue() jumps to run_err, second time when you unload the driver.

No, only the first time because there's no device, see above.

And now sof_probe_continue() is no longer empty, it calls release_firmware() both times, second time with a NULL argument.

I don't understand this bit.

@plbossart plbossart requested a review from ranj063 July 7, 2021 15:36
@plbossart
Copy link
Member

let's give @ranj063 a chance to comment, if no objections we can merge.

@plbossart plbossart merged commit 143fbb7 into thesofproject:topic/sof-dev Jul 7, 2021
@marc-hb marc-hb deleted the release-firmware branch September 14, 2021 15:50
@marc-hb
Copy link
Collaborator Author

marc-hb commented Jan 11, 2024

Just discovered this older GitHub issue:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants