diff options
author | Guo Ren <ren_guo@c-sky.com> | 2019-07-30 17:16:28 +0800 |
---|---|---|
committer | Guo Ren <ren_guo@c-sky.com> | 2019-08-06 15:15:34 +0800 |
commit | ae76f635d4e1cffa6870cc5472567ca9d6940a22 (patch) | |
tree | b2eb9bedbf954e9301722f1cad5ddd7c426021a8 /arch/csky/mm/dma-mapping.c | |
parent | 4af9027d3f4061992c0b065102a0a666b72f073b (diff) | |
download | linux-ae76f635d4e1cffa6870cc5472567ca9d6940a22.tar.bz2 |
csky: Optimize arch_sync_dma_for_cpu/device with dma_inv_range
DMA_FROM_DEVICE only need to read dma data of memory into CPU cache,
so there is no need to clear cache before. Also clear + inv for
DMA_FROM_DEVICE won't cause problem, because the memory range for dma
won't be touched by software during dma working.
Changes for V2:
- Remove clr cache and ignore the DMA_TO_DEVICE in _for_cpu.
- Change inv to wbinv cache with DMA_FROM_DEVICE in _for_device.
Signed-off-by: Guo Ren <ren_guo@c-sky.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/csky/mm/dma-mapping.c')
-rw-r--r-- | arch/csky/mm/dma-mapping.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/csky/mm/dma-mapping.c b/arch/csky/mm/dma-mapping.c index 65f531d54814..106ef02a8f89 100644 --- a/arch/csky/mm/dma-mapping.c +++ b/arch/csky/mm/dma-mapping.c @@ -85,11 +85,10 @@ void arch_sync_dma_for_cpu(struct device *dev, phys_addr_t paddr, { switch (dir) { case DMA_TO_DEVICE: - cache_op(paddr, size, dma_wb_range); - break; + return; case DMA_FROM_DEVICE: case DMA_BIDIRECTIONAL: - cache_op(paddr, size, dma_wbinv_range); + cache_op(paddr, size, dma_inv_range); break; default: BUG(); |