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