xref: /linux/arch/csky/mm/syscache.c (revision b7019ac550eb3916f34d79db583e9b7ea2524afa)
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/cache.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 ICACHE:
16 		icache_inv_range((unsigned long)addr,
17 				 (unsigned long)addr + bytes);
18 		break;
19 	case DCACHE:
20 		dcache_wb_range((unsigned long)addr,
21 				(unsigned long)addr + bytes);
22 		break;
23 	case BCACHE:
24 		cache_wbinv_range((unsigned long)addr,
25 				  (unsigned long)addr + bytes);
26 		break;
27 	default:
28 		return -EINVAL;
29 	}
30 
31 	return 0;
32 }
33