diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-31 16:13:44 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-10-31 16:13:44 -0700 |
commit | b1c907f3b2675ecb01e340948fc62d6535ff5ac3 (patch) | |
tree | 978e7ba356ff57c4febe55f3ee0d0955ea721f14 /arch/microblaze/include/asm/dma-mapping.h | |
parent | 91e67a996c60a347ad7b918a74efb0f6b3b274c3 (diff) | |
parent | 84ac218f0257a0cfd7689d9a44f53118dbf307b3 (diff) | |
download | blackbird-op-linux-b1c907f3b2675ecb01e340948fc62d6535ff5ac3.tar.gz blackbird-op-linux-b1c907f3b2675ecb01e340948fc62d6535ff5ac3.zip |
Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze
* 'next' of git://git.monstr.eu/linux-2.6-microblaze:
microblaze: Remove __ARCH_WANT_INTERRUPTS_ON_CTXSW usage
microblaze: Use delay slot in __strnlen_user, __strncpy_user
microblaze: Remove NET_IP_ALIGN from system.h
microblaze: Add __ucmpdi2() helper function
microblaze: Raise SIGFPE/FPE_INTDIV for div by zero
microblaze: Switch ELF_ARCH code to 189
microblaze: Added DMA sync operations
microblaze: Moved __dma_sync() to dma-mapping.h
microblaze: Add PVR for Microblaze v8.20.a
microblaze: Fix access_ok macro
microblaze: Add loop unrolling for PAGE in copy_tofrom_user
microblaze: Simplify logic for unaligned byte copying
microblaze: Change label names - copy_tofrom_user
microblaze: Separate fixup section definition
microblaze: Change label name in copy_tofrom_user
microblaze: Clear top bit from cnt32_to_63
Diffstat (limited to 'arch/microblaze/include/asm/dma-mapping.h')
-rw-r--r-- | arch/microblaze/include/asm/dma-mapping.h | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/arch/microblaze/include/asm/dma-mapping.h b/arch/microblaze/include/asm/dma-mapping.h index a569514cf19f..3a3e5b886854 100644 --- a/arch/microblaze/include/asm/dma-mapping.h +++ b/arch/microblaze/include/asm/dma-mapping.h @@ -28,12 +28,12 @@ #include <linux/dma-attrs.h> #include <asm/io.h> #include <asm-generic/dma-coherent.h> +#include <asm/cacheflush.h> #define DMA_ERROR_CODE (~(dma_addr_t)0x0) #define __dma_alloc_coherent(dev, gfp, size, handle) NULL #define __dma_free_coherent(size, addr) ((void)0) -#define __dma_sync(addr, size, rw) ((void)0) static inline unsigned long device_to_mask(struct device *dev) { @@ -95,6 +95,22 @@ static inline int dma_set_mask(struct device *dev, u64 dma_mask) #include <asm-generic/dma-mapping-common.h> +static inline void __dma_sync(unsigned long paddr, + size_t size, enum dma_data_direction direction) +{ + switch (direction) { + case DMA_TO_DEVICE: + case DMA_BIDIRECTIONAL: + flush_dcache_range(paddr, paddr + size); + break; + case DMA_FROM_DEVICE: + invalidate_dcache_range(paddr, paddr + size); + break; + default: + BUG(); + } +} + static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) { struct dma_map_ops *ops = get_dma_ops(dev); @@ -135,7 +151,7 @@ static inline void dma_cache_sync(struct device *dev, void *vaddr, size_t size, enum dma_data_direction direction) { BUG_ON(direction == DMA_NONE); - __dma_sync(vaddr, size, (int)direction); + __dma_sync(virt_to_phys(vaddr), size, (int)direction); } #endif /* _ASM_MICROBLAZE_DMA_MAPPING_H */ |