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