9
0
Fork 0

ARM: implement streaming DMA ops

Signed-off-by: Lucas Stach <dev@lynxeye.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Lucas Stach 2015-03-05 22:50:02 +01:00 committed by Sascha Hauer
parent 381f034ed6
commit cdb471b023
2 changed files with 34 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -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