]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: SOF: amd: enable soundwire host wake irq mask
authorVijendar Mukunda <Vijendar.Mukunda@amd.com>
Fri, 2 May 2025 15:42:46 +0000 (21:12 +0530)
committerMark Brown <broonie@kernel.org>
Fri, 2 May 2025 23:16:43 +0000 (08:16 +0900)
Enable SoundWire host wake interrupt mask during acp init
sequence based on wake enable checks for each SoundWire manager
instance for ACP7.0 & ACP7.1 platforms.

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-8-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 414151187b44998e70b59a7a7c48c2f88d6eb369..e77554f74c20db7970098b8fe3286f7d380e1f56 100644 (file)
 #define ACP_SW0_EN                             0x3000
 #define ACP_SW1_EN                             0x3C00
 #define ACP70_PME_EN                           0x1400
+#define ACP70_EXTERNAL_INTR_CNTL1              0x1A08
+#define ACP70_SW0_WAKE_EN                      0x1458
+#define ACP70_SW1_WAKE_EN                      0x1460
+#define ACP70_SDW_HOST_WAKE_MASK               0x0C00000
+
 #endif
index 2ad5fbf43c8a366cc54aa854c5292b53901f6ab0..d62ba4f75e4fcc64a08b62b03abc685ee0841d2e 100644 (file)
@@ -563,6 +563,7 @@ static int acp_init(struct snd_sof_dev *sdev)
 {
        const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata);
        struct acp_dev_data *acp_data;
+       unsigned int sdw0_wake_en, sdw1_wake_en;
        int ret;
 
        /* power on */
@@ -591,6 +592,12 @@ static int acp_init(struct snd_sof_dev *sdev)
        switch (acp_data->pci_rev) {
        case ACP70_PCI_ID:
        case ACP71_PCI_ID:
+               sdw0_wake_en = snd_sof_dsp_read(sdev, ACP_DSP_BAR, ACP70_SW0_WAKE_EN);
+               sdw1_wake_en = snd_sof_dsp_read(sdev, ACP_DSP_BAR, ACP70_SW1_WAKE_EN);
+               if (sdw0_wake_en || sdw1_wake_en)
+                       snd_sof_dsp_update_bits(sdev, ACP_DSP_BAR, ACP70_EXTERNAL_INTR_CNTL1,
+                                               ACP70_SDW_HOST_WAKE_MASK, ACP70_SDW_HOST_WAKE_MASK);
+
                snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP70_PME_EN, 1);
                break;
        }