nios2: add dma_alloc_coherent with asm-nios2/dma-mapping.h
PATCH 1/1 nios2: add dma_alloc_coherent with asm-nios2/dma-mapping.h
This function return cache-line aligned allocation which is mapped to uncached io region.
Signed-off-by Thomas Chou <[email protected]>
--- include/asm-nios2/dma-mapping.h | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-) create mode 100644 include/asm-nios2/dma-mapping.h
include/asm-nios2/dma-mapping.h new file +21 -0
@@ -0,0 +1,21 @@ +#ifndef __ASM_NIOS2_DMA_MAPPING_H +#define __ASM_NIOS2_DMA_MAPPING_H + +/* dma_alloc_coherent() return cache-line aligned allocation which is mapped +* to uncached io region. +* +* IO_REGION_BASE should be defined in board config header file +* 0x80000000 for nommu, 0xe0000000 for mmu +*/ + +static inline void *dma_alloc_coherent (size_t len,unsigned long *handle) +{ +void *addr =malloc (len +CONFIG_SYS_DCACHELINE_SIZE ); +flush_dcache ((unsigned long )addr, len +CONFIG_SYS_DCACHELINE_SIZE ); + *handle = ((unsigned long )addr + + (CONFIG_SYS_DCACHELINE_SIZE -1 )) & + ~(CONFIG_SYS_DCACHELINE_SIZE -1 ) & ~(IO_REGION_BASE ); +return (void *)(*handle |IO_REGION_BASE ); +} + +#endif /* __ASM_NIOS2_DMA_MAPPING_H */
Signature · 1 line
1.6.6.1
PATCH v2 1/1 nios2: add dma_alloc_coherent with asm-nios2/dma-mapping.h
This function return cache-line aligned allocation which is mapped to uncached io region.
Signed-off-by Thomas Chou <[email protected]>
--- include/asm-nios2/dma-mapping.h | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-) create mode 100644 include/asm-nios2/dma-mapping.h
include/asm-nios2/dma-mapping.h new file +23 -0
@@ -0,0 +1,23 @@ +#ifndef __ASM_NIOS2_DMA_MAPPING_H +#define __ASM_NIOS2_DMA_MAPPING_H + +/* dma_alloc_coherent() return cache-line aligned allocation which is mapped +* to uncached io region. +* +* IO_REGION_BASE should be defined in board config header file +* 0x80000000 for nommu, 0xe0000000 for mmu +*/ + +static inline void *dma_alloc_coherent (size_t len,unsigned long *handle) +{ +void *addr =malloc (len +CONFIG_SYS_DCACHELINE_SIZE ); +if (!addr) +return 0 ; +flush_dcache ((unsigned long )addr, len +CONFIG_SYS_DCACHELINE_SIZE ); + *handle = ((unsigned long )addr + + (CONFIG_SYS_DCACHELINE_SIZE -1 )) & + ~(CONFIG_SYS_DCACHELINE_SIZE -1 ) & ~(IO_REGION_BASE ); +return (void *)(*handle |IO_REGION_BASE ); +} + +#endif /* __ASM_NIOS2_DMA_MAPPING_H */
Signature · 1 line
1.6.6.1
PATCH v3 1/1 nios2: add dma_alloc_coherent
In reply to Thomas ChouThis function return cache-line aligned allocation which is mapped to uncached io region.
Signed-off-by Thomas Chou <[email protected]>
---
arch dir reorganized.
arch/nios2/include/asm/dma-mapping.h | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-) create mode 100644 arch/nios2/include/asm/dma-mapping.h
arch/nios2/include/asm/dma-mapping.h new file +23 -0
@@ -0,0 +1,23 @@ +#ifndef __ASM_NIOS2_DMA_MAPPING_H +#define __ASM_NIOS2_DMA_MAPPING_H + +/* dma_alloc_coherent() return cache-line aligned allocation which is mapped +* to uncached io region. +* +* IO_REGION_BASE should be defined in board config header file +* 0x80000000 for nommu, 0xe0000000 for mmu +*/ + +static inline void *dma_alloc_coherent (size_t len,unsigned long *handle) +{ +void *addr =malloc (len +CONFIG_SYS_DCACHELINE_SIZE ); +if (!addr) +return 0 ; +flush_dcache ((unsigned long )addr, len +CONFIG_SYS_DCACHELINE_SIZE ); + *handle = ((unsigned long )addr + + (CONFIG_SYS_DCACHELINE_SIZE -1 )) & + ~(CONFIG_SYS_DCACHELINE_SIZE -1 ) & ~(IO_REGION_BASE ); +return (void *)(*handle |IO_REGION_BASE ); +} + +#endif /* __ASM_NIOS2_DMA_MAPPING_H */
Signature · 1 line
1.6.6.1
Scott McNutt
AppliedPATCH v3 1/1 nios2: add dma_alloc_coherent
Applied. Thanks.
--Scott
Quoted 40 lines · Thomas Chou
This function return cache-line aligned allocation which is mapped to uncached io region.
Signed-off-by Thomas Chou <[email protected]>---
arch dir reorganized.arch/nios2/include/asm/dma-mapping.h | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-) create mode 100644 arch/nios2/include/asm/dma-mapping.harch/nios2/include/asm/dma-mapping.h new file +23
-0@@ -0,0 +1,23 @@ +#ifndef __ASM_NIOS2_DMA_MAPPING_H +#define __ASM_NIOS2_DMA_MAPPING_H + +/* dma_alloc_coherent() return cache-line aligned allocation which is mapped +* to uncached io region. +* +* IO_REGION_BASE should be defined in board config header file +* 0x80000000 for nommu, 0xe0000000 for mmu +*/ + +static inline void *dma_alloc_coherent (size_t len,unsigned long *handle) +{ +void *addr =malloc (len +CONFIG_SYS_DCACHELINE_SIZE ); +if (!addr) +return 0 ; +flush_dcache ((unsigned long )addr, len +CONFIG_SYS_DCACHELINE_SIZE ); + *handle = ((unsigned long )addr + + (CONFIG_SYS_DCACHELINE_SIZE -1 )) & + ~(CONFIG_SYS_DCACHELINE_SIZE -1 ) & ~(IO_REGION_BASE ); +return (void *)(*handle |IO_REGION_BASE ); +} + +#endif /* __ASM_NIOS2_DMA_MAPPING_H */