avr32: migrate cache functions
PATCH 1/1 avr32: migrate cache functions
Unfortunately the avr32 cache implementation has another API than the one described in common.h. Migrate the flush/invalidate dcache functions to the common API to be usable in device drivers.
---
This patch is required to apply 'net: macb: enable dcache in macb' [1] without build errors.
The patch is currently only compile tested, runtime tests pending.
[1] http://patchwork.ozlabs.org/patch/352786/
arch/avr32/cpu/cache.c | 20 ++++++++++---------- arch/avr32/include/asm/arch-at32ap700x/cacheflush.h | 2 -- arch/avr32/include/asm/dma-mapping.h | 6 ++++-- arch/avr32/lib/board.c | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-)
arch/avr32/cpu/cache.c +10 -10
@@ -24,31 +24,31 @@ void dcache_clean_range(volatile void *start, size_t size)sync_write_buffer (); } -void dcache_invalidate_range (volatile void *start,size_t size) +void invalidate_dcache_range (unsigned long start,unsigned long stop) { -unsigned long v, begin, end, linesz; +unsigned long v, linesz; linesz =CONFIG_SYS_DCACHE_LINESZ ;/* You asked for it, you got it */ - begin = (unsigned long )start & ~(linesz -1 ); - end = ((unsigned long )start + size + linesz -1 ) & ~(linesz -1 ); + start = start & ~(linesz -1 ); + stop = (stop + linesz -1 ) & ~(linesz -1 ); -for (v = begin; v < end; v += linesz) +for (v = start; v < stop; v += linesz)dcache_invalidate_line ((void *)v); } -void dcache_flush_range (volatile void *start,size_t size) +void flush_dcache_range (unsigned long start,unsigned long stop) { -unsigned long v, begin, end, linesz; +unsigned long v, linesz; linesz =CONFIG_SYS_DCACHE_LINESZ ;/* You asked for it, you got it */ - begin = (unsigned long )start & ~(linesz -1 ); - end = ((unsigned long )start + size + linesz -1 ) & ~(linesz -1 ); + start = start & ~(linesz -1 ); + stop = (stop + linesz -1 ) & ~(linesz -1 ); -for (v = begin; v < end; v += linesz) +for (v = start; v < stop; v += linesz)dcache_flush_line ((void *)v);sync_write_buffer ();
arch/avr32/include/asm/arch-at32ap700x/cacheflush.h +0 -2
@@ -49,9 +49,7 @@ static inline void icache_invalidate_line(volatile void *vaddr)* Applies the above functions on all lines that are touched by the * specified virtual address range. */ -void dcache_invalidate_range (volatile void *start,size_t len);void dcache_clean_range (volatile void *start,size_t len); -void dcache_flush_range (volatile void *start,size_t len);void icache_invalidate_range (volatile void *start,size_t len);static inline void dcache_flush_unlocked (void )
arch/avr32/include/asm/dma-mapping.h +4 -2
@@ -23,13 +23,15 @@ static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,switch (dir) {case DMA_BIDIRECTIONAL : -dcache_flush_range (vaddr, len); +flush_dcache_range ((unsigned long )vaddr, + (unsigned long )vaddr + len);break ;case DMA_TO_DEVICE :dcache_clean_range (vaddr, len);break ;case DMA_FROM_DEVICE : -dcache_invalidate_range (vaddr, len); +invalidate_dcache_range ((unsigned long )vaddr, + (unsigned long )vaddr + len);break ;default :/* This will cause a linker error */
arch/avr32/lib/board.c +2 -2
@@ -65,8 +65,8 @@ static void dma_alloc_init(void)printf ("DMA: Using memory from 0x%08lx to 0x%08lx\n" , dma_alloc_start, dma_alloc_end); -dcache_invalidate_range (cached (dma_alloc_start), - dma_alloc_end - dma_alloc_start); +invalidate_dcache_range ((unsigned long )cached (dma_alloc_start), + dma_alloc_end); }void *dma_alloc_coherent (size_t len,unsigned long *handle)
Signature · 1 line
2.0.0
PATCH 1/1 avr32: migrate cache functions
Dear Andreas Bie?mann,
Quoted 10 lines · Andreas Bie?mann
Unfortunately the avr32 cache implementation has another API than the one described in
common.h. Migrate the flush/invalidate dcache functions to the common API to be usable in device drivers.Signed-off-by Andreas Bie?mann <[email protected]>CC Josh Wu <[email protected]>---
This patch is required to apply 'net: macb: enable dcache in macb' [1] without build errors.
The patch is currently only compile tested, runtime tests pending.
runtime tested on grasshopper board and atngw100mkii board.
Quoted 1 line
Best regards
Andreas Bie?mann
Dear Andreas Devel,
Quoted 12 lines · Andreas Devel
Unfortunately the avr32 cache implementation has another API than the one described in
common.h. Migrate the flush/invalidate dcache functions to the common API to be usable in device drivers.Signed-off-by Andreas Bie?mann <[email protected]>CC Josh Wu <[email protected]>---
This patch is required to apply 'net: macb: enable dcache in macb' [1] without build errors.
The patch is currently only compile tested, runtime tests pending.
Quoted 7 lines
[1] http://patchwork.ozlabs.org/patch/352786/
arch/avr32/cpu/cache.c | 20 ++++++++++---------- arch/avr32/include/asm/arch-at32ap700x/cacheflush.h | 2 -- arch/avr32/include/asm/dma-mapping.h | 6 ++++-- arch/avr32/lib/board.c | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-)
applied to u-boot-atmel/master, thanks!
Best regards,
Andreas Bie?mann