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, |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 54 | __end_of_permanent_fixed_addresses, |
| 55 | |
| 56 | /* |
| 57 | * Temporary boot-time mappings, used by early_ioremap(), |
| 58 | * before ioremap() is functional. |
| 59 | */ |
Mark Rutland | e25781e | 2015-10-19 14:19:33 +0100 | [diff] [blame] | 60 | #define NR_FIX_BTMAPS (SZ_256K / PAGE_SIZE) |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 61 | #define FIX_BTMAPS_SLOTS 7 |
| 62 | #define TOTAL_FIX_BTMAPS (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS) |
| 63 | |
| 64 | FIX_BTMAP_END = __end_of_permanent_fixed_addresses, |
| 65 | FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1, |
Mark Rutland | 961faac | 2016-01-25 11:45:07 +0000 | [diff] [blame] | 66 | |
| 67 | /* |
| 68 | * Used for kernel page table creation, so unmapped memory may be used |
| 69 | * for tables. |
| 70 | */ |
| 71 | FIX_PTE, |
| 72 | FIX_PMD, |
| 73 | FIX_PUD, |
| 74 | FIX_PGD, |
| 75 | |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 76 | __end_of_fixed_addresses |
| 77 | }; |
| 78 | |
| 79 | #define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) |
| 80 | #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE) |
| 81 | |
| 82 | #define FIXMAP_PAGE_IO __pgprot(PROT_DEVICE_nGnRE) |
| 83 | |
Laura Abbott | af86e59 | 2014-11-21 21:50:42 +0000 | [diff] [blame] | 84 | void __init early_fixmap_init(void); |
Mark Salter | bf4b558 | 2014-04-07 15:39:52 -0700 | [diff] [blame] | 85 | |
Laura Abbott | af86e59 | 2014-11-21 21:50:42 +0000 | [diff] [blame] | 86 | #define __early_set_fixmap __set_fixmap |
| 87 | |
Mark Salter | b2cedba | 2015-03-24 14:02:36 +0000 | [diff] [blame] | 88 | #define __late_set_fixmap __set_fixmap |
| 89 | #define __late_clear_fixmap(idx) __set_fixmap((idx), 0, FIXMAP_PAGE_CLEAR) |
| 90 | |
Laura Abbott | af86e59 | 2014-11-21 21:50:42 +0000 | [diff] [blame] | 91 | 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] | 92 | |
| 93 | #include <asm-generic/fixmap.h> |
| 94 | |
| 95 | #endif /* !__ASSEMBLY__ */ |
| 96 | #endif /* _ASM_ARM64_FIXMAP_H */ |