mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-26 05:34:30 +08:00
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. Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com> CC: Josh Wu <josh.wu@atmel.com>
This commit is contained in:
parent
0a26e1d6c3
commit
0e05543576
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user