Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [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 | * |
Alexander Kuleshov | 5d3c2c3 | 2015-08-23 14:24:44 +0100 | [diff] [blame] | 11 | * Adapted from arch/x86 version. |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 12 | * |
| 13 | */ |
| 14 | |
| 15 | #ifndef _ASM_ARM64_FIXMAP_H |
| 16 | #define _ASM_ARM64_FIXMAP_H |
| 17 | |
| 18 | #ifndef __ASSEMBLY__ |
| 19 | #include <linux/kernel.h> |
Mark Rutland | e25781e | 2015-10-19 14:19:33 +0100 | [diff] [blame] | 20 | #include <linux/sizes.h> |
Ard Biesheuvel | 61bd93c | 2015-06-01 13:40:32 +0200 | [diff] [blame] | 21 | #include <asm/boot.h> |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 22 | #include <asm/page.h> |
Mark Rutland | 3eca86e | 2016-02-26 14:31:32 +0000 | [diff] [blame] | 23 | #include <asm/pgtable-prot.h> |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 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 { |
Laura Abbott | dab78b6 | 2014-11-26 00:14:16 +0000 | [diff] [blame] | 37 | FIX_HOLE, |
Ard Biesheuvel | 61bd93c | 2015-06-01 13:40:32 +0200 | [diff] [blame] | 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 | |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 52 | FIX_EARLYCON_MEM_BASE, |
Mark Rutland | 19fc577 | 2015-03-04 13:27:34 +0000 | [diff] [blame] | 53 | FIX_TEXT_POKE0, |
Will Deacon | 5e54c4b | 2017-11-14 14:14:17 +0000 | [diff] [blame^] | 54 | |
| 55 | #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 |
| 56 | FIX_ENTRY_TRAMP_TEXT, |
| 57 | #define TRAMP_VALIAS (__fix_to_virt(FIX_ENTRY_TRAMP_TEXT)) |
| 58 | #endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */ |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 59 | __end_of_permanent_fixed_addresses, |
| 60 | |
| 61 | /* |
| 62 | * Temporary boot-time mappings, used by early_ioremap(), |
| 63 | * before ioremap() is functional. |
| 64 | */ |
Mark Rutland | e25781e | 2015-10-19 14:19:33 +0100 | [diff] [blame] | 65 | #define NR_FIX_BTMAPS (SZ_256K / PAGE_SIZE) |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 66 | #define FIX_BTMAPS_SLOTS 7 |
| 67 | #define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS) |
| 68 | |
| 69 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses, |
| 70 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1, |
Mark Rutland | 961faac | 2016-01-25 11:45:07 +0000 | [diff] [blame] | 71 | |
| 72 | /* |
| 73 | * Used for kernel page table creation, so unmapped memory may be used |
| 74 | * for tables. |
| 75 | */ |
| 76 | FIX_PTE, |
| 77 | FIX_PMD, |
| 78 | FIX_PUD, |
| 79 | FIX_PGD, |
| 80 | |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 81 | __end_of_fixed_addresses |
| 82 | }; |
| 83 | |
| 84 | #define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) |
| 85 | #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE) |
| 86 | |
| 87 | #define FIXMAP_PAGE_IO __pgprot(PROT_DEVICE_nGnRE) |
| 88 | |
Laura Abbott | af86e59 | 2014-11-21 21:50:42 +0000 | [diff] [blame] | 89 | void __init early_fixmap_init(void); |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 90 | |
Laura Abbott | af86e59 | 2014-11-21 21:50:42 +0000 | [diff] [blame] | 91 | #define __early_set_fixmap __set_fixmap |
| 92 | |
Mark Salter | b2cedba | 2015-03-24 14:02:36 +0000 | [diff] [blame] | 93 | #define __late_set_fixmap __set_fixmap |
| 94 | #define __late_clear_fixmap(idx) __set_fixmap((idx), 0, FIXMAP_PAGE_CLEAR) |
| 95 | |
Laura Abbott | af86e59 | 2014-11-21 21:50:42 +0000 | [diff] [blame] | 96 | extern void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t prot); |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 97 | |
| 98 | #include <asm-generic/fixmap.h> |
| 99 | |
| 100 | #endif /* !__ASSEMBLY__ */ |
| 101 | #endif /* _ASM_ARM64_FIXMAP_H */ |