Skip to content

Commit 9811947

Browse files
ajitkupandeyplbossart
authored andcommitted
ASoC: SOF: amd: Move group register configuration to acp-loader
We are using PTE_GRP1 for DMA operations to load firmware binaries but we are enabling PTE_GRP and flushing ATU cache much before in probe callbacks. This can cause issue if we try to load firmware runtime during system resume as probe callback will not be invoked hence PTE_GRP will not be enabled. Moreover it makes more sense to flush the cache after register configuration. Move PTE group register configuration to acp-loader within pre_fw_run callback to avoid such issue. Signed-off-by: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
1 parent b900bb4 commit 9811947

File tree

2 files changed

+9
-14
lines changed

2 files changed

+9
-14
lines changed

sound/soc/sof/amd/acp-loader.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,12 @@ static void configure_pte_for_fw_loading(int type, int num_pages, struct acp_dev
127127
return;
128128
}
129129

130+
/* Group Enable */
131+
snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACPAXI2AXI_ATU_BASE_ADDR_GRP_1,
132+
ACP_SRAM_PTE_OFFSET | BIT(31));
133+
snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACPAXI2AXI_ATU_PAGE_SIZE_GRP_1,
134+
PAGE_SIZE_4K_ENABLE);
135+
130136
for (page_idx = 0; page_idx < num_pages; page_idx++) {
131137
low = lower_32_bits(addr);
132138
high = upper_32_bits(addr);
@@ -136,6 +142,9 @@ static void configure_pte_for_fw_loading(int type, int num_pages, struct acp_dev
136142
offset += 8;
137143
addr += PAGE_SIZE;
138144
}
145+
146+
/* Flush ATU Cache after PTE Update */
147+
snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACPAXI2AXI_ATU_CTRL, ACP_ATU_CACHE_INVALID);
139148
}
140149

141150
/* pre fw run operations */

sound/soc/sof/amd/acp.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,6 @@ static int smn_read(struct pci_dev *dev, u32 smn_addr, u32 *data)
3636
return 0;
3737
}
3838

39-
static void configure_acp_groupregisters(struct acp_dev_data *adata)
40-
{
41-
struct snd_sof_dev *sdev = adata->dev;
42-
43-
/* Group Enable */
44-
snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACPAXI2AXI_ATU_BASE_ADDR_GRP_1,
45-
ACP_SRAM_PTE_OFFSET | BIT(31));
46-
snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACPAXI2AXI_ATU_PAGE_SIZE_GRP_1,
47-
PAGE_SIZE_4K_ENABLE);
48-
49-
snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACPAXI2AXI_ATU_CTRL, ACP_ATU_CACHE_INVALID);
50-
}
51-
5239
static void init_dma_descriptor(struct acp_dev_data *adata)
5340
{
5441
struct snd_sof_dev *sdev = adata->dev;
@@ -264,7 +251,6 @@ static int acp_memory_init(struct snd_sof_dev *sdev)
264251

265252
snd_sof_dsp_update_bits(sdev, ACP_DSP_BAR, ACP_DSP_SW_INTR_CNTL,
266253
ACP_DSP_INTR_EN_MASK, ACP_DSP_INTR_EN_MASK);
267-
configure_acp_groupregisters(adata);
268254
init_dma_descriptor(adata);
269255

270256
return 0;

0 commit comments

Comments
 (0)