Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 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 <msalter@redhat.com> |
| 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 __ASSEMBLY__ |
| 19 | #include <linux/kernel.h> |
| 20 | #include <linux/sizes.h> |
| 21 | #include <asm/boot.h> |
| 22 | #include <asm/page.h> |
| 23 | #include <asm/pgtable-prot.h> |
| 24 | |
| 25 | /* |
| 26 | * Here we define all the compile-time 'special' virtual |
| 27 | * addresses. The point is to have a constant address at |
| 28 | * compile time, but to set the physical address only |
| 29 | * in the boot process. |
| 30 | * |
| 31 | * These 'compile-time allocated' memory buffers are |
| 32 | * page-sized. Use set_fixmap(idx,phys) to associate |
| 33 | * physical memory with fixmap indices. |
| 34 | * |
| 35 | */ |
| 36 | enum fixed_addresses { |
| 37 | FIX_HOLE, |
| 38 | |
| 39 | /* |
| 40 | * Reserve a virtual window for the FDT that is 2 MB larger than the |
| 41 | * maximum supported size, and put it at the top of the fixmap region. |
| 42 | * The additional space ensures that any FDT that does not exceed |
| 43 | * MAX_FDT_SIZE can be mapped regardless of whether it crosses any |
| 44 | * 2 MB alignment boundaries. |
| 45 | * |
| 46 | * Keep this at the top so it remains 2 MB aligned. |
| 47 | */ |
| 48 | #define FIX_FDT_SIZE (MAX_FDT_SIZE + SZ_2M) |
| 49 | FIX_FDT_END, |
| 50 | FIX_FDT = FIX_FDT_END + FIX_FDT_SIZE / PAGE_SIZE - 1, |
| 51 | |
| 52 | FIX_EARLYCON_MEM_BASE, |
| 53 | FIX_TEXT_POKE0, |
| 54 | |
| 55 | #ifdef CONFIG_ACPI_APEI_GHES |
| 56 | /* Used for GHES mapping from assorted contexts */ |
| 57 | FIX_APEI_GHES_IRQ, |
David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 58 | FIX_APEI_GHES_SEA, |
| 59 | #ifdef CONFIG_ARM_SDE_INTERFACE |
| 60 | FIX_APEI_GHES_SDEI_NORMAL, |
| 61 | FIX_APEI_GHES_SDEI_CRITICAL, |
| 62 | #endif |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 63 | #endif /* CONFIG_ACPI_APEI_GHES */ |
| 64 | |
| 65 | #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 |
| 66 | FIX_ENTRY_TRAMP_DATA, |
| 67 | FIX_ENTRY_TRAMP_TEXT, |
| 68 | #define TRAMP_VALIAS (__fix_to_virt(FIX_ENTRY_TRAMP_TEXT)) |
| 69 | #endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */ |
| 70 | __end_of_permanent_fixed_addresses, |
| 71 | |
| 72 | /* |
| 73 | * Temporary boot-time mappings, used by early_ioremap(), |
| 74 | * before ioremap() is functional. |
| 75 | */ |
| 76 | #define NR_FIX_BTMAPS (SZ_256K / PAGE_SIZE) |
| 77 | #define FIX_BTMAPS_SLOTS 7 |
| 78 | #define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS) |
| 79 | |
| 80 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses, |
| 81 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1, |
| 82 | |
| 83 | /* |
| 84 | * Used for kernel page table creation, so unmapped memory may be used |
| 85 | * for tables. |
| 86 | */ |
| 87 | FIX_PTE, |
| 88 | FIX_PMD, |
| 89 | FIX_PUD, |
| 90 | FIX_PGD, |
| 91 | |
| 92 | __end_of_fixed_addresses |
| 93 | }; |
| 94 | |
| 95 | #define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) |
| 96 | #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE) |
| 97 | |
| 98 | #define FIXMAP_PAGE_IO __pgprot(PROT_DEVICE_nGnRE) |
| 99 | |
| 100 | void __init early_fixmap_init(void); |
| 101 | |
| 102 | #define __early_set_fixmap __set_fixmap |
| 103 | |
| 104 | #define __late_set_fixmap __set_fixmap |
| 105 | #define __late_clear_fixmap(idx) __set_fixmap((idx), 0, FIXMAP_PAGE_CLEAR) |
| 106 | |
| 107 | extern void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot); |
| 108 | |
| 109 | #include <asm-generic/fixmap.h> |
| 110 | |
| 111 | #endif /* !__ASSEMBLY__ */ |
| 112 | #endif /* _ASM_ARM64_FIXMAP_H */ |