Skip to content

Commit 65ca89c

Browse files
committed
ASoC: intel: atom: Fix breakage for PCM buffer address setup
The commit 2e6b836 ("ASoC: intel: atom: Fix reference to PCM buffer address") changed the reference of PCM buffer address to substream->runtime->dma_addr as the buffer address may change dynamically. However, I forgot that the dma_addr field is still not set up for the CONTINUOUS buffer type (that this driver uses) yet in 5.14 and earlier kernels, and it resulted in garbage I/O. The problem will be fixed in 5.15, but we need to address it quickly for now. The fix is to deduce the address again from the DMA pointer with virt_to_phys(), but from the right one, substream->runtime->dma_area. Fixes: 2e6b836 ("ASoC: intel: atom: Fix reference to PCM buffer address") Reported-and-tested-by: Hans de Goede <[email protected]> Cc: <[email protected]> Acked-by: Mark Brown <[email protected]> Link: https://lore.kernel.org/r/[email protected] Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Takashi Iwai <[email protected]>
1 parent 8903376 commit 65ca89c

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

sound/soc/intel/atom/sst-mfld-platform-pcm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ static void sst_fill_alloc_params(struct snd_pcm_substream *substream,
127127
snd_pcm_uframes_t period_size;
128128
ssize_t periodbytes;
129129
ssize_t buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
130-
u32 buffer_addr = substream->runtime->dma_addr;
130+
u32 buffer_addr = virt_to_phys(substream->runtime->dma_area);
131131

132132
channels = substream->runtime->channels;
133133
period_size = substream->runtime->period_size;

0 commit comments

Comments
 (0)