1 /* 2 * Copyright (C) 2015 Regents of the University of California 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation, version 2. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 */ 13 14 #ifndef _ASM_RISCV_CACHEFLUSH_H 15 #define _ASM_RISCV_CACHEFLUSH_H 16 17 #include <asm-generic/cacheflush.h> 18 19 #undef flush_icache_range 20 #undef flush_icache_user_range 21 22 static inline void local_flush_icache_all(void) 23 { 24 asm volatile ("fence.i" ::: "memory"); 25 } 26 27 #ifndef CONFIG_SMP 28 29 #define flush_icache_range(start, end) local_flush_icache_all() 30 #define flush_icache_user_range(vma, pg, addr, len) local_flush_icache_all() 31 32 #else /* CONFIG_SMP */ 33 34 #define flush_icache_range(start, end) sbi_remote_fence_i(0) 35 #define flush_icache_user_range(vma, pg, addr, len) sbi_remote_fence_i(0) 36 37 #endif /* CONFIG_SMP */ 38 39 #endif /* _ASM_RISCV_CACHEFLUSH_H */ 40