| 1 | |
| 2 | * fixmap.h: compile-time virtual memory allocation
|
| 3 | *
|
| 4 | * This file is subject to the terms and conditions of the GNU General Public
|
| 5 | * License. See the file "COPYING" in the main directory of this archive
|
| 6 | * for more details.
|
| 7 | *
|
| 8 | * Copyright (C) 1998 Ingo Molnar
|
| 9 | * Copyright (C) 2013 Mark Salter <[email protected]>
|
| 10 | *
|
| 11 | * Adapted from arch/x86 version.
|
| 12 | *
|
| 13 |
|
| 14 |
|
| 15 | #ifndef _ASM_ARM64_FIXMAP_H
|
| 16 | #define _ASM_ARM64_FIXMAP_H
|
| 17 |
|
| 18 | #ifndef __ASSEMBLER__
|
| 19 | #include <linux/kernel.h>
|
| 20 | #include <linux/math.h>
|
| 21 | #include <linux/sizes.h>
|
| 22 | #include <asm/boot.h>
|
| 23 | #include <asm/page.h>
|
| 24 | #include <asm/pgtable-prot.h>
|
| 25 |
|
| 26 | |
| 27 | * Here we define all the compile-time 'special' virtual
|
| 28 | * addresses. The point is to have a constant address at
|
| 29 | * compile time, but to set the physical address only
|
| 30 | * in the boot process.
|
| 31 | *
|
| 32 | * Each enum increment in these 'compile-time allocated'
|
| 33 | * memory buffers is page-sized. Use set_fixmap(idx,phys)
|
| 34 | * to associate physical memory with a fixmap index.
|
| 35 |
|
| 36 | enum fixed_addresses {
|
| 37 | FIX_HOLE,
|
| 38 |
|
| 39 | |
| 40 | * Reserve a virtual window for the FDT that is a page bigger than the
|
| 41 | * maximum supported size. The additional space ensures that any FDT
|
| 42 | * that does not exceed MAX_FDT_SIZE can be mapped regardless of
|
| 43 | * whether it crosses any page boundary.
|
| 44 |
|
| 45 | FIX_FDT_END,
|
| 46 | FIX_FDT = FIX_FDT_END + DIV_ROUND_UP(MAX_FDT_SIZE, PAGE_SIZE) + 1,
|
| 47 |
|
| 48 | FIX_EARLYCON_MEM_BASE,
|
| 49 | FIX_TEXT_POKE0,
|
| 50 |
|
| 51 | #ifdef CONFIG_KVM
|
| 52 |
|
| 53 | FIX_VNCR_END,
|
| 54 | FIX_VNCR = FIX_VNCR_END + NR_CPUS,
|
| 55 | #endif
|
| 56 |
|
| 57 | #ifdef CONFIG_ACPI_APEI_GHES
|
| 58 |
|
| 59 | FIX_APEI_GHES_IRQ,
|
| 60 | FIX_APEI_GHES_SEA,
|
| 61 | #ifdef CONFIG_ARM_SDE_INTERFACE
|
| 62 | FIX_APEI_GHES_SDEI_NORMAL,
|
| 63 | FIX_APEI_GHES_SDEI_CRITICAL,
|
| 64 | #endif
|
| 65 | #endif
|
| 66 |
|
| 67 | #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
|
| 68 | #ifdef CONFIG_RELOCATABLE
|
| 69 | FIX_ENTRY_TRAMP_TEXT4,
|
| 70 | #endif
|
| 71 | FIX_ENTRY_TRAMP_TEXT3,
|
| 72 | FIX_ENTRY_TRAMP_TEXT2,
|
| 73 | FIX_ENTRY_TRAMP_TEXT1,
|
| 74 | #define TRAMP_VALIAS (__fix_to_virt(FIX_ENTRY_TRAMP_TEXT1))
|
| 75 | #endif
|
| 76 | __end_of_permanent_fixed_addresses,
|
| 77 |
|
| 78 | |
| 79 | * Temporary boot-time mappings, used by early_ioremap(),
|
| 80 | * before ioremap() is functional.
|
| 81 | *
|
| 82 | * Reserve one extra page so a 256K mapping may start at any
|
| 83 | * offset within a page. early_ioremap() maps the page-aligned
|
| 84 | * physical range, so the initial offset can consume an extra page.
|
| 85 |
|
| 86 | #define NR_FIX_BTMAPS ((SZ_256K / PAGE_SIZE) + 1)
|
| 87 | #define FIX_BTMAPS_SLOTS 7
|
| 88 | #define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS)
|
| 89 |
|
| 90 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses,
|
| 91 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1,
|
| 92 |
|
| 93 | |
| 94 | * Used for kernel page table creation, so unmapped memory may be used
|
| 95 | * for tables.
|
| 96 |
|
| 97 | FIX_PTE,
|
| 98 | FIX_PMD,
|
| 99 | FIX_PUD,
|
| 100 | FIX_P4D,
|
| 101 | FIX_PGD,
|
| 102 |
|
| 103 | __end_of_fixed_addresses
|
| 104 | };
|
| 105 |
|
| 106 | #define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT)
|
| 107 | #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE)
|
| 108 | #define FIXADDR_TOT_SIZE (__end_of_fixed_addresses << PAGE_SHIFT)
|
| 109 | #define FIXADDR_TOT_START (FIXADDR_TOP - FIXADDR_TOT_SIZE)
|
| 110 |
|
| 111 | #define FIXMAP_PAGE_IO __pgprot(PROT_DEVICE_nGnRE)
|
| 112 |
|
| 113 | void __init early_fixmap_init(void);
|
| 114 |
|
| 115 | #define __early_set_fixmap __set_fixmap
|
| 116 |
|
| 117 | extern void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot);
|
| 118 |
|
| 119 | #include <asm-generic/fixmap.h>
|
| 120 |
|
| 121 | #endif
|
| 122 | #endif
|