1 | // SPDX-License-Identifier: GPL-2.0 |
2 | // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. |
3 | |
4 | #include <linux/syscalls.h> |
5 | #include <asm/page.h> |
6 | #include <asm/cacheflush.h> |
7 | #include <asm/cachectl.h> |
8 | |
9 | SYSCALL_DEFINE3(cacheflush, |
10 | void __user *, addr, |
11 | unsigned long, bytes, |
12 | int, cache) |
13 | { |
14 | switch (cache) { |
15 | case BCACHE: |
16 | case DCACHE: |
17 | dcache_wb_range((unsigned long)addr, |
18 | (unsigned long)addr + bytes); |
19 | if (cache != BCACHE) |
20 | break; |
21 | fallthrough; |
22 | case ICACHE: |
23 | flush_icache_mm_range(current->mm, |
24 | (unsigned long)addr, |
25 | (unsigned long)addr + bytes); |
26 | break; |
27 | default: |
28 | return -EINVAL; |
29 | } |
30 | |
31 | return 0; |
32 | } |
33 | |