Skip to content

Commit 2f77dac

Browse files
sneha-voonakv2019i
authored andcommitted
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 b062075 commit 2f77dac

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
@@ -150,6 +150,16 @@ int platform_init(struct sof *sof)
150150
/*CONFIG_SYSTICK_PERIOD hardcoded as 200000*/
151151
sa_init(sof, 200000);
152152
clock_set_freq(CLK_CPU(cpu_get_id()), CLK_MAX_CPU_HZ);
153+
154+
/*
155+
* Clear DMA linked-list IO stutter and PWA defaults before
156+
* channel setup. ACP_DMA_CH_LINKED_LIST_EN DMAChIOStutEn
157+
* (bits 24:15) defaults to all 1s.
158+
*/
159+
io_reg_write(PU_REGISTER_BASE + ACP_DMA_CH_LINKED_LIST_EN, 0);
160+
io_reg_write(PU_REGISTER_BASE + ACP_DMA_IO_STUT_TIMER_LIMIT, 0);
161+
io_reg_write(PU_REGISTER_BASE + ACP_DMA_CH_PWA_CTRL, 0);
162+
153163
/* init DMA */
154164
ret = dmac_init(sof);
155165
if (ret < 0) {

0 commit comments

Comments
 (0)