| #ifndef _ASMARM_MMU_H_ |
| #define _ASMARM_MMU_H_ |
| /* |
| * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com> |
| * |
| * This work is licensed under the terms of the GNU LGPL, version 2. |
| */ |
| #include <asm/barrier.h> |
| |
| #define PTE_USER L_PTE_USER |
| #define PTE_UXN L_PTE_XN |
| #define PTE_PXN L_PTE_PXN |
| #define PTE_RDONLY PTE_AP2 |
| #define PTE_SHARED L_PTE_SHARED |
| #define PTE_AF PTE_EXT_AF |
| #define PTE_WBWA L_PTE_MT_WRITEALLOC |
| #define PTE_UNCACHED L_PTE_MT_UNCACHED |
| |
| /* See B3.18.7 TLB maintenance operations */ |
| |
| static inline void local_flush_tlb_all(void) |
| { |
| dsb(nshst); |
| /* TLBIALL */ |
| asm volatile("mcr p15, 0, %0, c8, c7, 0" :: "r" (0)); |
| dsb(nsh); |
| isb(); |
| } |
| |
| static inline void flush_tlb_all(void) |
| { |
| dsb(ishst); |
| /* TLBIALLIS */ |
| asm volatile("mcr p15, 0, %0, c8, c3, 0" :: "r" (0)); |
| dsb(ish); |
| isb(); |
| } |
| |
| static inline void flush_tlb_page(unsigned long vaddr) |
| { |
| dsb(ishst); |
| /* TLBIMVAAIS */ |
| asm volatile("mcr p15, 0, %0, c8, c3, 3" :: "r" (vaddr)); |
| dsb(ish); |
| isb(); |
| } |
| |
| static inline void flush_dcache_addr(unsigned long vaddr) |
| { |
| /* DCCIMVAC */ |
| asm volatile("mcr p15, 0, %0, c7, c14, 1" :: "r" (vaddr)); |
| } |
| |
| #include <asm/mmu-api.h> |
| |
| #endif /* _ASMARM_MMU_H_ */ |