diff options
author | Lucas Stach <dev@lynxeye.de> | 2015-03-05 22:50:02 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-03-06 07:52:02 +0100 |
commit | cdb471b023c19cb55dc0af74284d8c41b5a0aa4f (patch) | |
tree | abbb9e5a8fcb26b507dc69671990c093e4555146 | |
parent | 381f034ed607042fa171673b6c4d0150745842e8 (diff) | |
download | barebox-cdb471b023c19cb55dc0af74284d8c41b5a0aa4f.tar.gz barebox-cdb471b023c19cb55dc0af74284d8c41b5a0aa4f.tar.xz |
ARM: implement streaming DMA ops
Signed-off-by: Lucas Stach <dev@lynxeye.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | arch/arm/cpu/mmu.c | 24 | ||||
-rw-r--r-- | arch/arm/include/asm/dma.h | 10 |
2 files changed, 34 insertions, 0 deletions
diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c index c480e07ba7..f1ebd2933f 100644 --- a/arch/arm/cpu/mmu.c +++ b/arch/arm/cpu/mmu.c @@ -18,6 +18,7 @@ #define pr_fmt(fmt) "mmu: " fmt #include <common.h> +#include <dma-dir.h> #include <init.h> #include <asm/mmu.h> #include <errno.h> @@ -434,3 +435,26 @@ void dma_inv_range(unsigned long start, unsigned long end) __dma_inv_range(start, end); } +void dma_sync_single_for_cpu(unsigned long address, size_t size, + enum dma_data_direction dir) +{ + if (dir != DMA_TO_DEVICE) { + if (outer_cache.inv_range) + outer_cache.inv_range(address, address + size); + __dma_inv_range(address, address + size); + } +} + +void dma_sync_single_for_device(unsigned long address, size_t size, + enum dma_data_direction dir) +{ + if (dir == DMA_FROM_DEVICE) { + __dma_inv_range(address, address + size); + if (outer_cache.inv_range) + outer_cache.inv_range(address, address + size); + } else { + __dma_clean_range(address, address + size); + if (outer_cache.clean_range) + outer_cache.clean_range(address, address + size); + } +} diff --git a/arch/arm/include/asm/dma.h b/arch/arm/include/asm/dma.h index 48a9c6e67b..d9bce3d70e 100644 --- a/arch/arm/include/asm/dma.h +++ b/arch/arm/include/asm/dma.h @@ -28,4 +28,14 @@ static inline void dma_free_coherent(void *mem, dma_addr_t dma_handle, { free(mem); } + +static inline void dma_sync_single_for_cpu(unsigned long address, size_t size, + enum dma_data_direction dir) +{ +} + +static inline void dma_sync_single_for_device(unsigned long address, size_t size, + enum dma_data_direction dir) +{ +} #endif |