]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ASoC: SOF: amd: enable ACP_PME_EN register for ACP7.0 & ACP7.1 platforms
authorVijendar Mukunda <Vijendar.Mukunda@amd.com>
Fri, 2 May 2025 15:42:44 +0000 (21:12 +0530)
committerMark Brown <broonie@kernel.org>
Fri, 2 May 2025 23:16:42 +0000 (08:16 +0900)
As per design flow for ACP7.0 & ACP7.1 platforms, enable ACP_PME_EN
register for below scenarios.
1. During acp init sequence
2. During resume sequence for SoundWire ClockStop power mode.

Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://patch.msgid.link/20250502154445.3008598-6-Vijendar.Mukunda@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/amd/acp-dsp-offset.h
sound/soc/sof/amd/acp.c

index ecdcae07ace7f1d854b8f94d3fdd7468eb3d346c..414151187b44998e70b59a7a7c48c2f88d6eb369 100644 (file)
 
 #define ACP_SW0_EN                             0x3000
 #define ACP_SW1_EN                             0x3C00
+#define ACP70_PME_EN                           0x1400
 #endif
index ead31aee5e6fa6a98cf744870756a5ad5dd62197..615ed7ff384631cfd8eb58bf5394dbef4ea4497f 100644 (file)
@@ -570,9 +570,11 @@ static int acp_dsp_reset(struct snd_sof_dev *sdev)
 
 static int acp_init(struct snd_sof_dev *sdev)
 {
+       struct acp_dev_data *acp_data;
        int ret;
 
        /* power on */
+       acp_data = sdev->pdata->hw_pdata;
        ret = acp_power_on(sdev);
        if (ret) {
                dev_err(sdev->dev, "ACP power on failed\n");
@@ -581,7 +583,16 @@ static int acp_init(struct snd_sof_dev *sdev)
 
        snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_CONTROL, 0x01);
        /* Reset */
-       return acp_reset(sdev);
+       ret = acp_reset(sdev);
+       if (ret)
+               return ret;
+       switch (acp_data->pci_rev) {
+       case ACP70_PCI_ID:
+       case ACP71_PCI_ID:
+               snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP70_PME_EN, 1);
+               break;
+       }
+       return 0;
 }
 
 static bool check_acp_sdw_enable_status(struct snd_sof_dev *sdev)
@@ -646,6 +657,12 @@ int amd_sof_acp_resume(struct snd_sof_dev *sdev)
                }
                return acp_memory_init(sdev);
        }
+       switch (acp_data->pci_rev) {
+       case ACP70_PCI_ID:
+       case ACP71_PCI_ID:
+               snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP70_PME_EN, 1);
+               break;
+       }
 
        return acp_dsp_reset(sdev);
 }