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 Jonesstatic 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éestatic 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 Jonesstatic 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