Re: [5.14 regression] "ASoC: intel: atom: Fix reference to PCM buffer address" breaks Intel SST audio

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 19 Aug 2021 16:45:19 +0200,
Hans de Goede wrote:
> 
> Hi,
> 
> On 8/19/21 4:42 PM, Hans de Goede wrote:
> > Hi All,
> > 
> > After rebasing a set of bytcr_rt5640 patches, on top of asoc/for-next
> > I noticed that playing back audio would only generate random-noise / buzzing
> > (I did not try recording any audio). 
> > 
> > After poking at this for a while I've found the culprit:
> > 
> > 2e6b836312a4 ("ASoC: intel: atom: Fix reference to PCM buffer address")
> > 
> > If I revert that single commit then audio on Intel Bay Trail and
> > Cherry Trail devices works fine again with 5.14.
> > 
> > This is with a Fedora 34 userspace using pipewire as audiodaemon
> > 
> > I'm not sure what is going on here, but since the old code
> > changed by the broken commit has worked fine for ages and
> > given where we are in the devel-cycle I think it might be best
> > to just revert 2e6b836312a4 again.
> 
> p.s. to be clear I noticed this after rebasing on top of asoc/for-next
> but the troublesome commit is actually in Linus tree now and thus
> will hit end users once 5.14 is released.
> 
> (the troublesome commit landed in 5.14-rc6 and my previous tests
> were with 5.14-rc5)

Ah, the commit might be problematic on 5.14 where dma_addr isn't set
yet for the CONTINUOUS buffer type (which was fixed in sound.git
for-next branch).

Could you try the patch below?


thanks,

Takashi

---
--- a/sound/soc/intel/atom/sst-mfld-platform-pcm.c
+++ b/sound/soc/intel/atom/sst-mfld-platform-pcm.c
@@ -127,7 +127,7 @@ static void sst_fill_alloc_params(struct snd_pcm_substream *substream,
 	snd_pcm_uframes_t period_size;
 	ssize_t periodbytes;
 	ssize_t buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
-	u32 buffer_addr = substream->runtime->dma_addr;
+	u32 buffer_addr = virt_to_phys(substream->runtime->dma_area);
 
 	channels = substream->runtime->channels;
 	period_size = substream->runtime->period_size;



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux