cacheflush.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef __ABI_CSKY_CACHEFLUSH_H
  3. #define __ABI_CSKY_CACHEFLUSH_H
  4. #include <linux/mm.h>
  5. #include <asm/string.h>
  6. #include <asm/cache.h>
  7. #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1
  8. extern void flush_dcache_page(struct page *);
  9. #define flush_cache_mm(mm) dcache_wbinv_all()
  10. #define flush_cache_page(vma, page, pfn) cache_wbinv_all()
  11. #define flush_cache_dup_mm(mm) cache_wbinv_all()
  12. #define flush_dcache_mmap_lock(mapping) xa_lock_irq(&mapping->i_pages)
  13. #define flush_dcache_mmap_unlock(mapping) xa_unlock_irq(&mapping->i_pages)
  14. #define ARCH_IMPLEMENTS_FLUSH_KERNEL_VMAP_RANGE 1
  15. static inline void flush_kernel_vmap_range(void *addr, int size)
  16. {
  17. dcache_wbinv_all();
  18. }
  19. static inline void invalidate_kernel_vmap_range(void *addr, int size)
  20. {
  21. dcache_wbinv_all();
  22. }
  23. #define ARCH_HAS_FLUSH_ANON_PAGE
  24. static inline void flush_anon_page(struct vm_area_struct *vma,
  25. struct page *page, unsigned long vmaddr)
  26. {
  27. if (PageAnon(page))
  28. cache_wbinv_all();
  29. }
  30. /*
  31. * if (current_mm != vma->mm) cache_wbinv_range(start, end) will be broken.
  32. * Use cache_wbinv_all() here and need to be improved in future.
  33. */
  34. extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end);
  35. #define flush_cache_vmap(start, end) cache_wbinv_all()
  36. #define flush_cache_vunmap(start, end) cache_wbinv_all()
  37. #define flush_icache_page(vma, page) do {} while (0);
  38. #define flush_icache_range(start, end) cache_wbinv_range(start, end)
  39. #define flush_icache_mm_range(mm, start, end) cache_wbinv_range(start, end)
  40. #define flush_icache_deferred(mm) do {} while (0);
  41. #define copy_from_user_page(vma, page, vaddr, dst, src, len) \
  42. do { \
  43. memcpy(dst, src, len); \
  44. } while (0)
  45. #define copy_to_user_page(vma, page, vaddr, dst, src, len) \
  46. do { \
  47. memcpy(dst, src, len); \
  48. cache_wbinv_all(); \
  49. } while (0)
  50. #endif /* __ABI_CSKY_CACHEFLUSH_H */