You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.4 KiB
Diff
62 lines
2.4 KiB
Diff
From 8a01a25d0ad7e9d06f64fddae871deb91c3988ac Mon Sep 17 00:00:00 2001
|
|
From: Takashi Iwai <tiwai@suse.de>
|
|
Date: Tue, 4 Sep 2018 17:58:54 +0200
|
|
Subject: [PATCH] staging: bcm2835-audio: Use coherent device buffers
|
|
|
|
commit ad29c6e6cbf6f2af7362b043adad51a3be3d39c7 upstream.
|
|
|
|
The memory access to the pages allocated with
|
|
SNDRV_DMA_TYPE_CONTINUOUS are basically non-coherent, and it becomes a
|
|
problem when a process accesses via mmap.
|
|
|
|
For the more consistent access, use the device coherent memory, just
|
|
by replacing the call pattern in the allocator helpers.
|
|
|
|
The only point we need to be careful for is the device object passed
|
|
there; since bcm2835-audio driver creates fake devices and each card
|
|
is created on top of that, we need to pass its parent device as the
|
|
real device object.
|
|
|
|
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
Tested-by: Stefan Wahren <stefan.wahren@i2se.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
.../vc04_services/bcm2835-audio/bcm2835-pcm.c | 12 ++++++------
|
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
|
|
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c
|
|
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c
|
|
@@ -345,8 +345,8 @@ int snd_bcm2835_new_pcm(struct bcm2835_c
|
|
|
|
/* pre-allocation of buffers */
|
|
/* NOTE: this may fail */
|
|
- snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS,
|
|
- snd_dma_continuous_data(GFP_KERNEL),
|
|
+ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
|
|
+ chip->card->dev->parent,
|
|
snd_bcm2835_playback_hw.buffer_bytes_max,
|
|
snd_bcm2835_playback_hw.buffer_bytes_max);
|
|
|
|
@@ -371,8 +371,8 @@ int snd_bcm2835_new_spdif_pcm(struct bcm
|
|
|
|
/* pre-allocation of buffers */
|
|
/* NOTE: this may fail */
|
|
- snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_CONTINUOUS,
|
|
- snd_dma_continuous_data(GFP_KERNEL),
|
|
+ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
|
|
+ chip->card->dev->parent,
|
|
snd_bcm2835_playback_spdif_hw.buffer_bytes_max, snd_bcm2835_playback_spdif_hw.buffer_bytes_max);
|
|
|
|
return 0;
|
|
@@ -404,8 +404,8 @@ int snd_bcm2835_new_simple_pcm(struct bc
|
|
|
|
snd_pcm_lib_preallocate_pages_for_all(
|
|
pcm,
|
|
- SNDRV_DMA_TYPE_CONTINUOUS,
|
|
- snd_dma_continuous_data(GFP_KERNEL),
|
|
+ SNDRV_DMA_TYPE_DEV,
|
|
+ chip->card->dev->parent,
|
|
snd_bcm2835_playback_hw.buffer_bytes_max,
|
|
snd_bcm2835_playback_hw.buffer_bytes_max);
|
|
|