root/arch/csky/mm/syscache.c
// 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;
}