Skip to content

Commit a2e2cf2

Browse files
committed
acp_7_x: clear DMA IO stutter and PWA defaults to fix I2S loopback noise
ACP DMA linked-list, IO stutter, and PWA control registers retain power-on defaults that can affect I2S DMA transfers: - ACP_DMA_CH_LINKED_LIST_EN: DMAChIOStutEn (bits 24:15) defaults to all 1s - ACP_DMA_IO_STUT_TIMER_LIMIT: IO stutter timer defaults are non-zero - ACP_DMA_CH_PWA_CTRL: PWA DMA control defaults are enabled Clear these registers during platform init, before DMA channel setup, to disable DMA IO stutter and PWA features that cause I2S loopback noise. Signed-off-by: sneha-voona <sneha.voona@amd.com>
1 parent 77a0f55 commit a2e2cf2

2 files changed

Lines changed: 13 additions & 0 deletions

File tree

‎src/platform/amd/acp_7_x/include/platform/platform_misc.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
#define ACP_SRBM_CLIENT_RDDATA 0x1241BF4
2525
#define ACP_SRBM_CYCLE_STS 0x1241BF8
2626
#define ACP_SRBM_CLIENT_CONFIG 0x1241BFC
27+
#define ACP_DMA_CH_LINKED_LIST_EN 0x124012C
28+
#define ACP_DMA_IO_STUT_TIMER_LIMIT 0x1240130
29+
#define ACP_DMA_CH_PWA_CTRL 0x1240138
2730

2831
/* Registers from SYSTEMPLL2P0_N3_BUS_CSR_SNAP_6 block ACP_7X */
2932
#define ACP_7X_SYSTEMPLL2P0_N3_BUS_CSR_SNAP_6_REFCLK_BRDS 0x6D204

‎src/platform/amd/acp_7_x/platform.c‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,16 @@ int platform_init(struct sof *sof)
155155
mp1_mailbox_send(ACPSMC_MSG_PllPowerState, ACP_AUDIOPLL_POWER_ON_REQ);
156156
acp_change_clock_notify(CLK_MAX_CPU_HZ);
157157
clock_set_freq(CLK_CPU(cpu_get_id()), CLK_MAX_CPU_HZ);
158+
159+
/*
160+
* Clear DMA linked-list IO stutter and PWA defaults before
161+
* channel setup. ACP_DMA_CH_LINKED_LIST_EN DMAChIOStutEn
162+
* (bits 24:15) defaults to all 1s.
163+
*/
164+
io_reg_write(PU_REGISTER_BASE + ACP_DMA_CH_LINKED_LIST_EN, 0);
165+
io_reg_write(PU_REGISTER_BASE + ACP_DMA_IO_STUT_TIMER_LIMIT, 0);
166+
io_reg_write(PU_REGISTER_BASE + ACP_DMA_CH_PWA_CTRL, 0);
167+
158168
/* init DMA */
159169
ret = dmac_init(sof);
160170
if (ret < 0) {

0 commit comments

Comments
 (0)