ASoC: Intel: avs: Relocate DSP status registers
authorCezary Rojewski <cezary.rojewski@intel.com>
Mon, 7 Apr 2025 11:23:46 +0000 (13:23 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 7 Apr 2025 13:39:58 +0000 (14:39 +0100)
The firmware status and error registers are not part of SRAM on ACE
platforms. As these registers take part in IPC on ACE and cAVS platforms
both, relocate the field denoting their offset to Host-IPC descriptor.

In consequence, code remains cohesive with the ACE specs while still
maintaining high readability for the cAVS platforms.

Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Acked-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Link: https://patch.msgid.link/20250407112352.3720779-5-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/avs/avs.h
sound/soc/intel/avs/core.c
sound/soc/intel/avs/loader.c
sound/soc/intel/avs/registers.h

index 201897c5bdc04146240be7c77bfd55569ca93731..ec5502f9d5cb1daf44361dac3ba3edd442c0bb2b 100644 (file)
@@ -81,7 +81,6 @@ extern const struct avs_dsp_ops avs_tgl_dsp_ops;
 struct avs_sram_spec {
        const u32 base_offset;
        const u32 window_size;
-       const u32 rom_status_offset;
 };
 
 struct avs_hipc_spec {
@@ -93,6 +92,7 @@ struct avs_hipc_spec {
        const u32 rsp_offset;
        const u32 rsp_busy_mask;
        const u32 ctl_offset;
+       const u32 sts_offset;
 };
 
 /* Platform specific descriptor */
index 72a14dca1a1edf4f620881aaf457256f008d64ea..1495e163d47efe2f7aac950438ba007e5abe8108 100644 (file)
@@ -755,13 +755,11 @@ static const struct dev_pm_ops avs_dev_pm = {
 static const struct avs_sram_spec skl_sram_spec = {
        .base_offset = SKL_ADSP_SRAM_BASE_OFFSET,
        .window_size = SKL_ADSP_SRAM_WINDOW_SIZE,
-       .rom_status_offset = SKL_ADSP_SRAM_BASE_OFFSET,
 };
 
 static const struct avs_sram_spec apl_sram_spec = {
        .base_offset = APL_ADSP_SRAM_BASE_OFFSET,
        .window_size = APL_ADSP_SRAM_WINDOW_SIZE,
-       .rom_status_offset = APL_ADSP_SRAM_BASE_OFFSET,
 };
 
 static const struct avs_hipc_spec skl_hipc_spec = {
@@ -773,6 +771,19 @@ static const struct avs_hipc_spec skl_hipc_spec = {
        .rsp_offset = SKL_ADSP_REG_HIPCT,
        .rsp_busy_mask = SKL_ADSP_HIPCT_BUSY,
        .ctl_offset = SKL_ADSP_REG_HIPCCTL,
+       .sts_offset = SKL_ADSP_SRAM_BASE_OFFSET,
+};
+
+static const struct avs_hipc_spec apl_hipc_spec = {
+       .req_offset = SKL_ADSP_REG_HIPCI,
+       .req_ext_offset = SKL_ADSP_REG_HIPCIE,
+       .req_busy_mask = SKL_ADSP_HIPCI_BUSY,
+       .ack_offset = SKL_ADSP_REG_HIPCIE,
+       .ack_done_mask = SKL_ADSP_HIPCIE_DONE,
+       .rsp_offset = SKL_ADSP_REG_HIPCT,
+       .rsp_busy_mask = SKL_ADSP_HIPCT_BUSY,
+       .ctl_offset = SKL_ADSP_REG_HIPCCTL,
+       .sts_offset = APL_ADSP_SRAM_BASE_OFFSET,
 };
 
 static const struct avs_hipc_spec cnl_hipc_spec = {
@@ -784,6 +795,7 @@ static const struct avs_hipc_spec cnl_hipc_spec = {
        .rsp_offset = CNL_ADSP_REG_HIPCTDR,
        .rsp_busy_mask = CNL_ADSP_HIPCTDR_BUSY,
        .ctl_offset = CNL_ADSP_REG_HIPCCTL,
+       .sts_offset = APL_ADSP_SRAM_BASE_OFFSET,
 };
 
 static const struct avs_spec skl_desc = {
@@ -803,7 +815,7 @@ static const struct avs_spec apl_desc = {
        .core_init_mask = 3,
        .attributes = AVS_PLATATTR_IMR,
        .sram = &apl_sram_spec,
-       .hipc = &skl_hipc_spec,
+       .hipc = &apl_hipc_spec,
 };
 
 static const struct avs_spec cnl_desc = {
index ecf050c2c0c7f4ef4f13c88212a40268a331eaf3..138e4e9de5e3095de153ef7d3760367537fb592e 100644 (file)
@@ -310,7 +310,7 @@ avs_hda_init_rom(struct avs_dev *adev, unsigned int dma_id, bool purge)
        }
 
        /* await ROM init */
-       ret = snd_hdac_adsp_readl_poll(adev, spec->sram->rom_status_offset, reg,
+       ret = snd_hdac_adsp_readl_poll(adev, spec->hipc->sts_offset, reg,
                                       (reg & 0xF) == AVS_ROM_INIT_DONE ||
                                       (reg & 0xF) == APL_ROM_FW_ENTERED,
                                       AVS_ROM_INIT_POLLING_US, APL_ROM_INIT_TIMEOUT_US);
index 368ede05f2cdaa2ead64776cb3d36ba537fb12ae..4db0cdf68ffc7a693696317ee29e4ed0920caa61 100644 (file)
@@ -74,7 +74,7 @@
 #define APL_ADSP_SRAM_WINDOW_SIZE      0x20000
 
 /* Constants used when accessing SRAM, space shared with firmware */
-#define AVS_FW_REG_BASE(adev)          ((adev)->spec->sram->base_offset)
+#define AVS_FW_REG_BASE(adev)          ((adev)->spec->hipc->sts_offset)
 #define AVS_FW_REG_STATUS(adev)                (AVS_FW_REG_BASE(adev) + 0x0)
 #define AVS_FW_REG_ERROR(adev)         (AVS_FW_REG_BASE(adev) + 0x4)