diff mbox

[U-Boot] avr32: migrate cache functions

Message ID 1402603672-16146-1-git-send-email-andreas.devel@googlemail.com
State Accepted, archived
Delegated to: Andreas Bießmann
Headers show

Commit Message

Andreas Bießmann June 12, 2014, 8:07 p.m. UTC
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 <andreas.devel@googlemail.com>
CC: Josh Wu <josh.wu@atmel.com>
---
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(-)

Comments

Andreas Bießmann June 14, 2014, 2:15 p.m. UTC | #1
Dear Andreas Bießmann,

On 12.06.2014 22:07, Andreas Bießmann wrote:
> 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 <andreas.devel@googlemail.com>
> CC: Josh Wu <josh.wu@atmel.com>
> ---
> 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.

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

Best regards

Andreas Bießmann
Andreas Bießmann June 14, 2014, 4:14 p.m. UTC | #2
Dear Andreas Devel,

Andreas Devel <andreas.devel@googlemail.com> writes:
>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 <andreas.devel@googlemail.com>
>CC: Josh Wu <josh.wu@atmel.com>
>
>---
>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(-)

applied to u-boot-atmel/master, thanks!

Best regards,
Andreas Bießmann
diff mbox

Patch

diff --git a/arch/avr32/cpu/cache.c b/arch/avr32/cpu/cache.c
index ab0374e..b3ffc33 100644
--- a/arch/avr32/cpu/cache.c
+++ b/arch/avr32/cpu/cache.c
@@ -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();
diff --git a/arch/avr32/include/asm/arch-at32ap700x/cacheflush.h b/arch/avr32/include/asm/arch-at32ap700x/cacheflush.h
index 13d6d3a..e08cd9d 100644
--- a/arch/avr32/include/asm/arch-at32ap700x/cacheflush.h
+++ b/arch/avr32/include/asm/arch-at32ap700x/cacheflush.h
@@ -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)
diff --git a/arch/avr32/include/asm/dma-mapping.h b/arch/avr32/include/asm/dma-mapping.h
index 95ea81f..dbdd2fe 100644
--- a/arch/avr32/include/asm/dma-mapping.h
+++ b/arch/avr32/include/asm/dma-mapping.h
@@ -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 */
diff --git a/arch/avr32/lib/board.c b/arch/avr32/lib/board.c
index 7680102..bf0997f 100644
--- a/arch/avr32/lib/board.c
+++ b/arch/avr32/lib/board.c
@@ -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)