syscache.c 644 B

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