xref: /kvm-unit-tests/lib/arm64/asm/mmu.h (revision abdc5d02a7796a55802509ac9bb704c721f2a5f6)
180e8b3d8SCornelia Huck #ifndef _ASMARM64_MMU_H_
280e8b3d8SCornelia Huck #define _ASMARM64_MMU_H_
339ac3f84SAndrew Jones /*
439ac3f84SAndrew Jones  * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com>
539ac3f84SAndrew Jones  *
639ac3f84SAndrew Jones  * This work is licensed under the terms of the GNU LGPL, version 2.
739ac3f84SAndrew Jones  */
8db328a24SAndrew Jones #include <asm/barrier.h>
939ac3f84SAndrew Jones 
10db328a24SAndrew Jones #define PMD_SECT_UNCACHED	PMD_ATTRINDX(MT_DEVICE_nGnRE)
11e97e1c82SAndrew Jones #define PTE_UNCACHED		PTE_ATTRINDX(MT_DEVICE_nGnRE)
12db328a24SAndrew Jones #define PTE_WBWA		PTE_ATTRINDX(MT_NORMAL)
13*1b59c632SVladimir Murzin #define PTE_TAGGED		PTE_ATTRINDX(MT_NORMAL_TAGGED)
14db328a24SAndrew Jones 
flush_tlb_all(void)15db328a24SAndrew Jones static inline void flush_tlb_all(void)
1639ac3f84SAndrew Jones {
17db328a24SAndrew Jones 	dsb(ishst);
18db328a24SAndrew Jones 	asm("tlbi	vmalle1is");
19db328a24SAndrew Jones 	dsb(ish);
20db328a24SAndrew Jones 	isb();
2139ac3f84SAndrew Jones }
2239ac3f84SAndrew Jones 
flush_tlb_page(unsigned long vaddr)234b5caf0cSAlex Bennée static inline void flush_tlb_page(unsigned long vaddr)
244b5caf0cSAlex Bennée {
254b5caf0cSAlex Bennée 	unsigned long page = vaddr >> 12;
264b5caf0cSAlex Bennée 	dsb(ishst);
274b5caf0cSAlex Bennée 	asm("tlbi	vaae1is, %0" :: "r" (page));
284b5caf0cSAlex Bennée 	dsb(ish);
29e36a9c28SAlexandru Elisei 	isb();
304b5caf0cSAlex Bennée }
314b5caf0cSAlex Bennée 
flush_dcache_addr(unsigned long vaddr)32f8891de2SAndrew Jones static inline void flush_dcache_addr(unsigned long vaddr)
33f8891de2SAndrew Jones {
34f8891de2SAndrew Jones 	asm volatile("dc civac, %0" :: "r" (vaddr));
35f8891de2SAndrew Jones }
36f8891de2SAndrew Jones 
37db328a24SAndrew Jones #include <asm/mmu-api.h>
3839ac3f84SAndrew Jones 
3980e8b3d8SCornelia Huck #endif /* _ASMARM64_MMU_H_ */
40