diff options
author | Tom Rini <trini@konsulko.com> | 2018-11-26 13:45:29 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-11-26 15:52:39 -0500 |
commit | ef0b75d3d8afccebd3b9822de6bcae358d4bc0e3 (patch) | |
tree | 9a1e0c04a8a3ecd641f0e219991eaf6ce98eefed /arch/riscv/lib/cache.c | |
parent | 6b21502229035779059493b2193fd790448fe85e (diff) | |
parent | 52923c6db7f00e0197ec894c8c1bb8a7681974bb (diff) |
Merge git://git.denx.de/u-boot-riscv
Diffstat (limited to 'arch/riscv/lib/cache.c')
-rw-r--r-- | arch/riscv/lib/cache.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/arch/riscv/lib/cache.c b/arch/riscv/lib/cache.c index 1d67c49c2c..ae5c60716f 100644 --- a/arch/riscv/lib/cache.c +++ b/arch/riscv/lib/cache.c @@ -6,44 +6,68 @@ #include <common.h> +void invalidate_icache_all(void) +{ + asm volatile ("fence.i" ::: "memory"); +} + +void flush_dcache_all(void) +{ + asm volatile ("fence" :::"memory"); +} void flush_dcache_range(unsigned long start, unsigned long end) { + flush_dcache_all(); } void invalidate_icache_range(unsigned long start, unsigned long end) { + /* + * RISC-V does not have an instruction for invalidating parts of the + * instruction cache. Invalidate all of it instead. + */ + invalidate_icache_all(); } void invalidate_dcache_range(unsigned long start, unsigned long end) { + flush_dcache_all(); +} + +void cache_flush(void) +{ + invalidate_icache_all(); + flush_dcache_all(); } void flush_cache(unsigned long addr, unsigned long size) { + invalidate_icache_all(); + flush_dcache_all(); } -void icache_enable(void) +__weak void icache_enable(void) { } -void icache_disable(void) +__weak void icache_disable(void) { } -int icache_status(void) +__weak int icache_status(void) { return 0; } -void dcache_enable(void) +__weak void dcache_enable(void) { } -void dcache_disable(void) +__weak void dcache_disable(void) { } -int dcache_status(void) +__weak int dcache_status(void) { return 0; } |