Module Name: src Committed By: skrll Date: Thu Jul 16 11:36:35 UTC 2020
Modified Files: src/sys/arch/aarch64/aarch64: aarch64_machdep.c efi_machdep.c locore.S pmap.c pmapboot.c start.S src/sys/arch/aarch64/include: asan.h pmap.h src/sys/arch/evbarm/conf: GENERIC64 Log Message: pmapboot_enter simplication - bootpage_alloc in asm becomes pmapboot_pagealloc in C - PMAPBOOT_ENTER_NOBLOCK is removed as it's not used - PMAPBOOT_ENTER_NOOVERWRITE is removed as it's now always on - physpage_allocator argument is removed as it's always pmapboot_pagealloc - Support for EARLYCONS without CONSADDR is removed so that the identity map for CONSADDR is always known. For the assembly files: 2 files changed, 40 insertions(+), 89 deletions(-) LGTM ryo To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/sys/arch/aarch64/aarch64/aarch64_machdep.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/aarch64/aarch64/efi_machdep.c cvs rdiff -u -r1.66 -r1.67 src/sys/arch/aarch64/aarch64/locore.S cvs rdiff -u -r1.83 -r1.84 src/sys/arch/aarch64/aarch64/pmap.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/aarch64/aarch64/pmapboot.c \ src/sys/arch/aarch64/aarch64/start.S cvs rdiff -u -r1.7 -r1.8 src/sys/arch/aarch64/include/asan.h cvs rdiff -u -r1.40 -r1.41 src/sys/arch/aarch64/include/pmap.h cvs rdiff -u -r1.159 -r1.160 src/sys/arch/evbarm/conf/GENERIC64 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/aarch64/aarch64/aarch64_machdep.c diff -u src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.44 src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.45 --- src/sys/arch/aarch64/aarch64/aarch64_machdep.c:1.44 Wed Jul 1 08:01:07 2020 +++ src/sys/arch/aarch64/aarch64/aarch64_machdep.c Thu Jul 16 11:36:35 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: aarch64_machdep.c,v 1.44 2020/07/01 08:01:07 ryo Exp $ */ +/* $NetBSD: aarch64_machdep.c,v 1.45 2020/07/16 11:36:35 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: aarch64_machdep.c,v 1.44 2020/07/01 08:01:07 ryo Exp $"); +__KERNEL_RCSID(1, "$NetBSD: aarch64_machdep.c,v 1.45 2020/07/16 11:36:35 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_cpuoptions.h" @@ -161,9 +161,9 @@ cpu_kernel_vm_init(uint64_t memory_start start = trunc_page(bootconfig.dram[blk].address); end = round_page(bootconfig.dram[blk].address + (uint64_t)bootconfig.dram[blk].pages * PAGE_SIZE); + pmapboot_enter_range(AARCH64_PA_TO_KVA(start), start, - end - start, ksegattr, PMAPBOOT_ENTER_NOOVERWRITE, - bootpage_alloc, printf); + end - start, ksegattr, printf); } aarch64_dcache_wbinv_all(); Index: src/sys/arch/aarch64/aarch64/efi_machdep.c diff -u src/sys/arch/aarch64/aarch64/efi_machdep.c:1.5 src/sys/arch/aarch64/aarch64/efi_machdep.c:1.6 --- src/sys/arch/aarch64/aarch64/efi_machdep.c:1.5 Mon Dec 16 00:03:50 2019 +++ src/sys/arch/aarch64/aarch64/efi_machdep.c Thu Jul 16 11:36:35 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: efi_machdep.c,v 1.5 2019/12/16 00:03:50 jmcneill Exp $ */ +/* $NetBSD: efi_machdep.c,v 1.6 2020/07/16 11:36:35 skrll Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: efi_machdep.c,v 1.5 2019/12/16 00:03:50 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: efi_machdep.c,v 1.6 2020/07/16 11:36:35 skrll Exp $"); #include <sys/param.h> #include <uvm/uvm_extern.h> @@ -70,7 +70,7 @@ arm_efirt_md_map_range(vaddr_t va, paddr panic("arm_efirt_md_map_range: unsupported type %d", type); } - pmapboot_enter(va, pa, sz, L3_SIZE, attr, 0, bootpage_alloc, NULL); + pmapboot_enter(va, pa, sz, L3_SIZE, attr, NULL); while (sz >= PAGE_SIZE) { aarch64_tlbi_by_va(va); va += PAGE_SIZE; Index: src/sys/arch/aarch64/aarch64/locore.S diff -u src/sys/arch/aarch64/aarch64/locore.S:1.66 src/sys/arch/aarch64/aarch64/locore.S:1.67 --- src/sys/arch/aarch64/aarch64/locore.S:1.66 Sun Jul 12 06:37:39 2020 +++ src/sys/arch/aarch64/aarch64/locore.S Thu Jul 16 11:36:35 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.S,v 1.66 2020/07/12 06:37:39 skrll Exp $ */ +/* $NetBSD: locore.S,v 1.67 2020/07/16 11:36:35 skrll Exp $ */ /* * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org> @@ -38,7 +38,7 @@ #include <aarch64/hypervisor.h> #include "assym.h" -RCSID("$NetBSD: locore.S,v 1.66 2020/07/12 06:37:39 skrll Exp $") +RCSID("$NetBSD: locore.S,v 1.67 2020/07/16 11:36:35 skrll Exp $") #ifdef AARCH64_DEVICE_MEM_STRONGLY_ORDERED #define MAIR_DEVICE_MEM MAIR_DEVICE_nGnRnE @@ -54,9 +54,12 @@ RCSID("$NetBSD: locore.S,v 1.66 2020/07/ #define LOCORE_EL2 #define BOOT_AP_STACKSIZE 256 /* size of temporally stack for APs */ -#define BOOTPAGE_ALLOC_MAX (1024 * 1024) /* reserved size from _end[] */ +#define PMAPBOOT_PAGEALLOCMAX (1024 * 1024) /* reserved size from _end[] */ #if (defined(VERBOSE_INIT_ARM) || defined(DEBUG_LOCORE)) && defined(EARLYCONS) +#if !defined(CONSADDR) +#error CONSADDR required with EARLYCONS +#endif #define VERBOSE_LOCORE #endif @@ -774,11 +777,11 @@ init_mmutable: stp x26, lr, [sp, #-16]! /* first allocated page must be kernel l0pt = ARM_BOOTSTRAP_LxPT */ - bl bootpage_alloc + bl pmapboot_pagealloc cbz x0, init_mmutable_error msr ttbr1_el1, x0 - bl bootpage_alloc + bl pmapboot_pagealloc cbz x0, init_mmutable_error msr ttbr0_el1, x0 @@ -799,85 +802,62 @@ init_mmutable: * x2: psize_t size, * x3: psize_t blocksize, // L[123]_SIZE * x4: pt_entry_t attr, // pte attributes. LX_BLKPAG_* - * x5: flags, - * x6: pd_entry_t *(*physpage_allocator)(void), - * x7: void (*pr)(const char *, ...) + * x5: void (*pr)(const char *, ...) * ); */ #ifdef CONSADDR - VPRINT("Creating VA=PA tables for CONSADDR\n") - mov x7, x26 /* pr func */ - adr x6, bootpage_alloc /* allocator */ - mov x5, xzr /* flags = 0 */ - mov x4, #LX_BLKPAG_ATTR_DEVICE_MEM | LX_BLKPAG_AP_RW /* attr */ - orr x4, x4, #LX_BLKPAG_UXN | LX_BLKPAG_PXN - mov x3, #L2_SIZE /* blocksize */ + VPRINT("Creating identity mapping for CONSADDR\n") + ldr x0, =CONSADDR /* va = CONADDR (physical) */ + mov x1, x0 /* pa = va */ mov x2, #L2_SIZE /* size */ - ldr x1, =CONSADDR /* pa */ - mov x0, x1 /* va */ - bl pmapboot_enter - cbnz x0, init_mmutable_error -#elif defined(EARLYCONS) - /* CONSADDR is unknown, but need to map UART */ - VPRINT("Creating VA=PA tables (0x00000000-0xffffffff)\n") - mov x7, x26 /* pr func */ - adr x6, bootpage_alloc /* allocator */ - mov x5, xzr /* flags = 0 */ - mov x4, #LX_BLKPAG_ATTR_DEVICE_MEM | LX_BLKPAG_AP_RW /* attr */ - orr x4, x4, #LX_BLKPAG_UXN | LX_BLKPAG_PXN mov x3, #L2_SIZE /* blocksize */ - mov x2, #(1024*1024*1024*4) /* size */ - mov x1, xzr /* pa */ - mov x0, xzr /* va */ + mov x4, #LX_BLKPAG_ATTR_DEVICE_MEM | LX_BLKPAG_AP_RW + orr x4, x4, #LX_BLKPAG_UXN | LX_BLKPAG_PXN /* attr */ + mov x5, x26 /* pr func */ bl pmapboot_enter cbnz x0, init_mmutable_error #endif /* identity mapping for kernel image */ - VPRINT("Creating VA=PA tables for kernel image\n") - mov x7, x26 /* pr func */ - adr x6, bootpage_alloc /* allocator */ - mov x5, xzr /* flags = 0 */ - mov x4, #LX_BLKPAG_ATTR_NORMAL_NC | LX_BLKPAG_AP_RW /* attr */ - mov x3, #L2_SIZE /* blocksize */ - adr x0, start /* va = start */ + VPRINT("Creating identity mapping for kernel image\n") + adrl x0, start /* va = start (physical) */ + + mov x1, x0 /* pa = va */ adrl x2, _end - sub x2, x2, x0 /* size = _end - start */ - add x2, x2, #BOOTPAGE_ALLOC_MAX /* for bootpage_alloc() */ - mov x1, x0 /* pa */ + sub x2, x2, x1 /* size = _end - start */ + add x2, x2, #PMAPBOOT_PAGEALLOCMAX /* for pmapboot_pagealloc() */ + mov x3, #L2_SIZE /* blocksize */ + mov x4, #LX_BLKPAG_ATTR_NORMAL_NC | LX_BLKPAG_AP_RW /* attr */ + mov x5, x26 /* pr func */ bl pmapboot_enter cbnz x0, init_mmutable_error #ifdef FDT - VPRINT("Creating VA=PA tables for FDT\n") + VPRINT("Creating identity mapping for FDT\n") adrl x8, _C_LABEL(fdt_addr_r) ldr x8, [x8] - mov x7, x26 /* pr func */ - adr x6, bootpage_alloc /* allocator */ - mov x5, xzr /* flags = 0 */ - mov x4, #LX_BLKPAG_ATTR_NORMAL_NC | LX_BLKPAG_AP_RW /* attr */ - orr x4, x4, #LX_BLKPAG_UXN | LX_BLKPAG_PXN - mov x3, #L2_SIZE /* blocksize */ - mov x2, #L2_SIZE /* size */ - mov x1, x8 /* pa */ mov x0, x8 /* va */ + mov x1, x8 /* pa */ + mov x2, #L2_SIZE /* size */ + mov x3, #L2_SIZE /* blocksize */ + mov x4, #LX_BLKPAG_ATTR_NORMAL_NC | LX_BLKPAG_AP_RW + orr x4, x4, #LX_BLKPAG_UXN | LX_BLKPAG_PXN /* attr */ + mov x5, x26 /* pr func */ bl pmapboot_enter cbnz x0, init_mmutable_error #endif VPRINT("Creating KVA=PA tables\n") - mov x7, x26 /* pr func */ - adr x6, bootpage_alloc /* allocator */ - mov x5, xzr /* flags = 0 */ - mov x4, #LX_BLKPAG_ATTR_NORMAL_WB | LX_BLKPAG_AP_RW /* attr */ - orr x4, x4, #LX_BLKPAG_UXN - mov x3, #L2_SIZE /* blocksize */ - adr x1, start /* pa = start */ + ldr x0, =start /* va */ + adrl x1, start /* pa = start (physical) */ adrl x2, _end sub x2, x2, x1 /* size = _end - start */ - ldr x0, =start /* va */ + mov x3, #L2_SIZE /* blocksize */ + mov x4, #LX_BLKPAG_ATTR_NORMAL_WB | LX_BLKPAG_AP_RW /* attr */ + orr x4, x4, #LX_BLKPAG_UXN + mov x5, x26 /* pr func */ bl pmapboot_enter cbnz x0, init_mmutable_error @@ -890,40 +870,6 @@ init_mmutable_done: ldp x26, lr, [sp], #16 ret -/* return PA of allocated page */ -ENTRY_NP(bootpage_alloc) - /* x2 = kernend_extra */ - adrl x3, kernend_extra - ldr x2, [x3] - /* if (kernend_extra < 0) return NULL */ - mov x0, xzr - cmp x2, xzr - bmi bootpage_alloc_done - - /* x0 = PA of _end[] */ - adrl x1, kern_vtopdiff - ldr x1, [x1] - ldr x0, =ARM_BOOTSTRAP_LxPT - sub x0, x0, x1 - - /* x0 = ARM_BOOTSTRAP_LxPT + kernend_extra */ - add x0, x0, x2 - - /* kernend_extra += PAGE_SIZE; */ - add x2, x2, #PAGE_SIZE - str x2, [x3] - - /* clear allocated page */ - mov x1, x0 - add x2, x1, #PAGE_SIZE -1: stp xzr, xzr, [x1], #16 - cmp x1, x2 - bcc 1b -bootpage_alloc_done: - ret -END(bootpage_alloc) - - mmu_disable: dsb sy mrs x0, sctlr_el1 Index: src/sys/arch/aarch64/aarch64/pmap.c diff -u src/sys/arch/aarch64/aarch64/pmap.c:1.83 src/sys/arch/aarch64/aarch64/pmap.c:1.84 --- src/sys/arch/aarch64/aarch64/pmap.c:1.83 Sat Jul 4 16:58:11 2020 +++ src/sys/arch/aarch64/aarch64/pmap.c Thu Jul 16 11:36:35 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.83 2020/07/04 16:58:11 rin Exp $ */ +/* $NetBSD: pmap.c,v 1.84 2020/07/16 11:36:35 skrll Exp $ */ /* * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.83 2020/07/04 16:58:11 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.84 2020/07/16 11:36:35 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_ddb.h" @@ -322,8 +322,7 @@ pmap_map_chunk(vaddr_t va, paddr_t pa, v attr = _pmap_pte_adjust_prot(0, prot, VM_PROT_ALL, false); attr = _pmap_pte_adjust_cacheflags(attr, flags); - pmapboot_enter_range(va, pa, resid, attr, - PMAPBOOT_ENTER_NOOVERWRITE, bootpage_alloc, printf); + pmapboot_enter_range(va, pa, resid, attr, printf); aarch64_tlbi_all(); return resid; Index: src/sys/arch/aarch64/aarch64/pmapboot.c diff -u src/sys/arch/aarch64/aarch64/pmapboot.c:1.7 src/sys/arch/aarch64/aarch64/pmapboot.c:1.8 --- src/sys/arch/aarch64/aarch64/pmapboot.c:1.7 Mon Apr 13 05:40:25 2020 +++ src/sys/arch/aarch64/aarch64/pmapboot.c Thu Jul 16 11:36:35 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmapboot.c,v 1.7 2020/04/13 05:40:25 maxv Exp $ */ +/* $NetBSD: pmapboot.c,v 1.8 2020/07/16 11:36:35 skrll Exp $ */ /* * Copyright (c) 2018 Ryo Shimizu <r...@nerv.org> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmapboot.c,v 1.7 2020/04/13 05:40:25 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmapboot.c,v 1.8 2020/07/16 11:36:35 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_ddb.h" @@ -41,6 +41,7 @@ __KERNEL_RCSID(0, "$NetBSD: pmapboot.c,v #include <aarch64/armreg.h> #include <aarch64/cpufunc.h> +#include <aarch64/machdep.h> #include <aarch64/pmap.h> #include <aarch64/pte.h> @@ -194,14 +195,12 @@ tlb_contiguous_p(vaddr_t addr, vaddr_t s */ int pmapboot_enter(vaddr_t va, paddr_t pa, psize_t size, psize_t blocksize, - pt_entry_t attr, uint64_t flags, pd_entry_t *(*physpage_allocator)(void), - void (*pr)(const char *, ...) __printflike(1, 2)) + pt_entry_t attr, void (*pr)(const char *, ...) __printflike(1, 2)) { int level, idx0, idx1, idx2, idx3, nskip = 0; int ttbr __unused; vaddr_t va_end; pd_entry_t *l0, *l1, *l2, *l3, pte; - bool noblock, nooverwrite; #ifdef OPTIMIZE_TLB_CONTIG vaddr_t va_start; pd_entry_t *ll; @@ -222,17 +221,13 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p return -1; } - noblock = flags & PMAPBOOT_ENTER_NOBLOCK; - nooverwrite = flags & PMAPBOOT_ENTER_NOOVERWRITE; - VPRINTF("pmapboot_enter: va=0x%lx, pa=0x%lx, size=0x%lx, " - "blocksize=0x%lx, attr=0x%016lx, " - "noblock=%d, nooverwrite=%d\n", - va, pa, size, blocksize, attr, noblock, nooverwrite); + "blocksize=0x%lx, attr=0x%016lx\n", + va, pa, size, blocksize, attr); - va_end = (va + size - 1) & ~(blocksize - 1); pa &= ~(blocksize - 1); va &= ~(blocksize - 1); + va_end = (va + size + blocksize- 1) & ~(blocksize - 1); #ifdef OPTIMIZE_TLB_CONTIG va_start = va; #endif @@ -254,7 +249,7 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p return -1; } - while (va <= va_end) { + while (va < va_end) { #ifdef OPTIMIZE_TLB_CONTIG ll = NULL; llidx = -1; @@ -262,7 +257,7 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p idx0 = l0pde_index(va); if (l0[idx0] == 0) { - l1 = physpage_allocator(); + l1 = pmapboot_pagealloc(); if (l1 == NULL) { VPRINTF("pmapboot_enter: cannot allocate L1 page\n"); return -1; @@ -278,13 +273,6 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p idx1 = l1pde_index(va); if (level == 1) { - if (noblock) - goto nextblk; - if (nooverwrite && l1pde_valid(l1[idx1])) { - nskip++; - goto nextblk; - } - pte = pa | L1_BLOCK | LX_BLKPAG_AF | @@ -298,6 +286,12 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p ll = l1; llidx = idx1; #endif + + if (l1pde_valid(l1[idx1]) && l1[idx1] != pte) { + nskip++; + goto nextblk; + } + l1[idx1] = pte; VPRINTF("TTBR%d[%d][%d]\t= %016lx:", ttbr, idx0, idx1, pte); @@ -306,7 +300,7 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p } if (!l1pde_valid(l1[idx1])) { - l2 = physpage_allocator(); + l2 = pmapboot_pagealloc(); if (l2 == NULL) { VPRINTF("pmapboot_enter: cannot allocate L2 page\n"); return -1; @@ -323,13 +317,6 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p idx2 = l2pde_index(va); if (level == 2) { - if (noblock) - goto nextblk; - if (nooverwrite && l2pde_valid(l2[idx2])) { - nskip++; - goto nextblk; - } - pte = pa | L2_BLOCK | LX_BLKPAG_AF | @@ -343,6 +330,11 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p ll = l2; llidx = idx2; #endif + if (l2pde_valid(l2[idx2]) && l2[idx2] != pte) { + nskip++; + goto nextblk; + } + l2[idx2] = pte; VPRINTF("TTBR%d[%d][%d][%d]\t= %016lx:", ttbr, idx0, idx1, idx2, pte); @@ -351,7 +343,7 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p } if (!l2pde_valid(l2[idx2])) { - l3 = physpage_allocator(); + l3 = pmapboot_pagealloc(); if (l3 == NULL) { VPRINTF("pmapboot_enter: cannot allocate L3 page\n"); return -1; @@ -367,12 +359,6 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p } idx3 = l3pte_index(va); - if (noblock) - goto nextblk; - if (nooverwrite && l3pte_valid(l3[idx3])) { - nskip++; - goto nextblk; - } pte = pa | L3_PAGE | @@ -387,11 +373,15 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p ll = l3; llidx = idx3; #endif + if (l3pte_valid(l3[idx3]) && l3[idx3] != pte) { + nskip++; + goto nextblk; + } + l3[idx3] = pte; VPRINTF("TTBR%d[%d][%d][%d][%d]\t= %lx:", ttbr, idx0, idx1, idx2, idx3, pte); VPRINT_PTE(pte, 3); - nextblk: #ifdef OPTIMIZE_TLB_CONTIG /* @@ -432,9 +422,30 @@ pmapboot_enter(vaddr_t va, paddr_t pa, p return nskip; } +paddr_t pmapboot_pagebase __attribute__((__section__(".data"))); + +pd_entry_t * +pmapboot_pagealloc(void) +{ + extern long kernend_extra; + + if (kernend_extra < 0) + return NULL; + + paddr_t pa = pmapboot_pagebase + kernend_extra; + kernend_extra += PAGE_SIZE; + + char *s = (char *)pa; + char *e = s + PAGE_SIZE; + + while (s < e) + *s++ = 0; + + return (pd_entry_t *)pa; +} + int pmapboot_enter_range(vaddr_t va, paddr_t pa, psize_t size, pt_entry_t attr, - uint64_t flags, pd_entry_t *(*physpage_allocator)(void), void (*pr)(const char *, ...) __printflike(1, 2)) { vaddr_t vend; @@ -452,8 +463,7 @@ pmapboot_enter_range(vaddr_t va, paddr_t mapsize = nblocks * L3_SIZE; VPRINTF("Creating L3 tables: %016lx-%016lx : %016lx-%016lx\n", va, va + mapsize - 1, pa, pa + mapsize - 1); - nskip += pmapboot_enter(va, pa, mapsize, L3_SIZE, attr, flags, - physpage_allocator, NULL); + nskip += pmapboot_enter(va, pa, mapsize, L3_SIZE, attr, pr); va += mapsize; pa += mapsize; left -= mapsize; @@ -466,8 +476,7 @@ pmapboot_enter_range(vaddr_t va, paddr_t mapsize = nblocks * L2_SIZE; VPRINTF("Creating L2 tables: %016lx-%016lx : %016lx-%016lx\n", va, va + mapsize - 1, pa, pa + mapsize - 1); - nskip += pmapboot_enter(va, pa, mapsize, L2_SIZE, attr, flags, - physpage_allocator, NULL); + nskip += pmapboot_enter(va, pa, mapsize, L2_SIZE, attr, pr); va += mapsize; pa += mapsize; left -= mapsize; @@ -478,8 +487,7 @@ pmapboot_enter_range(vaddr_t va, paddr_t mapsize = nblocks * L1_SIZE; VPRINTF("Creating L1 tables: %016lx-%016lx : %016lx-%016lx\n", va, va + mapsize - 1, pa, pa + mapsize - 1); - nskip += pmapboot_enter(va, pa, mapsize, L1_SIZE, attr, flags, - physpage_allocator, NULL); + nskip += pmapboot_enter(va, pa, mapsize, L1_SIZE, attr, pr); va += mapsize; pa += mapsize; left -= mapsize; @@ -490,8 +498,7 @@ pmapboot_enter_range(vaddr_t va, paddr_t mapsize = nblocks * L2_SIZE; VPRINTF("Creating L2 tables: %016lx-%016lx : %016lx-%016lx\n", va, va + mapsize - 1, pa, pa + mapsize - 1); - nskip += pmapboot_enter(va, pa, mapsize, L2_SIZE, attr, flags, - physpage_allocator, NULL); + nskip += pmapboot_enter(va, pa, mapsize, L2_SIZE, attr, pr); va += mapsize; pa += mapsize; left -= mapsize; @@ -502,8 +509,7 @@ pmapboot_enter_range(vaddr_t va, paddr_t mapsize = nblocks * L3_SIZE; VPRINTF("Creating L3 tables: %016lx-%016lx : %016lx-%016lx\n", va, va + mapsize - 1, pa, pa + mapsize - 1); - nskip += pmapboot_enter(va, pa, mapsize, L3_SIZE, attr, flags, - physpage_allocator, NULL); + nskip += pmapboot_enter(va, pa, mapsize, L3_SIZE, attr, pr); va += mapsize; pa += mapsize; left -= mapsize; Index: src/sys/arch/aarch64/aarch64/start.S diff -u src/sys/arch/aarch64/aarch64/start.S:1.7 src/sys/arch/aarch64/aarch64/start.S:1.8 --- src/sys/arch/aarch64/aarch64/start.S:1.7 Sun Jan 19 16:12:56 2020 +++ src/sys/arch/aarch64/aarch64/start.S Thu Jul 16 11:36:35 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: start.S,v 1.7 2020/01/19 16:12:56 skrll Exp $ */ +/* $NetBSD: start.S,v 1.8 2020/07/16 11:36:35 skrll Exp $ */ /* * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org> @@ -32,7 +32,7 @@ #include <aarch64/asm.h> -RCSID("$NetBSD: start.S,v 1.7 2020/01/19 16:12:56 skrll Exp $") +RCSID("$NetBSD: start.S,v 1.8 2020/07/16 11:36:35 skrll Exp $") /* * Padding at start of kernel image to make room for 64-byte header @@ -71,6 +71,11 @@ start: adrl x8, fdt_addr_r str x0, [x8] + adrl x8, pmapboot_pagebase + ldr x9, =ARM_BOOTSTRAP_LxPT + sub x9, x9, x10 + str x9, [x8] + b aarch64_start /* aarch64_start() @ aarch64/locore.S */ ENTRY_NP(uartputc) Index: src/sys/arch/aarch64/include/asan.h diff -u src/sys/arch/aarch64/include/asan.h:1.7 src/sys/arch/aarch64/include/asan.h:1.8 --- src/sys/arch/aarch64/include/asan.h:1.7 Tue Jun 23 17:21:55 2020 +++ src/sys/arch/aarch64/include/asan.h Thu Jul 16 11:36:35 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: asan.h,v 1.7 2020/06/23 17:21:55 maxv Exp $ */ +/* $NetBSD: asan.h,v 1.8 2020/07/16 11:36:35 skrll Exp $ */ /* * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ __md_palloc(void) paddr_t pa; if (__predict_false(__md_early)) - pa = (paddr_t)bootpage_alloc(); + pa = (paddr_t)pmapboot_pagealloc(); else pa = pmap_alloc_pdp(pmap_kernel(), NULL, 0, false); Index: src/sys/arch/aarch64/include/pmap.h diff -u src/sys/arch/aarch64/include/pmap.h:1.40 src/sys/arch/aarch64/include/pmap.h:1.41 --- src/sys/arch/aarch64/include/pmap.h:1.40 Sun Jun 14 21:47:15 2020 +++ src/sys/arch/aarch64/include/pmap.h Thu Jul 16 11:36:35 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.40 2020/06/14 21:47:15 ad Exp $ */ +/* $NetBSD: pmap.h,v 1.41 2020/07/16 11:36:35 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -173,17 +173,12 @@ void pmap_db_ttbrdump(bool, vaddr_t, voi pt_entry_t *kvtopte(vaddr_t); pt_entry_t pmap_kvattr(vaddr_t, vm_prot_t); -/* locore.S */ -pd_entry_t *bootpage_alloc(void); - -/* pmap_locore.c */ -int pmapboot_enter(vaddr_t, paddr_t, psize_t, psize_t, - pt_entry_t, uint64_t, pd_entry_t *(*)(void), +/* pmapboot.c */ +pd_entry_t *pmapboot_pagealloc(void); +int pmapboot_enter(vaddr_t, paddr_t, psize_t, psize_t, pt_entry_t, void (*pr)(const char *, ...) __printflike(1, 2)); -#define PMAPBOOT_ENTER_NOBLOCK 0x00000001 -#define PMAPBOOT_ENTER_NOOVERWRITE 0x00000002 -int pmapboot_enter_range(vaddr_t, paddr_t, psize_t, pt_entry_t, uint64_t, - pd_entry_t *(*)(void), void (*)(const char *, ...) __printflike(1, 2)); +int pmapboot_enter_range(vaddr_t, paddr_t, psize_t, pt_entry_t, + void (*)(const char *, ...) __printflike(1, 2)); int pmapboot_protect(vaddr_t, vaddr_t, vm_prot_t); void pmap_db_pte_print(pt_entry_t, int, void (*pr)(const char *, ...) __printflike(1, 2)); Index: src/sys/arch/evbarm/conf/GENERIC64 diff -u src/sys/arch/evbarm/conf/GENERIC64:1.159 src/sys/arch/evbarm/conf/GENERIC64:1.160 --- src/sys/arch/evbarm/conf/GENERIC64:1.159 Mon May 18 21:19:35 2020 +++ src/sys/arch/evbarm/conf/GENERIC64 Thu Jul 16 11:36:35 2020 @@ -1,5 +1,5 @@ # -# $NetBSD: GENERIC64,v 1.159 2020/05/18 21:19:35 jmcneill Exp $ +# $NetBSD: GENERIC64,v 1.160 2020/07/16 11:36:35 skrll Exp $ # # GENERIC ARM (aarch64) kernel # @@ -36,15 +36,15 @@ options INCLUDE_CONFIG_FILE #options UVMHIST_PRINT,KERNHIST_DELAY=0 # EARLYCONS is required for early init messages from VERBOSE_INIT_ARM. -#options EARLYCONS=bcm2837 -#options EARLYCONS=bcm2711 +#options EARLYCONS=bcm2837, CONSADDR=0x3f215040 +#options EARLYCONS=bcm2711, CONSADDR=0xfe215040 #options EARLYCONS=meson, CONSADDR=0xc81004c0 #options EARLYCONS=rk3328, CONSADDR=0xff130000 #options EARLYCONS=rk3399, CONSADDR=0xff1a0000 #options EARLYCONS=sunxi, CONSADDR=0x01c28000 #options EARLYCONS=tegra, CONSADDR=0x70006000 #options EARLYCONS=thunderx, CONSADDR=0x87e024000000 -#options EARLYCONS=virt +#options EARLYCONS=virt, CONSADDR=0x09000000 # Pointer Authentication (PAC). #makeoptions ARMV83_PAC=1