xref: /kvm-unit-tests/lib/arm64/asm/mmu.h (revision abdc5d02a7796a55802509ac9bb704c721f2a5f6)
1 #ifndef _ASMARM64_MMU_H_
2 #define _ASMARM64_MMU_H_
3 /*
4  * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com>
5  *
6  * This work is licensed under the terms of the GNU LGPL, version 2.
7  */
8 #include <asm/barrier.h>
9 
10 #define PMD_SECT_UNCACHED	PMD_ATTRINDX(MT_DEVICE_nGnRE)
11 #define PTE_UNCACHED		PTE_ATTRINDX(MT_DEVICE_nGnRE)
12 #define PTE_WBWA		PTE_ATTRINDX(MT_NORMAL)
13 #define PTE_TAGGED		PTE_ATTRINDX(MT_NORMAL_TAGGED)
14 
flush_tlb_all(void)15 static inline void flush_tlb_all(void)
16 {
17 	dsb(ishst);
18 	asm("tlbi	vmalle1is");
19 	dsb(ish);
20 	isb();
21 }
22 
flush_tlb_page(unsigned long vaddr)23 static inline void flush_tlb_page(unsigned long vaddr)
24 {
25 	unsigned long page = vaddr >> 12;
26 	dsb(ishst);
27 	asm("tlbi	vaae1is, %0" :: "r" (page));
28 	dsb(ish);
29 	isb();
30 }
31 
flush_dcache_addr(unsigned long vaddr)32 static inline void flush_dcache_addr(unsigned long vaddr)
33 {
34 	asm volatile("dc civac, %0" :: "r" (vaddr));
35 }
36 
37 #include <asm/mmu-api.h>
38 
39 #endif /* _ASMARM64_MMU_H_ */
40