| // 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; | |
| } |