Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : #ifdef CONFIG_MMU 3 : : #include <linux/list.h> 4 : : #include <linux/vmalloc.h> 5 : : 6 : : #include <asm/pgtable.h> 7 : : 8 : : /* the upper-most page table pointer */ 9 : : extern pmd_t *top_pmd; 10 : : 11 : : extern int icache_size; 12 : : 13 : : /* 14 : : * 0xffff8000 to 0xffffffff is reserved for any ARM architecture 15 : : * specific hacks for copying pages efficiently, while 0xffff4000 16 : : * is reserved for VIPT aliasing flushing by generic code. 17 : : * 18 : : * Note that we don't allow VIPT aliasing caches with SMP. 19 : : */ 20 : : #define COPYPAGE_MINICACHE 0xffff8000 21 : : #define COPYPAGE_V6_FROM 0xffff8000 22 : : #define COPYPAGE_V6_TO 0xffffc000 23 : : /* PFN alias flushing, for VIPT caches */ 24 : : #define FLUSH_ALIAS_START 0xffff4000 25 : : 26 : 0 : static inline void set_top_pte(unsigned long va, pte_t pte) 27 : : { 28 : 0 : pte_t *ptep = pte_offset_kernel(top_pmd, va); 29 : 0 : set_pte_ext(ptep, pte, 0); 30 : : local_flush_tlb_kernel_page(va); 31 : 0 : } 32 : : 33 : : static inline pte_t get_top_pte(unsigned long va) 34 : : { 35 : : pte_t *ptep = pte_offset_kernel(top_pmd, va); 36 : : return *ptep; 37 : : } 38 : : 39 : : static inline pmd_t *pmd_off_k(unsigned long virt) 40 : : { 41 : 1065421 : return pmd_offset(pud_offset(pgd_offset_k(virt), virt), virt); 42 : : } 43 : : 44 : : struct mem_type { 45 : : pteval_t prot_pte; 46 : : pteval_t prot_pte_s2; 47 : : pmdval_t prot_l1; 48 : : pmdval_t prot_sect; 49 : : unsigned int domain; 50 : : }; 51 : : 52 : : const struct mem_type *get_mem_type(unsigned int type); 53 : : 54 : : extern void __flush_dcache_page(struct address_space *mapping, struct page *page); 55 : : 56 : : /* 57 : : * ARM specific vm_struct->flags bits. 58 : : */ 59 : : 60 : : /* (super)section-mapped I/O regions used by ioremap()/iounmap() */ 61 : : #define VM_ARM_SECTION_MAPPING 0x80000000 62 : : 63 : : /* permanent static mappings from iotable_init() */ 64 : : #define VM_ARM_STATIC_MAPPING 0x40000000 65 : : 66 : : /* empty mapping */ 67 : : #define VM_ARM_EMPTY_MAPPING 0x20000000 68 : : 69 : : /* mapping type (attributes) for permanent static mappings */ 70 : : #define VM_ARM_MTYPE(mt) ((mt) << 20) 71 : : #define VM_ARM_MTYPE_MASK (0x1f << 20) 72 : : 73 : : 74 : : struct static_vm { 75 : : struct vm_struct vm; 76 : : struct list_head list; 77 : : }; 78 : : 79 : : extern struct list_head static_vmlist; 80 : : extern struct static_vm *find_static_vm_vaddr(void *vaddr); 81 : : extern __init void add_static_vm_early(struct static_vm *svm); 82 : : 83 : : #endif 84 : : 85 : : #ifdef CONFIG_ZONE_DMA 86 : : extern phys_addr_t arm_dma_limit; 87 : : extern unsigned long arm_dma_pfn_limit; 88 : : #else 89 : : #define arm_dma_limit ((phys_addr_t)~0) 90 : : #define arm_dma_pfn_limit (~0ul >> PAGE_SHIFT) 91 : : #endif 92 : : 93 : : extern phys_addr_t arm_lowmem_limit; 94 : : 95 : : void __init bootmem_init(void); 96 : : void arm_mm_memblock_reserve(void); 97 : : void dma_contiguous_remap(void); 98 : : 99 : : unsigned long __clear_cr(unsigned long mask);