// SPDX-License-Identifier: GPL-2.0 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. #include <linux/syscalls.h> #include <asm/page.h> #include <asm/cacheflush.h> #include <asm/cachectl.h> SYSCALL_DEFINE3(cacheflush, void __user *, addr, unsigned long, bytes, int, cache) { switch (cache) { case BCACHE: case DCACHE: dcache_wb_range((unsigned long)addr, (unsigned long)addr + bytes); if (cache != BCACHE) break; fallthrough; case ICACHE: flush_icache_mm_range(current->mm, (unsigned long)addr, (unsigned long)addr + bytes); break; default: return -EINVAL; } return 0; }