ASoC: Intel: avs: Enact power gating policy
authorCezary Rojewski <cezary.rojewski@intel.com>
Thu, 27 Oct 2022 12:47:02 +0000 (14:47 +0200)
committerMark Brown <broonie@kernel.org>
Fri, 28 Oct 2022 12:04:39 +0000 (13:04 +0100)
Update all firmware loading functions to also account for the power
gating policy. As module loading routine is missing the chicken bits
manipulation entirely, add the entire set there.

Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://lore.kernel.org/r/20221027124702.1761002-10-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/avs/loader.c
sound/soc/intel/avs/pcm.c

index eb10e45..56bb0a5 100644 (file)
@@ -224,11 +224,19 @@ static int avs_cldma_load_module(struct avs_dev *adev, struct avs_module_entry *
        if (ret < 0)
                return ret;
 
+       avs_hda_power_gating_enable(adev, false);
+       avs_hda_clock_gating_enable(adev, false);
+       avs_hda_l1sen_enable(adev, false);
+
        hda_cldma_set_data(cl, (void *)mod->data, mod->size);
        hda_cldma_transfer(cl, msecs_to_jiffies(AVS_CLDMA_START_DELAY_MS));
        ret = avs_ipc_load_modules(adev, &mentry->module_id, 1);
        hda_cldma_stop(cl);
 
+       avs_hda_l1sen_enable(adev, true);
+       avs_hda_clock_gating_enable(adev, true);
+       avs_hda_power_gating_enable(adev, true);
+
        if (ret) {
                dev_err(adev->dev, "load module %d failed: %d\n", mentry->module_id, ret);
                avs_release_last_firmware(adev);
@@ -605,6 +613,7 @@ int avs_dsp_boot_firmware(struct avs_dev *adev, bool purge)
        for (i = 1; i < adev->fw_cfg.max_libs_count; i++)
                memset(adev->lib_names[i], 0, AVS_LIB_NAME_SIZE);
 
+       avs_hda_power_gating_enable(adev, false);
        avs_hda_clock_gating_enable(adev, false);
        avs_hda_l1sen_enable(adev, false);
 
@@ -625,6 +634,7 @@ int avs_dsp_boot_firmware(struct avs_dev *adev, bool purge)
 reenable_gating:
        avs_hda_l1sen_enable(adev, true);
        avs_hda_clock_gating_enable(adev, true);
+       avs_hda_power_gating_enable(adev, true);
 
        if (ret < 0)
                return ret;
index 157d25e..ca624fb 100644 (file)
@@ -737,6 +737,7 @@ static int avs_component_load_libraries(struct avs_soc_component *acomp)
        if (ret < 0)
                return ret;
 
+       avs_hda_power_gating_enable(adev, false);
        avs_hda_clock_gating_enable(adev, false);
        avs_hda_l1sen_enable(adev, false);
 
@@ -744,6 +745,7 @@ static int avs_component_load_libraries(struct avs_soc_component *acomp)
 
        avs_hda_l1sen_enable(adev, true);
        avs_hda_clock_gating_enable(adev, true);
+       avs_hda_power_gating_enable(adev, true);
 
        if (!ret)
                ret = avs_module_info_init(adev, false);