* [U-Boot] [PATCH] avr32: migrate cache functions
@ 2014-06-12 20:07 Andreas Bießmann
2014-06-14 14:15 ` Andreas Bießmann
2014-06-14 16:14 ` [U-Boot] " Andreas Bießmann
0 siblings, 2 replies; 3+ messages in thread
From: Andreas Bießmann @ 2014-06-12 20:07 UTC (permalink / raw)
To: u-boot
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(-)
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)
--
2.0.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* [U-Boot] [PATCH] avr32: migrate cache functions
2014-06-12 20:07 [U-Boot] [PATCH] avr32: migrate cache functions Andreas Bießmann
@ 2014-06-14 14:15 ` Andreas Bießmann
2014-06-14 16:14 ` [U-Boot] " Andreas Bießmann
1 sibling, 0 replies; 3+ messages in thread
From: Andreas Bießmann @ 2014-06-14 14:15 UTC (permalink / raw)
To: u-boot
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* [U-Boot] avr32: migrate cache functions
2014-06-12 20:07 [U-Boot] [PATCH] avr32: migrate cache functions Andreas Bießmann
2014-06-14 14:15 ` Andreas Bießmann
@ 2014-06-14 16:14 ` Andreas Bießmann
1 sibling, 0 replies; 3+ messages in thread
From: Andreas Bießmann @ 2014-06-14 16:14 UTC (permalink / raw)
To: u-boot
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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-06-14 16:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-06-12 20:07 [U-Boot] [PATCH] avr32: migrate cache functions Andreas Bießmann
2014-06-14 14:15 ` Andreas Bießmann
2014-06-14 16:14 ` [U-Boot] " Andreas Bießmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox