ASoC: SOF: Intel: check fw_context_save for library reload
authorRander Wang <rander.wang@intel.com>
Fri, 15 Dec 2023 08:31:02 +0000 (16:31 +0800)
committerMark Brown <broonie@kernel.org>
Fri, 15 Dec 2023 12:57:57 +0000 (12:57 +0000)
If fw_context_save is defined by fw, driver can skip library reload on
d3 exit or reload library.

Signed-off-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://msgid.link/r/20231215083102.3064200-4-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-loader.c

index 1805cf754beb33a09be7a76253228400a0080893..b81f231abee3efa497f8bf1aec46c955f3c3b706 100644 (file)
@@ -519,14 +519,15 @@ int hda_dsp_ipc4_load_library(struct snd_sof_dev *sdev,
                              struct sof_ipc4_fw_library *fw_lib, bool reload)
 {
        struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
+       struct sof_ipc4_fw_data *ipc4_data = sdev->private;
        struct hdac_ext_stream *hext_stream;
        struct firmware stripped_firmware;
        struct sof_ipc4_msg msg = {};
        struct snd_dma_buffer dmab;
        int ret, ret1;
 
-       /* IMR booting will restore the libraries as well, skip the loading */
-       if (reload && hda->booted_from_imr)
+       /* if IMR booting is enabled and fw context is saved for D3 state, skip the loading */
+       if (reload && hda->booted_from_imr && ipc4_data->fw_context_save)
                return 0;
 
        /* the fw_lib has been verified during loading, we can trust the validity here */