Skip to content

Commit 3ee257a

Browse files
Hemalatha Pinnamreddybroonie
authored andcommitted
ASoC: amd: acp: Audio is not resuming after s0ix
Audio fails to resume after system exits suspend mode due to accessing incorrect ring buffer address during resume. This patch resolves issue by selecting correct address based on the ACP version. Fixes: f6f7d25 ("ASoC: amd: acp: Add pte configuration for ACP7.0 platform") Signed-off-by: Hemalatha Pinnamreddy <hemalatha.pinnamreddy2@amd.com> Signed-off-by: Raghavendra Prasad Mallela <raghavendraprasad.mallela@amd.com> Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Link: https://patch.msgid.link/20251203064650.2554625-1-raghavendraprasad.mallela@amd.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 270d32c commit 3ee257a

1 file changed

Lines changed: 24 additions & 6 deletions

File tree

sound/soc/amd/acp/acp-legacy-common.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -219,15 +219,21 @@ static int set_acp_i2s_dma_fifo(struct snd_pcm_substream *substream,
219219
SP_PB_FIFO_ADDR_OFFSET;
220220
reg_fifo_addr = ACP_I2S_TX_FIFOADDR(chip);
221221
reg_fifo_size = ACP_I2S_TX_FIFOSIZE(chip);
222-
phy_addr = I2S_SP_TX_MEM_WINDOW_START + stream->reg_offset;
222+
if (chip->acp_rev >= ACP70_PCI_ID)
223+
phy_addr = ACP7x_I2S_SP_TX_MEM_WINDOW_START;
224+
else
225+
phy_addr = I2S_SP_TX_MEM_WINDOW_START + stream->reg_offset;
223226
writel(phy_addr, chip->base + ACP_I2S_TX_RINGBUFADDR(chip));
224227
} else {
225228
reg_dma_size = ACP_I2S_RX_DMA_SIZE(chip);
226229
acp_fifo_addr = rsrc->sram_pte_offset +
227230
SP_CAPT_FIFO_ADDR_OFFSET;
228231
reg_fifo_addr = ACP_I2S_RX_FIFOADDR(chip);
229232
reg_fifo_size = ACP_I2S_RX_FIFOSIZE(chip);
230-
phy_addr = I2S_SP_RX_MEM_WINDOW_START + stream->reg_offset;
233+
if (chip->acp_rev >= ACP70_PCI_ID)
234+
phy_addr = ACP7x_I2S_SP_RX_MEM_WINDOW_START;
235+
else
236+
phy_addr = I2S_SP_RX_MEM_WINDOW_START + stream->reg_offset;
231237
writel(phy_addr, chip->base + ACP_I2S_RX_RINGBUFADDR(chip));
232238
}
233239
break;
@@ -238,15 +244,21 @@ static int set_acp_i2s_dma_fifo(struct snd_pcm_substream *substream,
238244
BT_PB_FIFO_ADDR_OFFSET;
239245
reg_fifo_addr = ACP_BT_TX_FIFOADDR(chip);
240246
reg_fifo_size = ACP_BT_TX_FIFOSIZE(chip);
241-
phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset;
247+
if (chip->acp_rev >= ACP70_PCI_ID)
248+
phy_addr = ACP7x_I2S_BT_TX_MEM_WINDOW_START;
249+
else
250+
phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset;
242251
writel(phy_addr, chip->base + ACP_BT_TX_RINGBUFADDR(chip));
243252
} else {
244253
reg_dma_size = ACP_BT_RX_DMA_SIZE(chip);
245254
acp_fifo_addr = rsrc->sram_pte_offset +
246255
BT_CAPT_FIFO_ADDR_OFFSET;
247256
reg_fifo_addr = ACP_BT_RX_FIFOADDR(chip);
248257
reg_fifo_size = ACP_BT_RX_FIFOSIZE(chip);
249-
phy_addr = I2S_BT_TX_MEM_WINDOW_START + stream->reg_offset;
258+
if (chip->acp_rev >= ACP70_PCI_ID)
259+
phy_addr = ACP7x_I2S_BT_RX_MEM_WINDOW_START;
260+
else
261+
phy_addr = I2S_BT_RX_MEM_WINDOW_START + stream->reg_offset;
250262
writel(phy_addr, chip->base + ACP_BT_RX_RINGBUFADDR(chip));
251263
}
252264
break;
@@ -257,15 +269,21 @@ static int set_acp_i2s_dma_fifo(struct snd_pcm_substream *substream,
257269
HS_PB_FIFO_ADDR_OFFSET;
258270
reg_fifo_addr = ACP_HS_TX_FIFOADDR;
259271
reg_fifo_size = ACP_HS_TX_FIFOSIZE;
260-
phy_addr = I2S_HS_TX_MEM_WINDOW_START + stream->reg_offset;
272+
if (chip->acp_rev >= ACP70_PCI_ID)
273+
phy_addr = ACP7x_I2S_HS_TX_MEM_WINDOW_START;
274+
else
275+
phy_addr = I2S_HS_TX_MEM_WINDOW_START + stream->reg_offset;
261276
writel(phy_addr, chip->base + ACP_HS_TX_RINGBUFADDR);
262277
} else {
263278
reg_dma_size = ACP_HS_RX_DMA_SIZE;
264279
acp_fifo_addr = rsrc->sram_pte_offset +
265280
HS_CAPT_FIFO_ADDR_OFFSET;
266281
reg_fifo_addr = ACP_HS_RX_FIFOADDR;
267282
reg_fifo_size = ACP_HS_RX_FIFOSIZE;
268-
phy_addr = I2S_HS_RX_MEM_WINDOW_START + stream->reg_offset;
283+
if (chip->acp_rev >= ACP70_PCI_ID)
284+
phy_addr = ACP7x_I2S_HS_RX_MEM_WINDOW_START;
285+
else
286+
phy_addr = I2S_HS_RX_MEM_WINDOW_START + stream->reg_offset;
269287
writel(phy_addr, chip->base + ACP_HS_RX_RINGBUFADDR);
270288
}
271289
break;

0 commit comments

Comments
 (0)