diff options
author | Andrew Davis | 2023-01-06 12:02:50 -0600 |
---|---|---|
committer | Tom Rini | 2023-01-27 12:51:27 -0500 |
commit | b75ca26b227a6fef9d5fffb9738655cbcbd8379b (patch) | |
tree | a5b2084b1e5cef41efea6564614a00e663e15681 /common | |
parent | 9787ecfd0d8fbfd1835a8afe4fe815cad7e7e46b (diff) |
common: bouncebuf: Use dma-mapping for cache ops
This matches how this would be done in Linux and these functions
do the alignment for us which makes the code look cleaner.
Signed-off-by: Andrew Davis <afd@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common')
-rw-r--r-- | common/bouncebuf.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/common/bouncebuf.c b/common/bouncebuf.c index 6d98920de66..93a35668cc2 100644 --- a/common/bouncebuf.c +++ b/common/bouncebuf.c @@ -12,6 +12,7 @@ #include <errno.h> #include <bouncebuf.h> #include <asm/cache.h> +#include <linux/dma-mapping.h> static int addr_aligned(struct bounce_buffer *state) { @@ -59,9 +60,9 @@ int bounce_buffer_start_extalign(struct bounce_buffer *state, void *data, * Flush data to RAM so DMA reads can pick it up, * and any CPU writebacks don't race with DMA writes */ - flush_dcache_range((unsigned long)state->bounce_buffer, - (unsigned long)(state->bounce_buffer) + - state->len_aligned); + dma_map_single(state->bounce_buffer, + state->len_aligned, + DMA_BIDIRECTIONAL); return 0; } @@ -78,9 +79,9 @@ int bounce_buffer_stop(struct bounce_buffer *state) { if (state->flags & GEN_BB_WRITE) { /* Invalidate cache so that CPU can see any newly DMA'd data */ - invalidate_dcache_range((unsigned long)state->bounce_buffer, - (unsigned long)(state->bounce_buffer) + - state->len_aligned); + dma_unmap_single((dma_addr_t)state->bounce_buffer, + state->len_aligned, + DMA_BIDIRECTIONAL); } if (state->bounce_buffer == state->user_buffer) |