xref: /kvm-unit-tests/lib/arm/asm/mmu.h (revision 6cba60e95ec52475d6b96e3cb496c02fa54229ce)
1db866895SAndrew Jones #ifndef __ASMARM_MMU_H_
2db866895SAndrew Jones #define __ASMARM_MMU_H_
3db866895SAndrew Jones /*
4db866895SAndrew Jones  * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com>
5db866895SAndrew Jones  *
6db866895SAndrew Jones  * This work is licensed under the terms of the GNU LGPL, version 2.
7db866895SAndrew Jones  */
88cca5668SAndrew Jones #include <asm/barrier.h>
9153d1936SAndrew Jones 
102f3028cdSAndrew Jones #define PTE_USER		L_PTE_USER
11db328a24SAndrew Jones #define PTE_RDONLY		PTE_AP2
122f3028cdSAndrew Jones #define PTE_SHARED		L_PTE_SHARED
132f3028cdSAndrew Jones #define PTE_AF			PTE_EXT_AF
142f3028cdSAndrew Jones #define PTE_WBWA		L_PTE_MT_WRITEALLOC
152f3028cdSAndrew Jones 
164b5caf0cSAlex Bennée /* See B3.18.7 TLB maintenance operations */
174b5caf0cSAlex Bennée 
18153d1936SAndrew Jones static inline void local_flush_tlb_all(void)
19153d1936SAndrew Jones {
20*6cba60e9SAlexandru Elisei 	dsb(nshst);
214b5caf0cSAlex Bennée 	/* TLBIALL */
22153d1936SAndrew Jones 	asm volatile("mcr p15, 0, %0, c8, c7, 0" :: "r" (0));
23*6cba60e9SAlexandru Elisei 	dsb(nsh);
24153d1936SAndrew Jones 	isb();
25153d1936SAndrew Jones }
26153d1936SAndrew Jones 
27153d1936SAndrew Jones static inline void flush_tlb_all(void)
28153d1936SAndrew Jones {
29153d1936SAndrew Jones 	//TODO
30153d1936SAndrew Jones 	local_flush_tlb_all();
31153d1936SAndrew Jones }
32153d1936SAndrew Jones 
334b5caf0cSAlex Bennée static inline void flush_tlb_page(unsigned long vaddr)
344b5caf0cSAlex Bennée {
35*6cba60e9SAlexandru Elisei 	dsb(ishst);
3620239febSAlexandru Elisei 	/* TLBIMVAAIS */
3720239febSAlexandru Elisei 	asm volatile("mcr p15, 0, %0, c8, c3, 3" :: "r" (vaddr));
38*6cba60e9SAlexandru Elisei 	dsb(ish);
394b5caf0cSAlex Bennée 	isb();
404b5caf0cSAlex Bennée }
414b5caf0cSAlex Bennée 
42f8891de2SAndrew Jones static inline void flush_dcache_addr(unsigned long vaddr)
43f8891de2SAndrew Jones {
44f8891de2SAndrew Jones 	asm volatile("mcr p15, 0, %0, c7, c14, 1" :: "r" (vaddr));
45f8891de2SAndrew Jones }
46f8891de2SAndrew Jones 
472f3028cdSAndrew Jones #include <asm/mmu-api.h>
48db866895SAndrew Jones 
49db866895SAndrew Jones #endif /* __ASMARM_MMU_H_ */
50