On Friday, October 09, 2015 at 01:31:02 PM, Thomas Chou wrote: > Convert dma_alloc_coherent to use memalign. > > Signed-off-by: Thomas Chou <tho...@wytron.com.tw> > --- > v2 > use memalign. > v3 > check memalign() return for out of memory. > > arch/nios2/include/asm/dma-mapping.h | 23 ++++++++++------------- > 1 file changed, 10 insertions(+), 13 deletions(-) > > diff --git a/arch/nios2/include/asm/dma-mapping.h > b/arch/nios2/include/asm/dma-mapping.h index 1350e3b..0618dc2 100644 > --- a/arch/nios2/include/asm/dma-mapping.h > +++ b/arch/nios2/include/asm/dma-mapping.h > @@ -1,23 +1,20 @@ > #ifndef __ASM_NIOS2_DMA_MAPPING_H > #define __ASM_NIOS2_DMA_MAPPING_H > > -/* dma_alloc_coherent() return cache-line aligned allocation which is > mapped +#include <asm/io.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); > + *handle = (unsigned long)memalign(ARCH_DMA_MINALIGN, len);
This still modifies the handle in both cases (failure and success). We really want to modify external variables in case of failure, no? > + if (!*handle) > + return NULL; > + flush_dcache_range(*handle, *handle + len); > + > + return ioremap(*handle, len); > } > > #endif /* __ASM_NIOS2_DMA_MAPPING_H */ Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot