From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Fri, 9 Oct 2015 16:49:28 +0200 Subject: [U-Boot] [PATCH v3] nios2: convert dma_alloc_coherent to use memalign In-Reply-To: <1444390262-15804-1-git-send-email-thomas@wytron.com.tw> References: <1444013823-11909-1-git-send-email-thomas@wytron.com.tw> <1444390262-15804-1-git-send-email-thomas@wytron.com.tw> Message-ID: <201510091649.28747.marex@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > --- > 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 > + > +/* > + * 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