Skip to contentSkip to conversation

avr32: migrate cache functions

PATCH In review Andreas Bießmann 1 participant 3 messages Jun 12, 2014 – Jun 14, 2014

lore
Share & tools
lore
#0 lore raw

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
index ab0374e..b3ffc33 100644
@@ -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
index 13d6d3a..e08cd9d 100644
@@ -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
index 95ea81f..dbdd2fe 100644
@@ -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
index 7680102..bf0997f 100644
@@ -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
#1 lore raw

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.

---
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

[1] http://patchwork.ozlabs.org/patch/352786/

Best regards

Andreas Bie?mann

#2 lore raw
In reply to 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.

---
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