Module Name: src Committed By: jmcneill Date: Wed Oct 31 13:01:48 UTC 2018
Modified Files: src/sys/arch/aarch64/aarch64: efi_machdep.c src/sys/arch/arm/arm: efi_runtime.h src/sys/arch/evbarm/fdt: fdt_machdep.c Log Message: Setup mappings for EFI runtime mmio ranges. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/aarch64/aarch64/efi_machdep.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/arm/efi_runtime.h cvs rdiff -u -r1.50 -r1.51 src/sys/arch/evbarm/fdt/fdt_machdep.c 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/efi_machdep.c diff -u src/sys/arch/aarch64/aarch64/efi_machdep.c:1.1 src/sys/arch/aarch64/aarch64/efi_machdep.c:1.2 --- src/sys/arch/aarch64/aarch64/efi_machdep.c:1.1 Sun Oct 28 10:21:42 2018 +++ src/sys/arch/aarch64/aarch64/efi_machdep.c Wed Oct 31 13:01:48 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: efi_machdep.c,v 1.1 2018/10/28 10:21:42 jmcneill Exp $ */ +/* $NetBSD: efi_machdep.c,v 1.2 2018/10/31 13:01:48 jmcneill 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.1 2018/10/28 10:21:42 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: efi_machdep.c,v 1.2 2018/10/31 13:01:48 jmcneill Exp $"); #include <sys/param.h> #include <uvm/uvm_extern.h> @@ -39,16 +39,30 @@ __KERNEL_RCSID(0, "$NetBSD: efi_machdep. #include <arm/arm/efi_runtime.h> void -arm_efirt_md_map_range(vaddr_t va, paddr_t pa, size_t sz, bool exec) +arm_efirt_md_map_range(vaddr_t va, paddr_t pa, size_t sz, enum arm_efirt_mem_type type) { pt_entry_t attr; - - attr = LX_BLKPAG_OS_READ | LX_BLKPAG_AF | LX_BLKPAG_UXN | LX_BLKPAG_ATTR_NORMAL_WB; - if (exec) - attr |= LX_BLKPAG_AP_RO; - else - attr |= LX_BLKPAG_AP_RW | LX_BLKPAG_OS_WRITE | LX_BLKPAG_PXN; - + + switch (type) { + case ARM_EFIRT_MEM_CODE: + attr = LX_BLKPAG_OS_READ | + LX_BLKPAG_AF | LX_BLKPAG_AP_RO | LX_BLKPAG_UXN | + LX_BLKPAG_ATTR_NORMAL_WB; + break; + case ARM_EFIRT_MEM_DATA: + attr = LX_BLKPAG_OS_READ | LX_BLKPAG_OS_WRITE | + LX_BLKPAG_AF | LX_BLKPAG_AP_RW | LX_BLKPAG_UXN | LX_BLKPAG_PXN | + LX_BLKPAG_ATTR_NORMAL_WB; + break; + case ARM_EFIRT_MEM_MMIO: + attr = LX_BLKPAG_OS_READ | LX_BLKPAG_OS_WRITE | + LX_BLKPAG_AF | LX_BLKPAG_AP_RW | LX_BLKPAG_UXN | LX_BLKPAG_PXN | + LX_BLKPAG_ATTR_DEVICE_MEM; + break; + default: + panic("arm_efirt_md_map_range: unsupported type %d", type); + } + pmapboot_enter(va, pa, sz, L3_SIZE, attr, 0, bootpage_alloc, NULL); while (sz >= PAGE_SIZE) { aarch64_tlbi_by_va(va); Index: src/sys/arch/arm/arm/efi_runtime.h diff -u src/sys/arch/arm/arm/efi_runtime.h:1.1 src/sys/arch/arm/arm/efi_runtime.h:1.2 --- src/sys/arch/arm/arm/efi_runtime.h:1.1 Sun Oct 28 10:21:42 2018 +++ src/sys/arch/arm/arm/efi_runtime.h Wed Oct 31 13:01:48 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: efi_runtime.h,v 1.1 2018/10/28 10:21:42 jmcneill Exp $ */ +/* $NetBSD: efi_runtime.h,v 1.2 2018/10/31 13:01:48 jmcneill Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -39,6 +39,12 @@ int arm_efirt_gettime(struct efi_tm *); int arm_efirt_settime(struct efi_tm *); int arm_efirt_reset(enum efi_reset); -void arm_efirt_md_map_range(vaddr_t, paddr_t, size_t, bool); +enum arm_efirt_mem_type { + ARM_EFIRT_MEM_CODE, + ARM_EFIRT_MEM_DATA, + ARM_EFIRT_MEM_MMIO, +}; + +void arm_efirt_md_map_range(vaddr_t, paddr_t, size_t, enum arm_efirt_mem_type); #endif /* !_ARM_EFI_RUNTIME_H */ Index: src/sys/arch/evbarm/fdt/fdt_machdep.c diff -u src/sys/arch/evbarm/fdt/fdt_machdep.c:1.50 src/sys/arch/evbarm/fdt/fdt_machdep.c:1.51 --- src/sys/arch/evbarm/fdt/fdt_machdep.c:1.50 Wed Oct 31 09:15:25 2018 +++ src/sys/arch/evbarm/fdt/fdt_machdep.c Wed Oct 31 13:01:48 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: fdt_machdep.c,v 1.50 2018/10/31 09:15:25 skrll Exp $ */ +/* $NetBSD: fdt_machdep.c,v 1.51 2018/10/31 13:01:48 jmcneill Exp $ */ /*- * Copyright (c) 2015-2017 Jared McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fdt_machdep.c,v 1.50 2018/10/31 09:15:25 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fdt_machdep.c,v 1.51 2018/10/31 13:01:48 jmcneill Exp $"); #include "opt_machdep.h" #include "opt_bootconfig.h" @@ -388,7 +388,7 @@ fdt_setup_initrd(void) #ifdef EFI_RUNTIME static void -fdt_map_efi_runtime(const char *prop, bool exec) +fdt_map_efi_runtime(const char *prop, enum arm_efirt_mem_type type) { int len; @@ -404,7 +404,8 @@ fdt_map_efi_runtime(const char *prop, bo const paddr_t pa = be64toh(map[0]); const vaddr_t va = be64toh(map[1]); const uint64_t sz = be64toh(map[2]); - arm_efirt_md_map_range(va, pa, sz, exec); + VPRINTF("%s: %s %lx-%lx (%lx-%lx)\n", __func__, prop, pa, pa+sz-1, va, va+sz-1); + arm_efirt_md_map_range(va, pa, sz, type); map += 3; len -= 24; } @@ -523,8 +524,9 @@ initarm(void *arg) fdt_build_bootconfig(memory_start, memory_end); #ifdef EFI_RUNTIME - fdt_map_efi_runtime("netbsd,uefi-runtime-code", true); - fdt_map_efi_runtime("netbsd,uefi-runtime-data", false); + fdt_map_efi_runtime("netbsd,uefi-runtime-code", ARM_EFIRT_MEM_CODE); + fdt_map_efi_runtime("netbsd,uefi-runtime-data", ARM_EFIRT_MEM_DATA); + fdt_map_efi_runtime("netbsd,uefi-runtime-mmio", ARM_EFIRT_MEM_MMIO); #endif /* Perform PT build and VM init */