183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
28bbb2909SRick Chen /*
38bbb2909SRick Chen * Copyright (C) 2017 Andes Technology Corporation
48bbb2909SRick Chen * Rick Chen, Andes Technology Corporation <rick@andestech.com>
58bbb2909SRick Chen */
68bbb2909SRick Chen
78bbb2909SRick Chen #include <common.h>
88bbb2909SRick Chen
invalidate_icache_all(void)952923c6dSRick Chen void invalidate_icache_all(void)
1052923c6dSRick Chen {
1152923c6dSRick Chen asm volatile ("fence.i" ::: "memory");
1252923c6dSRick Chen }
1352923c6dSRick Chen
flush_dcache_all(void)14c9056653SLukas Auer __weak void flush_dcache_all(void)
1552923c6dSRick Chen {
1652923c6dSRick Chen }
17c9056653SLukas Auer
flush_dcache_range(unsigned long start,unsigned long end)18c9056653SLukas Auer __weak void flush_dcache_range(unsigned long start, unsigned long end)
198bbb2909SRick Chen {
208bbb2909SRick Chen }
218bbb2909SRick Chen
invalidate_icache_range(unsigned long start,unsigned long end)228bbb2909SRick Chen void invalidate_icache_range(unsigned long start, unsigned long end)
238bbb2909SRick Chen {
2462a09ad5SLukas Auer /*
2562a09ad5SLukas Auer * RISC-V does not have an instruction for invalidating parts of the
2662a09ad5SLukas Auer * instruction cache. Invalidate all of it instead.
2762a09ad5SLukas Auer */
2862a09ad5SLukas Auer invalidate_icache_all();
2962a09ad5SLukas Auer }
3062a09ad5SLukas Auer
invalidate_dcache_range(unsigned long start,unsigned long end)31c9056653SLukas Auer __weak void invalidate_dcache_range(unsigned long start, unsigned long end)
328bbb2909SRick Chen {
3352923c6dSRick Chen }
3452923c6dSRick Chen
cache_flush(void)3552923c6dSRick Chen void cache_flush(void)
3652923c6dSRick Chen {
3752923c6dSRick Chen invalidate_icache_all();
3852923c6dSRick Chen flush_dcache_all();
398bbb2909SRick Chen }
408bbb2909SRick Chen
flush_cache(unsigned long addr,unsigned long size)418bbb2909SRick Chen void flush_cache(unsigned long addr, unsigned long size)
428bbb2909SRick Chen {
43*f74c416eSLukas Auer invalidate_icache_range(addr, addr + size);
44*f74c416eSLukas Auer flush_dcache_range(addr, addr + size);
458bbb2909SRick Chen }
468bbb2909SRick Chen
icache_enable(void)4752923c6dSRick Chen __weak void icache_enable(void)
488bbb2909SRick Chen {
498bbb2909SRick Chen }
508bbb2909SRick Chen
icache_disable(void)5152923c6dSRick Chen __weak void icache_disable(void)
528bbb2909SRick Chen {
538bbb2909SRick Chen }
548bbb2909SRick Chen
icache_status(void)5552923c6dSRick Chen __weak int icache_status(void)
568bbb2909SRick Chen {
578bbb2909SRick Chen return 0;
588bbb2909SRick Chen }
598bbb2909SRick Chen
dcache_enable(void)6052923c6dSRick Chen __weak void dcache_enable(void)
618bbb2909SRick Chen {
628bbb2909SRick Chen }
638bbb2909SRick Chen
dcache_disable(void)6452923c6dSRick Chen __weak void dcache_disable(void)
658bbb2909SRick Chen {
668bbb2909SRick Chen }
678bbb2909SRick Chen
dcache_status(void)6852923c6dSRick Chen __weak int dcache_status(void)
698bbb2909SRick Chen {
708bbb2909SRick Chen return 0;
718bbb2909SRick Chen }
72