Hi Andrey. On Wed, Jan 16, 2019 at 10:38:40PM -0800, Andrey Smirnov wrote: > In order to avoid passing random/junky values to DMA/HW as well as to > allow simplifying memory initialization in individual drivers, chagnge chagnge => change > dma_alloc_coherent() to guarantee that memory it returs is properly returs => returns > zeroed out. > > Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> > --- > arch/arm/cpu/mmu-common.c | 3 ++- > arch/arm/cpu/mmu-common.h | 1 + > arch/arm/cpu/mmu.c | 2 +- > arch/arm/cpu/mmu_64.c | 8 ++++++++ > 4 files changed, 12 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/cpu/mmu-common.c b/arch/arm/cpu/mmu-common.c > index c5b24bff8..aeefbb2da 100644 > --- a/arch/arm/cpu/mmu-common.c > +++ b/arch/arm/cpu/mmu-common.c > @@ -43,7 +43,8 @@ void *dma_alloc_map(size_t size, dma_addr_t *dma_handle, unsigned flags) > if (dma_handle) > *dma_handle = (dma_addr_t)ret; > > - dma_inv_range(ret, size); > + memset(ret, 0, size); > + dma_flush_range(ret, size); > > arch_remap_range(ret, size, flags); > > diff --git a/arch/arm/cpu/mmu-common.h b/arch/arm/cpu/mmu-common.h > index 679799c3c..0a33b138e 100644 > --- a/arch/arm/cpu/mmu-common.h > +++ b/arch/arm/cpu/mmu-common.h > @@ -2,6 +2,7 @@ > #define __ARM_MMU_COMMON_H > > void dma_inv_range(void *ptr, size_t size); > +void dma_flush_range(void *ptr, size_t size); > void *dma_alloc_map(size_t size, dma_addr_t *dma_handle, unsigned flags); > void __mmu_init(bool mmu_on); > > diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c > index 9e261a0be..29816ad56 100644 > --- a/arch/arm/cpu/mmu.c > +++ b/arch/arm/cpu/mmu.c > @@ -97,7 +97,7 @@ static u32 *find_pte(unsigned long adr) > return &table[(adr >> PAGE_SHIFT) & 0xff]; > } > > -static void dma_flush_range(void *ptr, size_t size) > +void dma_flush_range(void *ptr, size_t size) > { > unsigned long start = (unsigned long)ptr; > unsigned long end = start + size; > diff --git a/arch/arm/cpu/mmu_64.c b/arch/arm/cpu/mmu_64.c > index a3074b10d..b45a69661 100644 > --- a/arch/arm/cpu/mmu_64.c > +++ b/arch/arm/cpu/mmu_64.c > @@ -233,6 +233,14 @@ void dma_inv_range(void *ptr, size_t size) > v8_inv_dcache_range(start, end); > } > > +void dma_flush_range(void *ptr, size_t size) > +{ > + unsigned long start = (unsigned long)ptr; > + unsigned long end = start + size - 1; > + > + v8_flush_dcache_range(start, end); > +} We should use the existing indirection with struct cache_fns here, then we could share the code. Sam _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox