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
9SYSCALL_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