ASoC: SOF: Intel: hda: Add flag to indicate that the firmware is IMR booted
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Thu, 20 Oct 2022 12:12:33 +0000 (15:12 +0300)
committerMark Brown <broonie@kernel.org>
Fri, 21 Oct 2022 12:05:06 +0000 (13:05 +0100)
Dynamic loading of external libraries should not be done if the firmware
was booted from IMR since in that case the libraries will be restored along
with the basefw.

The booted_from_imr flag is introduced and set to true if the IMR boot was
successful and to false if cold booting is executed.

The reason for the new flag is that guessing from existing flags, used to
decide if we should try booting from IMR or not is not going to be robust
as the IMR boot itself can fail and in that case a full, cold boot is
executed.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Chao Song <chao.song@intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Link: https://lore.kernel.org/r/20221020121238.18339-15-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-loader.c
sound/soc/sof/intel/hda.h

index 147ddc5ee932a8df867d0bccf2f8ee5d4b80f36f..5ed524e166d26f8d935bd840581815441d4e805d 100644 (file)
@@ -396,12 +396,16 @@ int hda_dsp_cl_boot_firmware(struct snd_sof_dev *sdev)
                dev_dbg(sdev->dev, "IMR restore supported, booting from IMR directly\n");
                hda->boot_iteration = 0;
                ret = hda_dsp_boot_imr(sdev);
-               if (!ret)
+               if (!ret) {
+                       hda->booted_from_imr = true;
                        return 0;
+               }
 
                dev_warn(sdev->dev, "IMR restore failed, trying to cold boot\n");
        }
 
+       hda->booted_from_imr = false;
+
        chip_info = desc->chip_info;
 
        if (sdev->basefw.fw->size <= sdev->basefw.payload_offset) {
index 2ab3c3840b926925803d39a89b1b9a07dff76047..d004bcbb632662e01f9c49e6f598f4fc5a0aaaf2 100644 (file)
@@ -481,6 +481,7 @@ enum sof_hda_D0_substate {
 struct sof_intel_hda_dev {
        bool imrboot_supported;
        bool skip_imr_boot;
+       bool booted_from_imr;
 
        int boot_iteration;