Module Name: src Committed By: skrll Date: Thu Apr 20 08:28:06 UTC 2023
Modified Files: src/sys/arch/aarch64/aarch64: pmap.c pmap_machdep.c src/sys/arch/aarch64/conf: files.aarch64 src/sys/arch/aarch64/include: cpufunc.h pmap.h pmap_machdep.h src/sys/arch/arm/arm32: pmap.c src/sys/arch/arm/conf: files.arm src/sys/arch/arm/include/arm32: pmap.h src/sys/arch/cats/cats: cats_machdep.c src/sys/arch/epoc32/epoc32: machdep.c src/sys/arch/evbarm/adi_brh: brh_machdep.c src/sys/arch/evbarm/armadaxp: armadaxp_machdep.c src/sys/arch/evbarm/g42xxeb: g42xxeb_machdep.c src/sys/arch/evbarm/gemini: gemini_machdep.c src/sys/arch/evbarm/gumstix: gumstix_machdep.c src/sys/arch/evbarm/hdl_g: hdlg_machdep.c src/sys/arch/evbarm/imx23_olinuxino: imx23_olinuxino_machdep.c src/sys/arch/evbarm/imx31: imx31lk_machdep.c src/sys/arch/evbarm/integrator: integrator_machdep.c src/sys/arch/evbarm/iq80310: iq80310_machdep.c src/sys/arch/evbarm/iq80321: iq80321_machdep.c src/sys/arch/evbarm/ixm1200: ixm1200_machdep.c src/sys/arch/evbarm/kobo: kobo_machdep.c src/sys/arch/evbarm/lubbock: lubbock_machdep.c src/sys/arch/evbarm/marvell: marvell_machdep.c src/sys/arch/evbarm/mini2440: mini2440_machdep.c src/sys/arch/evbarm/netwalker: netwalker_machdep.c src/sys/arch/evbarm/nslu2: nslu2_machdep.c src/sys/arch/evbarm/smdk2xx0: smdk2410_machdep.c smdk2800_machdep.c src/sys/arch/evbarm/tsarm: tsarm_machdep.c src/sys/arch/hpcarm/hpcarm: netbookpro_machdep.c pxa2x0_hpc_machdep.c sa11x0_hpc_machdep.c src/sys/arch/iyonix/iyonix: iyonix_machdep.c src/sys/arch/zaurus/zaurus: machdep.c Added Files: src/sys/uvm/pmap: pmap_devmap.c pmap_devmap.h Log Message: Provide a shared pmap_devmap implementation and convert all pmap_devmap arrays to use DEVMAP_ENTRY{,_END} To generate a diff of this commit: cvs rdiff -u -r1.148 -r1.149 src/sys/arch/aarch64/aarch64/pmap.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/aarch64/aarch64/pmap_machdep.c cvs rdiff -u -r1.42 -r1.43 src/sys/arch/aarch64/conf/files.aarch64 cvs rdiff -u -r1.25 -r1.26 src/sys/arch/aarch64/include/cpufunc.h cvs rdiff -u -r1.57 -r1.58 src/sys/arch/aarch64/include/pmap.h cvs rdiff -u -r1.2 -r1.3 src/sys/arch/aarch64/include/pmap_machdep.h cvs rdiff -u -r1.438 -r1.439 src/sys/arch/arm/arm32/pmap.c cvs rdiff -u -r1.167 -r1.168 src/sys/arch/arm/conf/files.arm cvs rdiff -u -r1.173 -r1.174 src/sys/arch/arm/include/arm32/pmap.h cvs rdiff -u -r1.93 -r1.94 src/sys/arch/cats/cats/cats_machdep.c cvs rdiff -u -r1.8 -r1.9 src/sys/arch/epoc32/epoc32/machdep.c cvs rdiff -u -r1.51 -r1.52 src/sys/arch/evbarm/adi_brh/brh_machdep.c cvs rdiff -u -r1.17 -r1.18 src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c cvs rdiff -u -r1.39 -r1.40 src/sys/arch/evbarm/g42xxeb/g42xxeb_machdep.c cvs rdiff -u -r1.33 -r1.34 src/sys/arch/evbarm/gemini/gemini_machdep.c cvs rdiff -u -r1.72 -r1.73 src/sys/arch/evbarm/gumstix/gumstix_machdep.c cvs rdiff -u -r1.33 -r1.34 src/sys/arch/evbarm/hdl_g/hdlg_machdep.c cvs rdiff -u -r1.13 -r1.14 \ src/sys/arch/evbarm/imx23_olinuxino/imx23_olinuxino_machdep.c cvs rdiff -u -r1.29 -r1.30 src/sys/arch/evbarm/imx31/imx31lk_machdep.c cvs rdiff -u -r1.80 -r1.81 \ src/sys/arch/evbarm/integrator/integrator_machdep.c cvs rdiff -u -r1.94 -r1.95 src/sys/arch/evbarm/iq80310/iq80310_machdep.c cvs rdiff -u -r1.64 -r1.65 src/sys/arch/evbarm/iq80321/iq80321_machdep.c cvs rdiff -u -r1.66 -r1.67 src/sys/arch/evbarm/ixm1200/ixm1200_machdep.c cvs rdiff -u -r1.8 -r1.9 src/sys/arch/evbarm/kobo/kobo_machdep.c cvs rdiff -u -r1.42 -r1.43 src/sys/arch/evbarm/lubbock/lubbock_machdep.c cvs rdiff -u -r1.37 -r1.38 src/sys/arch/evbarm/marvell/marvell_machdep.c cvs rdiff -u -r1.19 -r1.20 src/sys/arch/evbarm/mini2440/mini2440_machdep.c cvs rdiff -u -r1.26 -r1.27 src/sys/arch/evbarm/netwalker/netwalker_machdep.c cvs rdiff -u -r1.35 -r1.36 src/sys/arch/evbarm/nslu2/nslu2_machdep.c cvs rdiff -u -r1.45 -r1.46 src/sys/arch/evbarm/smdk2xx0/smdk2410_machdep.c cvs rdiff -u -r1.50 -r1.51 src/sys/arch/evbarm/smdk2xx0/smdk2800_machdep.c cvs rdiff -u -r1.34 -r1.35 src/sys/arch/evbarm/tsarm/tsarm_machdep.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/hpcarm/hpcarm/netbookpro_machdep.c cvs rdiff -u -r1.30 -r1.31 src/sys/arch/hpcarm/hpcarm/pxa2x0_hpc_machdep.c cvs rdiff -u -r1.21 -r1.22 src/sys/arch/hpcarm/hpcarm/sa11x0_hpc_machdep.c cvs rdiff -u -r1.31 -r1.32 src/sys/arch/iyonix/iyonix/iyonix_machdep.c cvs rdiff -u -r1.50 -r1.51 src/sys/arch/zaurus/zaurus/machdep.c cvs rdiff -u -r0 -r1.1 src/sys/uvm/pmap/pmap_devmap.c \ src/sys/uvm/pmap/pmap_devmap.h 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/pmap.c diff -u src/sys/arch/aarch64/aarch64/pmap.c:1.148 src/sys/arch/aarch64/aarch64/pmap.c:1.149 --- src/sys/arch/aarch64/aarch64/pmap.c:1.148 Sun Apr 16 14:01:51 2023 +++ src/sys/arch/aarch64/aarch64/pmap.c Thu Apr 20 08:28:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.148 2023/04/16 14:01:51 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.149 2023/04/20 08:28:02 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.148 2023/04/16 14:01:51 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.149 2023/04/20 08:28:02 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_cpuoptions.h" @@ -215,7 +215,6 @@ static vaddr_t pmap_maxkvaddr; vaddr_t virtual_avail, virtual_end; vaddr_t virtual_devmap_addr; -bool pmap_devmap_bootstrap_done = false; static struct pool_cache _pmap_cache; static struct pool_cache _pmap_pv_pool; @@ -336,10 +335,8 @@ phys_to_pp(paddr_t pa) #endif /* DIAGNOSTIC */ -static const struct pmap_devmap *pmap_devmap_table; - -static vsize_t -pmap_map_chunk(vaddr_t va, paddr_t pa, vsize_t size, +vsize_t +pmap_kenter_range(vaddr_t va, paddr_t pa, vsize_t size, vm_prot_t prot, u_int flags) { pt_entry_t attr; @@ -352,114 +349,6 @@ pmap_map_chunk(vaddr_t va, paddr_t pa, v return resid; } -void -pmap_devmap_register(const struct pmap_devmap *table) -{ - pmap_devmap_table = table; -} - -void -pmap_devmap_bootstrap(vaddr_t l0pt, const struct pmap_devmap *table) -{ - bool done = false; - vaddr_t va; - int i; - - pmap_devmap_register(table); - - VPRINTF("%s:\n", __func__); - for (i = 0; table[i].pd_size != 0; i++) { - VPRINTF(" devmap: pa %08lx-%08lx = va %016lx\n", - table[i].pd_pa, - table[i].pd_pa + table[i].pd_size - 1, - table[i].pd_va); - va = table[i].pd_va; - - KASSERT((VM_KERNEL_IO_BASE <= va) && - (va < (VM_KERNEL_IO_BASE + VM_KERNEL_IO_SIZE))); - - /* update and check virtual_devmap_addr */ - if (virtual_devmap_addr == 0 || virtual_devmap_addr > va) { - virtual_devmap_addr = va; - } - - pmap_map_chunk( - table[i].pd_va, - table[i].pd_pa, - table[i].pd_size, - table[i].pd_prot, - table[i].pd_flags); - done = true; - } - if (done) - pmap_devmap_bootstrap_done = true; -} - -const struct pmap_devmap * -pmap_devmap_find_va(vaddr_t va, vsize_t size) -{ - paddr_t endva; - int i; - - if (pmap_devmap_table == NULL) - return NULL; - - endva = va + size; - for (i = 0; pmap_devmap_table[i].pd_size != 0; i++) { - if ((va >= pmap_devmap_table[i].pd_va) && - (endva <= pmap_devmap_table[i].pd_va + - pmap_devmap_table[i].pd_size)) - return &pmap_devmap_table[i]; - } - return NULL; -} - -const struct pmap_devmap * -pmap_devmap_find_pa(paddr_t pa, psize_t size) -{ - paddr_t endpa; - int i; - - if (pmap_devmap_table == NULL) - return NULL; - - endpa = pa + size; - for (i = 0; pmap_devmap_table[i].pd_size != 0; i++) { - if (pa >= pmap_devmap_table[i].pd_pa && - (endpa <= pmap_devmap_table[i].pd_pa + - pmap_devmap_table[i].pd_size)) - return (&pmap_devmap_table[i]); - } - return NULL; -} - -vaddr_t -pmap_devmap_phystov(paddr_t pa) -{ - const struct pmap_devmap *table; - paddr_t offset; - - table = pmap_devmap_find_pa(pa, 0); - if (table == NULL) - return 0; - - offset = pa - table->pd_pa; - return table->pd_va + offset; -} - -vaddr_t -pmap_devmap_vtophys(paddr_t va) -{ - const struct pmap_devmap *table; - vaddr_t offset; - - table = pmap_devmap_find_va(va, 0); - if (table == NULL) - return 0; - - offset = va - table->pd_va; - return table->pd_pa + offset; -} void pmap_bootstrap(vaddr_t vstart, vaddr_t vend) Index: src/sys/arch/aarch64/aarch64/pmap_machdep.c diff -u src/sys/arch/aarch64/aarch64/pmap_machdep.c:1.5 src/sys/arch/aarch64/aarch64/pmap_machdep.c:1.6 --- src/sys/arch/aarch64/aarch64/pmap_machdep.c:1.5 Sun Apr 16 14:01:51 2023 +++ src/sys/arch/aarch64/aarch64/pmap_machdep.c Thu Apr 20 08:28:02 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_machdep.c,v 1.5 2023/04/16 14:01:51 skrll Exp $ */ +/* $NetBSD: pmap_machdep.c,v 1.6 2023/04/20 08:28:02 skrll Exp $ */ /*- * Copyright (c) 2022 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ #define __PMAP_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap_machdep.c,v 1.5 2023/04/16 14:01:51 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap_machdep.c,v 1.6 2023/04/20 08:28:02 skrll Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -69,8 +69,6 @@ uint64_t pmap_attr_gp = 0; vaddr_t virtual_avail; vaddr_t virtual_end; -bool pmap_devmap_bootstrap_done = false; - paddr_t vtophys(vaddr_t va) { @@ -647,9 +645,6 @@ pmap_l0table(struct pmap *pm) } -static const struct pmap_devmap *pmap_devmap_table; -vaddr_t virtual_devmap_addr; - #define L1_BLK_MAPPABLE_P(va, pa, size) \ ((((va) | (pa)) & L1_OFFSET) == 0 && (size) >= L1_SIZE) @@ -657,8 +652,8 @@ vaddr_t virtual_devmap_addr; ((((va) | (pa)) & L2_OFFSET) == 0 && (size) >= L2_SIZE) -static vsize_t -pmap_map_chunk(vaddr_t va, paddr_t pa, vsize_t size, +vsize_t +pmap_kenter_range(vaddr_t va, paddr_t pa, vsize_t size, vm_prot_t prot, u_int flags) { pt_entry_t attr; @@ -694,88 +689,6 @@ pmap_map_chunk(vaddr_t va, paddr_t pa, v return mapped; } - -void -pmap_devmap_register(const struct pmap_devmap *table) -{ - pmap_devmap_table = table; -} - - -void -pmap_devmap_bootstrap(vaddr_t l0pt, const struct pmap_devmap *table) -{ - vaddr_t va; - int i; - - pmap_devmap_register(table); - - VPRINTF("%s:\n", __func__); - for (i = 0; table[i].pd_size != 0; i++) { - VPRINTF(" devmap: pa %08lx-%08lx = va %016lx\n", - table[i].pd_pa, - table[i].pd_pa + table[i].pd_size - 1, - table[i].pd_va); - va = table[i].pd_va; - - KASSERT((VM_KERNEL_IO_BASE <= va) && - (va < (VM_KERNEL_IO_BASE + VM_KERNEL_IO_SIZE))); - - /* update and check virtual_devmap_addr */ - if ((virtual_devmap_addr == 0) || - (virtual_devmap_addr > va)) { - virtual_devmap_addr = va; - } - - pmap_map_chunk( - table[i].pd_va, - table[i].pd_pa, - table[i].pd_size, - table[i].pd_prot, - table[i].pd_flags); - - pmap_devmap_bootstrap_done = true; - } -} - - -const struct pmap_devmap * -pmap_devmap_find_va(vaddr_t va, vsize_t size) -{ - - if (pmap_devmap_table == NULL) - return NULL; - - const vaddr_t endva = va + size; - for (size_t i = 0; pmap_devmap_table[i].pd_size != 0; i++) { - if ((va >= pmap_devmap_table[i].pd_va) && - (endva <= pmap_devmap_table[i].pd_va + - pmap_devmap_table[i].pd_size)) { - return &pmap_devmap_table[i]; - } - } - return NULL; -} - - -const struct pmap_devmap * -pmap_devmap_find_pa(paddr_t pa, psize_t size) -{ - - if (pmap_devmap_table == NULL) - return NULL; - - const paddr_t endpa = pa + size; - for (size_t i = 0; pmap_devmap_table[i].pd_size != 0; i++) { - if (pa >= pmap_devmap_table[i].pd_pa && - (endpa <= pmap_devmap_table[i].pd_pa + - pmap_devmap_table[i].pd_size)) - return (&pmap_devmap_table[i]); - } - return NULL; -} - - #ifdef MULTIPROCESSOR void pmap_md_tlb_info_attach(struct pmap_tlb_info *ti, struct cpu_info *ci) Index: src/sys/arch/aarch64/conf/files.aarch64 diff -u src/sys/arch/aarch64/conf/files.aarch64:1.42 src/sys/arch/aarch64/conf/files.aarch64:1.43 --- src/sys/arch/aarch64/conf/files.aarch64:1.42 Sat Nov 5 08:29:17 2022 +++ src/sys/arch/aarch64/conf/files.aarch64 Thu Apr 20 08:28:02 2023 @@ -1,4 +1,4 @@ -# $NetBSD: files.aarch64,v 1.42 2022/11/05 08:29:17 skrll Exp $ +# $NetBSD: files.aarch64,v 1.43 2023/04/20 08:28:02 skrll Exp $ defflag opt_cpuoptions.h AARCH64_ALIGNMENT_CHECK defflag opt_cpuoptions.h AARCH64_EL0_STACK_ALIGNMENT_CHECK @@ -120,6 +120,7 @@ file arch/aarch64/aarch64/pmapboot.c file arch/aarch64/aarch64/pmap_page.S file arch/aarch64/aarch64/pmap_machdep.c pmap_mi file uvm/pmap/pmap.c pmap_mi +file uvm/pmap/pmap_devmap.c file uvm/pmap/pmap_pvt.c file uvm/pmap/pmap_segtab.c pmap_mi file uvm/pmap/pmap_tlb.c Index: src/sys/arch/aarch64/include/cpufunc.h diff -u src/sys/arch/aarch64/include/cpufunc.h:1.25 src/sys/arch/aarch64/include/cpufunc.h:1.26 --- src/sys/arch/aarch64/include/cpufunc.h:1.25 Sat Sep 10 12:14:17 2022 +++ src/sys/arch/aarch64/include/cpufunc.h Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: cpufunc.h,v 1.25 2022/09/10 12:14:17 rillig Exp $ */ +/* $NetBSD: cpufunc.h,v 1.26 2023/04/20 08:28:03 skrll Exp $ */ /* * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org> @@ -36,6 +36,9 @@ #include <sys/cpu.h> +#include <uvm/uvm_extern.h> +#include <uvm/pmap/pmap_devmap.h> + extern u_int aarch64_cache_vindexsize; /* cachesize/way (VIVT/VIPT) */ extern u_int aarch64_cache_prefer_mask; extern u_int cputype; /* compat arm */ @@ -131,14 +134,12 @@ cpu_clusterid(void) static inline bool cpu_earlydevice_va_p(void) { - extern bool pmap_devmap_bootstrap_done; /* in pmap.c */ - /* This function may be called before enabling MMU, or mapping KVA */ if ((reg_sctlr_el1_read() & SCTLR_M) == 0) return false; /* device mapping will be available after pmap_devmap_bootstrap() */ - if (!pmap_devmap_bootstrap_done) + if (!pmap_devmap_bootstrapped_p()) return false; return true; Index: src/sys/arch/aarch64/include/pmap.h diff -u src/sys/arch/aarch64/include/pmap.h:1.57 src/sys/arch/aarch64/include/pmap.h:1.58 --- src/sys/arch/aarch64/include/pmap.h:1.57 Thu Nov 3 09:04:56 2022 +++ src/sys/arch/aarch64/include/pmap.h Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.57 2022/11/03 09:04:56 skrll Exp $ */ +/* $NetBSD: pmap.h,v 1.58 2023/04/20 08:28:03 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -80,6 +80,7 @@ pmap_md_tlb_asid_max(void) } #include <uvm/pmap/tlb.h> +#include <uvm/pmap/pmap_devmap.h> #include <uvm/pmap/pmap_tlb.h> #define KERNEL_PID 0 /* The kernel uses ASID 0 */ @@ -161,22 +162,6 @@ pmap_kvattr(pt_entry_t *ptep, vm_prot_t return opte; } -/* devmap */ -struct pmap_devmap { - vaddr_t pd_va; /* virtual address */ - paddr_t pd_pa; /* physical address */ - psize_t pd_size; /* size of region */ - vm_prot_t pd_prot; /* protection code */ - u_int pd_flags; /* flags for pmap_kenter_pa() */ -}; - -void pmap_devmap_register(const struct pmap_devmap *); -void pmap_devmap_bootstrap(vaddr_t, const struct pmap_devmap *); -const struct pmap_devmap *pmap_devmap_find_pa(paddr_t, psize_t); -const struct pmap_devmap *pmap_devmap_find_va(vaddr_t, vsize_t); -vaddr_t pmap_devmap_phystov(paddr_t); -paddr_t pmap_devmap_vtophys(paddr_t); - #define L1_TRUNC_BLOCK(x) ((x) & L1_FRAME) #define L1_ROUND_BLOCK(x) L1_TRUNC_BLOCK((x) + L1_SIZE - 1) #define L2_TRUNC_BLOCK(x) ((x) & L2_FRAME) @@ -186,16 +171,7 @@ paddr_t pmap_devmap_vtophys(paddr_t); #define DEVMAP_ALIGN(x) L3_TRUNC_BLOCK((x)) #define DEVMAP_SIZE(x) L3_ROUND_BLOCK((x)) - -#define DEVMAP_ENTRY(va, pa, sz) \ - { \ - .pd_va = DEVMAP_ALIGN(va), \ - .pd_pa = DEVMAP_ALIGN(pa), \ - .pd_size = DEVMAP_SIZE(sz), \ - .pd_prot = VM_PROT_READ | VM_PROT_WRITE, \ - .pd_flags = PMAP_DEV \ - } -#define DEVMAP_ENTRY_END { 0 } +#define DEVMAP_FLAGS PMAP_DEV /* Hooks for the pool allocator */ paddr_t vtophys(vaddr_t); @@ -268,6 +244,8 @@ void pmapboot_enter_range(vaddr_t, paddr void (*)(const char *, ...) __printflike(1, 2)); int pmapboot_protect(vaddr_t, vaddr_t, vm_prot_t); +vsize_t pmap_map_chunk(vaddr_t, vaddr_t, paddr_t, vsize_t, vm_prot_t, u_int); + #if defined(DDB) void pmap_db_pte_print(pt_entry_t, int, void (*)(const char *, ...) __printflike(1, 2)); void pmap_db_pteinfo(vaddr_t, void (*)(const char *, ...) __printflike(1, 2)); @@ -415,6 +393,8 @@ void pmap_pv_track(paddr_t, psize_t); void pmap_pv_untrack(paddr_t, psize_t); void pmap_pv_protect(paddr_t, vm_prot_t); +vsize_t pmap_kenter_range(vaddr_t, paddr_t, vsize_t, vm_prot_t, u_int); + #define PMAP_MAPSIZE1 L2_SIZE /* for ddb */ Index: src/sys/arch/aarch64/include/pmap_machdep.h diff -u src/sys/arch/aarch64/include/pmap_machdep.h:1.2 src/sys/arch/aarch64/include/pmap_machdep.h:1.3 --- src/sys/arch/aarch64/include/pmap_machdep.h:1.2 Wed Dec 21 11:39:46 2022 +++ src/sys/arch/aarch64/include/pmap_machdep.h Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap_machdep.h,v 1.2 2022/12/21 11:39:46 skrll Exp $ */ +/* $NetBSD: pmap_machdep.h,v 1.3 2023/04/20 08:28:03 skrll Exp $ */ /*- * Copyright (c) 2022 The NetBSD Foundation, Inc. @@ -111,6 +111,8 @@ void pmap_md_deactivate_efirt(void); void pmap_icache_sync_range(pmap_t, vaddr_t, vaddr_t); +vsize_t pmap_kenter_range(vaddr_t, paddr_t, vsize_t, vm_prot_t, u_int flags); + #include <uvm/pmap/vmpagemd.h> #include <uvm/pmap/pmap.h> #include <uvm/pmap/pmap_pvt.h> Index: src/sys/arch/arm/arm32/pmap.c diff -u src/sys/arch/arm/arm32/pmap.c:1.438 src/sys/arch/arm/arm32/pmap.c:1.439 --- src/sys/arch/arm/arm32/pmap.c:1.438 Sun Dec 18 12:02:47 2022 +++ src/sys/arch/arm/arm32/pmap.c Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.438 2022/12/18 12:02:47 skrll Exp $ */ +/* $NetBSD: pmap.c,v 1.439 2023/04/20 08:28:03 skrll Exp $ */ /* * Copyright 2003 Wasabi Systems, Inc. @@ -193,7 +193,7 @@ #endif #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.438 2022/12/18 12:02:47 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.439 2023/04/20 08:28:03 skrll Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -7211,88 +7211,28 @@ pmap_unmap_chunk(vaddr_t l1pt, vaddr_t v } - -/********************** Static device map routines ***************************/ - -static const struct pmap_devmap *pmap_devmap_table; - -/* - * Register the devmap table. This is provided in case early console - * initialization needs to register mappings created by bootstrap code - * before pmap_devmap_bootstrap() is called. - */ -void -pmap_devmap_register(const struct pmap_devmap *table) -{ - - pmap_devmap_table = table; -} - -/* - * Map all of the static regions in the devmap table, and remember - * the devmap table so other parts of the kernel can look up entries - * later. - */ -void -pmap_devmap_bootstrap(vaddr_t l1pt, const struct pmap_devmap *table) -{ - int i; - - pmap_devmap_table = table; - - for (i = 0; pmap_devmap_table[i].pd_size != 0; i++) { - const struct pmap_devmap *pdp = &pmap_devmap_table[i]; - - KASSERTMSG(VADDR_MAX - pdp->pd_va >= pdp->pd_size - 1, "va %" PRIxVADDR - " sz %" PRIxPSIZE, pdp->pd_va, pdp->pd_size); - KASSERTMSG(PADDR_MAX - pdp->pd_pa >= pdp->pd_size - 1, "pa %" PRIxPADDR - " sz %" PRIxPSIZE, pdp->pd_pa, pdp->pd_size); - VPRINTF("devmap: %08lx -> %08lx @ %08lx\n", pdp->pd_pa, - pdp->pd_pa + pdp->pd_size - 1, pdp->pd_va); - - pmap_map_chunk(l1pt, pdp->pd_va, pdp->pd_pa, pdp->pd_size, - pdp->pd_prot, pdp->pd_cache); - } -} - -const struct pmap_devmap * -pmap_devmap_find_pa(paddr_t pa, psize_t size) +vsize_t +pmap_kenter_range(vaddr_t va, paddr_t pa, vsize_t size, vm_prot_t prot, + u_int flags) { - uint64_t endpa; - int i; - - if (pmap_devmap_table == NULL) - return NULL; - - endpa = (uint64_t)pa + (uint64_t)(size - 1); + const vaddr_t root = pmap_devmap_root(); - for (i = 0; pmap_devmap_table[i].pd_size != 0; i++) { - if (pa >= pmap_devmap_table[i].pd_pa && - endpa <= (uint64_t)pmap_devmap_table[i].pd_pa + - (uint64_t)(pmap_devmap_table[i].pd_size - 1)) - return &pmap_devmap_table[i]; + int cache; + switch (flags) { + case PMAP_DEV: + cache = PTE_DEV; + break; + case PMAP_NOCACHE: + cache = PTE_NOCACHE; + break; + default: + cache = PTE_CACHE; + break; } - return NULL; + return pmap_map_chunk(root, va, pa, size, prot, cache); } -const struct pmap_devmap * -pmap_devmap_find_va(vaddr_t va, vsize_t size) -{ - int i; - - if (pmap_devmap_table == NULL) - return NULL; - - for (i = 0; pmap_devmap_table[i].pd_size != 0; i++) { - if (va >= pmap_devmap_table[i].pd_va && - va + size - 1 <= pmap_devmap_table[i].pd_va + - pmap_devmap_table[i].pd_size - 1) - return &pmap_devmap_table[i]; - } - - return NULL; -} /********************** PTE initialization routines **************************/ Index: src/sys/arch/arm/conf/files.arm diff -u src/sys/arch/arm/conf/files.arm:1.167 src/sys/arch/arm/conf/files.arm:1.168 --- src/sys/arch/arm/conf/files.arm:1.167 Fri Oct 28 07:16:34 2022 +++ src/sys/arch/arm/conf/files.arm Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -# $NetBSD: files.arm,v 1.167 2022/10/28 07:16:34 skrll Exp $ +# $NetBSD: files.arm,v 1.168 2023/04/20 08:28:03 skrll Exp $ # temporary define to allow easy moving to ../arch/arm/arm32 defflag ARM32 @@ -235,6 +235,7 @@ file kern/kern_cctr.c arm11 file arch/arm/arm32/arm11_pmc.c arm11_pmc file arch/arm/arm32/cortex_pmc.c cortex_pmc file arch/arm/arm32/arm32_tlb.c (cpu_armv7 | cpu_arm11) & (!arm11_compat_mmu & !cpu_pre_armv6) +file uvm/pmap/pmap_devmap.c file uvm/pmap/pmap_tlb.c (cpu_armv7 | cpu_arm11) & (!arm11_compat_mmu & !cpu_pre_armv6) # generic pmap files for arm32 implementations Index: src/sys/arch/arm/include/arm32/pmap.h diff -u src/sys/arch/arm/include/arm32/pmap.h:1.173 src/sys/arch/arm/include/arm32/pmap.h:1.174 --- src/sys/arch/arm/include/arm32/pmap.h:1.173 Sat Apr 2 11:16:07 2022 +++ src/sys/arch/arm/include/arm32/pmap.h Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.173 2022/04/02 11:16:07 skrll Exp $ */ +/* $NetBSD: pmap.h,v 1.174 2023/04/20 08:28:03 skrll Exp $ */ /* * Copyright (c) 2002, 2003 Wasabi Systems, Inc. @@ -79,7 +79,10 @@ #endif #include <arm/cpufunc.h> #include <arm/locore.h> + #include <uvm/uvm_object.h> + +#include <uvm/pmap/pmap_devmap.h> #include <uvm/pmap/pmap_pvt.h> #endif @@ -201,29 +204,10 @@ union pmap_cache_state { #define PMAP_CACHE_STATE_ALL 0xffffffffu #endif /* !ARM_MMU_EXTENDED */ -/* - * This structure is used by machine-dependent code to describe - * static mappings of devices, created at bootstrap time. - */ -struct pmap_devmap { - vaddr_t pd_va; /* virtual address */ - paddr_t pd_pa; /* physical address */ - psize_t pd_size; /* size of region */ - vm_prot_t pd_prot; /* protection code */ - int pd_cache; /* cache attributes */ -}; #define DEVMAP_ALIGN(a) ((a) & ~L1_S_OFFSET) #define DEVMAP_SIZE(s) roundup2((s), L1_S_SIZE) -#define DEVMAP_ENTRY(va, pa, sz) \ - { \ - .pd_va = DEVMAP_ALIGN(va), \ - .pd_pa = DEVMAP_ALIGN(pa), \ - .pd_size = DEVMAP_SIZE(sz), \ - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, \ - .pd_cache = PTE_DEV \ - } -#define DEVMAP_ENTRY_END { 0 } +#define DEVMAP_FLAGS PTE_DEV /* * The pmap structure itself @@ -419,17 +403,14 @@ void pmap_postinit(void); void vector_page_setprot(int); -const struct pmap_devmap *pmap_devmap_find_pa(paddr_t, psize_t); -const struct pmap_devmap *pmap_devmap_find_va(vaddr_t, vsize_t); - /* Bootstrapping routines. */ void pmap_map_section(vaddr_t, vaddr_t, paddr_t, int, int); void pmap_map_entry(vaddr_t, vaddr_t, paddr_t, int, int); vsize_t pmap_map_chunk(vaddr_t, vaddr_t, paddr_t, vsize_t, int, int); void pmap_unmap_chunk(vaddr_t, vaddr_t, vsize_t); void pmap_link_l2pt(vaddr_t, vaddr_t, pv_addr_t *); -void pmap_devmap_bootstrap(vaddr_t, const struct pmap_devmap *); -void pmap_devmap_register(const struct pmap_devmap *); + +vsize_t pmap_kenter_range(vaddr_t, paddr_t, vsize_t, vm_prot_t, u_int); /* * Special page zero routine for use by the idle loop (no cache cleans). Index: src/sys/arch/cats/cats/cats_machdep.c diff -u src/sys/arch/cats/cats/cats_machdep.c:1.93 src/sys/arch/cats/cats/cats_machdep.c:1.94 --- src/sys/arch/cats/cats/cats_machdep.c:1.93 Sat Jan 8 09:02:47 2022 +++ src/sys/arch/cats/cats/cats_machdep.c Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: cats_machdep.c,v 1.93 2022/01/08 09:02:47 skrll Exp $ */ +/* $NetBSD: cats_machdep.c,v 1.94 2023/04/20 08:28:03 skrll Exp $ */ /* * Copyright (c) 1997,1998 Mark Brinicombe. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cats_machdep.c,v 1.93 2022/01/08 09:02:47 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cats_machdep.c,v 1.94 2023/04/20 08:28:03 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_cats.h" @@ -173,41 +173,41 @@ int comcnmode = CONMODE; static const struct pmap_devmap cats_devmap[] = { /* Map 1MB for CSR space */ - { DC21285_ARMCSR_VBASE, DC21285_ARMCSR_BASE, - DC21285_ARMCSR_VSIZE, VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE }, + DEVMAP_ENTRY(DC21285_ARMCSR_VBASE, + DC21285_ARMCSR_BASE, + DC21285_ARMCSR_VSIZE), /* Map 1MB for fast cache cleaning space */ - { DC21285_CACHE_FLUSH_VBASE, DC21285_SA_CACHE_FLUSH_BASE, - DC21285_CACHE_FLUSH_VSIZE, VM_PROT_READ|VM_PROT_WRITE, - PTE_CACHE }, + DEVMAP_ENTRY(DC21285_CACHE_FLUSH_VBASE, + DC21285_SA_CACHE_FLUSH_BASE, + DC21285_CACHE_FLUSH_VSIZE), /* Map 1MB for PCI IO space */ - { DC21285_PCI_IO_VBASE, DC21285_PCI_IO_BASE, - DC21285_PCI_IO_VSIZE, VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE }, + DEVMAP_ENTRY(DC21285_PCI_IO_VBASE, + DC21285_PCI_IO_BASE, + DC21285_PCI_IO_VSIZE), /* Map 1MB for PCI IACK space */ - { DC21285_PCI_IACK_VBASE, DC21285_PCI_IACK_SPECIAL, - DC21285_PCI_IACK_VSIZE, VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE }, + DEVMAP_ENTRY(DC21285_PCI_IACK_VBASE, + DC21285_PCI_IACK_SPECIAL, + DC21285_PCI_IACK_VSIZE), /* Map 16MB of type 1 PCI config access */ - { DC21285_PCI_TYPE_1_CONFIG_VBASE, DC21285_PCI_TYPE_1_CONFIG, - DC21285_PCI_TYPE_1_CONFIG_VSIZE, VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE }, + DEVMAP_ENTRY(DC21285_PCI_TYPE_1_CONFIG_VBASE, + DC21285_PCI_TYPE_1_CONFIG, + DC21285_PCI_TYPE_1_CONFIG_VSIZE), /* Map 16MB of type 0 PCI config access */ - { DC21285_PCI_TYPE_0_CONFIG_VBASE, DC21285_PCI_TYPE_0_CONFIG, - DC21285_PCI_TYPE_0_CONFIG_VSIZE, VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE }, + DEVMAP_ENTRY(DC21285_PCI_TYPE_0_CONFIG_VBASE, + DC21285_PCI_TYPE_0_CONFIG, + DC21285_PCI_TYPE_0_CONFIG_VSIZE), /* Map 1MB of 32 bit PCI address space for ISA MEM accesses via PCI */ - { DC21285_PCI_ISA_MEM_VBASE, DC21285_PCI_MEM_BASE, - DC21285_PCI_ISA_MEM_VSIZE, VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE }, + DEVMAP_ENTRY(DC21285_PCI_ISA_MEM_VBASE, + DC21285_PCI_MEM_BASE, + DC21285_PCI_ISA_MEM_VSIZE), - { 0, 0, 0, 0, 0 } + DEVMAP_ENTRY_END }; #define MAX_PHYSMEM 4 Index: src/sys/arch/epoc32/epoc32/machdep.c diff -u src/sys/arch/epoc32/epoc32/machdep.c:1.8 src/sys/arch/epoc32/epoc32/machdep.c:1.9 --- src/sys/arch/epoc32/epoc32/machdep.c:1.8 Tue Jul 16 14:41:44 2019 +++ src/sys/arch/epoc32/epoc32/machdep.c Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.8 2019/07/16 14:41:44 skrll Exp $ */ +/* $NetBSD: machdep.c,v 1.9 2023/04/20 08:28:03 skrll Exp $ */ /* * Copyright (c) 2012, 2013 KIYOHARA Takashi * All rights reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.8 2019/07/16 14:41:44 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.9 2023/04/20 08:28:03 skrll Exp $"); #include "clpscom.h" #include "clpslcd.h" @@ -123,29 +123,23 @@ int epoc32_fb_addr; * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE - 1)) static const struct pmap_devmap epoc32_devmap[] = { - { + DEVMAP_ENTRY( ARM7XX_INTRREG_VBASE, /* included com, lcd-ctrl */ - _A(ARM7XX_INTRREG_BASE), - _S(ARM7XX_INTRREG_SIZE), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, + ARM7XX_INTRREG_BASE, + ARM7XX_INTRREG_SIZE + ), - { 0, 0, 0, 0, 0 } + DEVMAP_ENTRY_END }; static const struct pmap_devmap epoc32_fb_devmap[] = { - { + DEVMAP_ENTRY( ARM7XX_FB_VBASE, - _A(ARM7XX_FB_BASE), - _S(ARM7XX_FB_SIZE), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, + ARM7XX_FB_BASE, + ARM7XX_FB_SIZE + ), - { 0, 0, 0, 0, 0 } + DEVMAP_ENTRY_END }; /* Index: src/sys/arch/evbarm/adi_brh/brh_machdep.c diff -u src/sys/arch/evbarm/adi_brh/brh_machdep.c:1.51 src/sys/arch/evbarm/adi_brh/brh_machdep.c:1.52 --- src/sys/arch/evbarm/adi_brh/brh_machdep.c:1.51 Tue Aug 17 22:00:27 2021 +++ src/sys/arch/evbarm/adi_brh/brh_machdep.c Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: brh_machdep.c,v 1.51 2021/08/17 22:00:27 andvar Exp $ */ +/* $NetBSD: brh_machdep.c,v 1.52 2023/04/20 08:28:03 skrll Exp $ */ /* * Copyright (c) 2001, 2002, 2003 Wasabi Systems, Inc. @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: brh_machdep.c,v 1.51 2021/08/17 22:00:27 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: brh_machdep.c,v 1.52 2023/04/20 08:28:03 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -259,69 +259,47 @@ cpu_reboot(int howto, char *bootstr) /* Static device mappings. */ static const struct pmap_devmap brh_devmap[] = { - { + DEVMAP_ENTRY( BRH_PCI_CONF_VBASE, BECC_PCI_CONF_BASE, - BRH_PCI_CONF_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + BRH_PCI_CONF_VSIZE + ), + DEVMAP_ENTRY( BRH_PCI_MEM1_VBASE, BECC_PCI_MEM1_BASE, - BRH_PCI_MEM1_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + BRH_PCI_MEM1_VSIZE + ), + DEVMAP_ENTRY( BRH_PCI_MEM2_VBASE, BECC_PCI_MEM2_BASE, - BRH_PCI_MEM2_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + BRH_PCI_MEM2_VSIZE + ), + DEVMAP_ENTRY( BRH_UART1_VBASE, BRH_UART1_BASE, - BRH_UART1_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + BRH_UART1_VSIZE + ), + DEVMAP_ENTRY( BRH_UART2_VBASE, BRH_UART2_BASE, - BRH_UART2_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + BRH_UART2_VSIZE + ), + DEVMAP_ENTRY( BRH_LED_VBASE, BRH_LED_BASE, - BRH_LED_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + BRH_LED_VSIZE + ), + DEVMAP_ENTRY( BRH_PCI_IO_VBASE, BECC_PCI_IO_BASE, - BRH_PCI_IO_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + BRH_PCI_IO_VSIZE + ), + DEVMAP_ENTRY( BRH_BECC_VBASE, BECC_REG_BASE, - BRH_BECC_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { - 0, - 0, - 0, - 0, - 0, - } + BRH_BECC_VSIZE + ), + DEVMAP_ENTRY_END }; static void Index: src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c diff -u src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c:1.17 src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c:1.18 --- src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c:1.17 Tue Jul 16 14:41:44 2019 +++ src/sys/arch/evbarm/armadaxp/armadaxp_machdep.c Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: armadaxp_machdep.c,v 1.17 2019/07/16 14:41:44 skrll Exp $ */ +/* $NetBSD: armadaxp_machdep.c,v 1.18 2023/04/20 08:28:03 skrll Exp $ */ /******************************************************************************* Copyright (C) Marvell International Ltd. and its affiliates @@ -37,7 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI *******************************************************************************/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: armadaxp_machdep.c,v 1.17 2019/07/16 14:41:44 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: armadaxp_machdep.c,v 1.18 2023/04/20 08:28:03 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -187,24 +187,15 @@ axp_system_reset(void) * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - static const struct pmap_devmap devmap[] = { - { - /* Internal registers */ - .pd_va = _A(MARVELL_INTERREGS_VBASE), - .pd_pa = _A(MARVELL_INTERREGS_PBASE), - .pd_size = _S(MVSOC_INTERREGS_SIZE), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, - {0, 0, 0, 0, 0} + DEVMAP_ENTRY_FLAGS(MARVELL_INTERREGS_VBASE, + MARVELL_INTERREGS_PBASE, + MVSOC_INTERREGS_SIZE, + VM_PROT_READ | VM_PROT_WRITE, + PMAP_NOCACHE), + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - static inline pd_entry_t * read_ttb(void) { Index: src/sys/arch/evbarm/g42xxeb/g42xxeb_machdep.c diff -u src/sys/arch/evbarm/g42xxeb/g42xxeb_machdep.c:1.39 src/sys/arch/evbarm/g42xxeb/g42xxeb_machdep.c:1.40 --- src/sys/arch/evbarm/g42xxeb/g42xxeb_machdep.c:1.39 Sun Jul 3 19:58:42 2022 +++ src/sys/arch/evbarm/g42xxeb/g42xxeb_machdep.c Thu Apr 20 08:28:03 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: g42xxeb_machdep.c,v 1.39 2022/07/03 19:58:42 andvar Exp $ */ +/* $NetBSD: g42xxeb_machdep.c,v 1.40 2023/04/20 08:28:03 skrll Exp $ */ /* * Copyright (c) 2002, 2003, 2004, 2005 Genetec Corporation. @@ -335,53 +335,40 @@ read_ttb(void) * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - static const struct pmap_devmap g42xxeb_devmap[] = { - { + DEVMAP_ENTRY( G42XXEB_PLDREG_VBASE, - _A(G42XXEB_PLDREG_BASE), - _S(G42XXEB_PLDREG_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + G42XXEB_PLDREG_BASE, + G42XXEB_PLDREG_SIZE + ), + DEVMAP_ENTRY( G42XXEB_GPIO_VBASE, - _A(PXA2X0_GPIO_BASE), - _S(PXA250_GPIO_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_GPIO_BASE, + PXA250_GPIO_SIZE + ), + DEVMAP_ENTRY( G42XXEB_CLKMAN_VBASE, - _A(PXA2X0_CLKMAN_BASE), - _S(PXA2X0_CLKMAN_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_CLKMAN_BASE, + PXA2X0_CLKMAN_SIZE + ), + DEVMAP_ENTRY( G42XXEB_INTCTL_VBASE, - _A(PXA2X0_INTCTL_BASE), - _S(PXA2X0_INTCTL_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_INTCTL_BASE, + PXA2X0_INTCTL_SIZE + ), + DEVMAP_ENTRY( G42XXEB_FFUART_VBASE, - _A(PXA2X0_FFUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_FFUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( G42XXEB_BTUART_VBASE, - _A(PXA2X0_BTUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - {0, 0, 0, 0,} + PXA2X0_BTUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - - /* * vaddr_t initarm(...) * Index: src/sys/arch/evbarm/gemini/gemini_machdep.c diff -u src/sys/arch/evbarm/gemini/gemini_machdep.c:1.33 src/sys/arch/evbarm/gemini/gemini_machdep.c:1.34 --- src/sys/arch/evbarm/gemini/gemini_machdep.c:1.33 Sat Nov 28 14:02:30 2020 +++ src/sys/arch/evbarm/gemini/gemini_machdep.c Thu Apr 20 08:28:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: gemini_machdep.c,v 1.33 2020/11/28 14:02:30 skrll Exp $ */ +/* $NetBSD: gemini_machdep.c,v 1.34 2023/04/20 08:28:04 skrll Exp $ */ /* adapted from: * NetBSD: sdp24xx_machdep.c,v 1.4 2008/08/27 11:03:10 matt Exp @@ -129,7 +129,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: gemini_machdep.c,v 1.33 2020/11/28 14:02:30 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: gemini_machdep.c,v 1.34 2023/04/20 08:28:04 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -418,90 +418,66 @@ cpu_reboot(int howto, char *bootstr) * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - static const struct pmap_devmap devmap[] = { /* Global regs */ - { - .pd_va = _A(GEMINI_GLOBAL_VBASE), - .pd_pa = _A(GEMINI_GLOBAL_BASE), - .pd_size = _S(L1_S_SIZE), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, + DEVMAP_ENTRY_FLAGS(GEMINI_GLOBAL_VBASE, + GEMINI_GLOBAL_BASE, + L1_S_SIZE, + PMAP_NOCACHE), /* Watchdog */ - { - .pd_va = _A(GEMINI_WATCHDOG_VBASE), - .pd_pa = _A(GEMINI_WATCHDOG_BASE), - .pd_size = _S(L1_S_SIZE), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, + DEVMAP_ENTRY_FLAGS(GEMINI_WATCHDOG_VBASE, + GEMINI_WATCHDOG_BASE, + L1_S_SIZE, + PMAP_NOCACHE), + + DEVMAP_ENTRY_FLAGS(GEMINI_WATCHDOG_VBASE, + GEMINI_WATCHDOG_BASE, + L1_S_SIZE, + PMAP_NOCACHE), /* UART */ - { - .pd_va = _A(GEMINI_UART_VBASE), - .pd_pa = _A(GEMINI_UART_BASE), - .pd_size = _S(L1_S_SIZE), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, + DEVMAP_ENTRY_FLAGS(GEMINI_UART_VBASE, + GEMINI_UART_BASE, + L1_S_SIZE, + PMAP_NOCACHE), /* LPCHC */ - { - .pd_va = _A(GEMINI_LPCHC_VBASE), - .pd_pa = _A(GEMINI_LPCHC_BASE), - .pd_size = _S(L1_S_SIZE), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, + DEVMAP_ENTRY_FLAGS(GEMINI_LPCHC_VBASE, + GEMINI_LPCHC_BASE, + L1_S_SIZE, + PMAP_NOCACHE), /* LPCIO */ - { - .pd_va = _A(GEMINI_LPCIO_VBASE), - .pd_pa = _A(GEMINI_LPCIO_BASE), - .pd_size = _S(L1_S_SIZE), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, + DEVMAP_ENTRY_FLAGS(GEMINI_LPCIO_VBASE, + GEMINI_LPCIO_BASE, + L1_S_SIZE, + PMAP_NOCACHE), /* Timers */ - { - .pd_va = _A(GEMINI_TIMER_VBASE), - .pd_pa = _A(GEMINI_TIMER_BASE), - .pd_size = _S(L1_S_SIZE), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, + DEVMAP_ENTRY_FLAGS(GEMINI_TIMER_VBASE, + GEMINI_TIMER_BASE, + L1_S_SIZE, + PMAP_NOCACHE), /* DRAM Controller */ - { - .pd_va = _A(GEMINI_DRAMC_VBASE), - .pd_pa = _A(GEMINI_DRAMC_BASE), - .pd_size = _S(L1_S_SIZE), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, + DEVMAP_ENTRY_FLAGS(GEMINI_DRAMC_VBASE, + GEMINI_DRAMC_BASE, + L1_S_SIZE, + PMAP_NOCACHE), #if defined(MEMORY_DISK_DYNAMIC) /* Ramdisk */ - { - .pd_va = _A(GEMINI_RAMDISK_VBASE), - .pd_pa = _A(GEMINI_RAMDISK_PBASE), - .pd_size = _S(GEMINI_RAMDISK_SIZE), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, + DEVMAP_ENTRY_FLAGS(GEMINI_RAMDISK_VBASE, + GEMINI_RAMDISK_PBASE, + L1_S_SIZE, + PMAP_NOCACHE), #endif - {0} /* list terminator */ + /* list terminator */ + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - #ifdef DDB static void gemini_db_trap(int where) { Index: src/sys/arch/evbarm/gumstix/gumstix_machdep.c diff -u src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.72 src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.73 --- src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.72 Sat Oct 29 13:10:25 2022 +++ src/sys/arch/evbarm/gumstix/gumstix_machdep.c Thu Apr 20 08:28:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: gumstix_machdep.c,v 1.72 2022/10/29 13:10:25 jmcneill Exp $ */ +/* $NetBSD: gumstix_machdep.c,v 1.73 2023/04/20 08:28:04 skrll Exp $ */ /* * Copyright (C) 2005, 2006, 2007 WIDE Project and SOUM Corporation. * All rights reserved. @@ -277,74 +277,52 @@ read_ttb(void) * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - static const struct pmap_devmap gumstix_devmap[] = { #if defined(GUMSTIX) - { + DEVMAP_ENTRY( GUMSTIX_GPIO_VBASE, - _A(PXA2X0_GPIO_BASE), - _S(PXA250_GPIO_SIZE), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + PXA2X0_GPIO_BASE, + PXA250_GPIO_SIZE + ), + DEVMAP_ENTRY( GUMSTIX_CLKMAN_VBASE, - _A(PXA2X0_CLKMAN_BASE), - _S(PXA2X0_CLKMAN_SIZE), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + PXA2X0_CLKMAN_BASE, + PXA2X0_CLKMAN_SIZE + ), + DEVMAP_ENTRY( GUMSTIX_INTCTL_VBASE, - _A(PXA2X0_INTCTL_BASE), - _S(PXA2X0_INTCTL_SIZE), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + PXA2X0_INTCTL_BASE, + PXA2X0_INTCTL_SIZE + ), + DEVMAP_ENTRY( GUMSTIX_FFUART_VBASE, - _A(PXA2X0_FFUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + PXA2X0_FFUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( GUMSTIX_STUART_VBASE, - _A(PXA2X0_STUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + PXA2X0_STUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( GUMSTIX_BTUART_VBASE, - _A(PXA2X0_BTUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + PXA2X0_BTUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( GUMSTIX_HWUART_VBASE, - _A(PXA2X0_HWUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + PXA2X0_HWUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( GUMSTIX_LCDC_VBASE, - _A(PXA2X0_LCDC_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ | VM_PROT_WRITE, - PTE_NOCACHE, - }, + PXA2X0_LCDC_BASE, + 4 * COM_NPORTS + ), #endif - { 0, 0, 0, 0, 0 } + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - extern uint32_t *uboot_args; /* Index: src/sys/arch/evbarm/hdl_g/hdlg_machdep.c diff -u src/sys/arch/evbarm/hdl_g/hdlg_machdep.c:1.33 src/sys/arch/evbarm/hdl_g/hdlg_machdep.c:1.34 --- src/sys/arch/evbarm/hdl_g/hdlg_machdep.c:1.33 Tue Jan 4 10:38:04 2022 +++ src/sys/arch/evbarm/hdl_g/hdlg_machdep.c Thu Apr 20 08:28:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: hdlg_machdep.c,v 1.33 2022/01/04 10:38:04 skrll Exp $ */ +/* $NetBSD: hdlg_machdep.c,v 1.34 2023/04/20 08:28:04 skrll Exp $ */ /* * Copyright (c) 2001, 2002, 2003 Wasabi Systems, Inc. @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hdlg_machdep.c,v 1.33 2022/01/04 10:38:04 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hdlg_machdep.c,v 1.34 2023/04/20 08:28:04 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -171,37 +171,25 @@ static const struct pmap_devmap hdlg_dev * Map the on-board devices VA == PA so that we can access them * with the MMU on or off. */ - { + DEVMAP_ENTRY( HDLG_OBIO_BASE, HDLG_OBIO_BASE, - HDLG_OBIO_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + HDLG_OBIO_SIZE + ), - { + DEVMAP_ENTRY( HDLG_IOW_VBASE, VERDE_OUT_XLATE_IO_WIN0_BASE, - VERDE_OUT_XLATE_IO_WIN_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + VERDE_OUT_XLATE_IO_WIN_SIZE + ), - { + DEVMAP_ENTRY( HDLG_80321_VBASE, VERDE_PMMR_BASE, - VERDE_PMMR_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - - { - 0, - 0, - 0, - 0, - 0, - } + VERDE_PMMR_SIZE + ), + + DEVMAP_ENTRY_END }; static void Index: src/sys/arch/evbarm/imx23_olinuxino/imx23_olinuxino_machdep.c diff -u src/sys/arch/evbarm/imx23_olinuxino/imx23_olinuxino_machdep.c:1.13 src/sys/arch/evbarm/imx23_olinuxino/imx23_olinuxino_machdep.c:1.14 --- src/sys/arch/evbarm/imx23_olinuxino/imx23_olinuxino_machdep.c:1.13 Fri Dec 3 13:27:38 2021 +++ src/sys/arch/evbarm/imx23_olinuxino/imx23_olinuxino_machdep.c Thu Apr 20 08:28:04 2023 @@ -1,4 +1,4 @@ -/* $Id: imx23_olinuxino_machdep.c,v 1.13 2021/12/03 13:27:38 andvar Exp $ */ +/* $Id: imx23_olinuxino_machdep.c,v 1.14 2023/04/20 08:28:04 skrll Exp $ */ /* * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -91,20 +91,14 @@ do { \ /* * Static device map for i.MX23 peripheral address space. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) static const struct pmap_devmap devmap[] = { - { - _A(APBH_BASE), /* Virtual address. */ - _A(APBH_BASE), /* Physical address. */ - _S(APBH_SIZE + APBX_SIZE), /* APBX located after APBH. */ - VM_PROT_READ|VM_PROT_WRITE, /* Protection bits. */ - PTE_NOCACHE /* Cache attributes. */ - }, - { 0, 0, 0, 0, 0 } + DEVMAP_ENTRY( + APBH_BASE, /* Virtual address. */ + APBH_BASE, /* Physical address. */ + APBH_SIZE + APBX_SIZE /* APBX located after APBH. */ + ), + DEVMAP_ENTRY_END }; -#undef _A -#undef _S static struct plcom_instance imx23_pi = { .pi_type = PLCOM_TYPE_PL011, Index: src/sys/arch/evbarm/imx31/imx31lk_machdep.c diff -u src/sys/arch/evbarm/imx31/imx31lk_machdep.c:1.29 src/sys/arch/evbarm/imx31/imx31lk_machdep.c:1.30 --- src/sys/arch/evbarm/imx31/imx31lk_machdep.c:1.29 Tue Aug 17 22:00:28 2021 +++ src/sys/arch/evbarm/imx31/imx31lk_machdep.c Thu Apr 20 08:28:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: imx31lk_machdep.c,v 1.29 2021/08/17 22:00:28 andvar Exp $ */ +/* $NetBSD: imx31lk_machdep.c,v 1.30 2023/04/20 08:28:04 skrll Exp $ */ /* * Startup routines for the ZOOM iMX31 LITEKIT. @@ -110,7 +110,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: imx31lk_machdep.c,v 1.29 2021/08/17 22:00:28 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: imx31lk_machdep.c,v 1.30 2023/04/20 08:28:04 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -302,18 +302,13 @@ cpu_reboot(int howto, char *bootstr) * with kernel's page table which we build up in initarm(). */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - static const struct pmap_devmap imx31lk_devmap[] = { - { + DEVMAP_ENTRY( IMX31LITEKIT_UART1_VBASE, - _A(UART1_BASE), - _S(L1_S_SIZE), - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - {0, 0, 0, 0, 0 } + UART1_BASE, + L1_S_SIZE + ), + DEVMAP_ENTRY_END }; #ifndef MEMSTART Index: src/sys/arch/evbarm/integrator/integrator_machdep.c diff -u src/sys/arch/evbarm/integrator/integrator_machdep.c:1.80 src/sys/arch/evbarm/integrator/integrator_machdep.c:1.81 --- src/sys/arch/evbarm/integrator/integrator_machdep.c:1.80 Tue Aug 10 06:47:49 2021 +++ src/sys/arch/evbarm/integrator/integrator_machdep.c Thu Apr 20 08:28:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: integrator_machdep.c,v 1.80 2021/08/10 06:47:49 skrll Exp $ */ +/* $NetBSD: integrator_machdep.c,v 1.81 2023/04/20 08:28:04 skrll Exp $ */ /* * Copyright (c) 2001,2002 ARM Ltd @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: integrator_machdep.c,v 1.80 2021/08/10 06:47:49 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: integrator_machdep.c,v 1.81 2023/04/20 08:28:04 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -264,47 +264,33 @@ cpu_reboot(int howto, char *bootstr) /* Statically mapped devices. */ static const struct pmap_devmap integrator_devmap[] = { #if NPLCOM > 0 && defined(PLCONSOLE) - { + DEVMAP_ENTRY( UART0_BOOT_BASE, IFPGA_IO_BASE + IFPGA_UART0, - 1024 * 1024, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE - }, + 1024 * 1024 + ), - { + DEVMAP_ENTRY( UART1_BOOT_BASE, IFPGA_IO_BASE + IFPGA_UART1, - 1024 * 1024, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE - }, + 1024 * 1024 + ), #endif #if NPCI > 0 - { + DEVMAP_ENTRY( IFPGA_PCI_IO_VBASE, IFPGA_PCI_IO_BASE, - IFPGA_PCI_IO_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE - }, + IFPGA_PCI_IO_VSIZE + ), - { + DEVMAP_ENTRY( IFPGA_PCI_CONF_VBASE, IFPGA_PCI_CONF_BASE, - IFPGA_PCI_CONF_VSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE - }, + IFPGA_PCI_CONF_VSIZE + ), #endif - { - 0, - 0, - 0, - 0, - 0 - } + DEVMAP_ENTRY_END }; /* Index: src/sys/arch/evbarm/iq80310/iq80310_machdep.c diff -u src/sys/arch/evbarm/iq80310/iq80310_machdep.c:1.94 src/sys/arch/evbarm/iq80310/iq80310_machdep.c:1.95 --- src/sys/arch/evbarm/iq80310/iq80310_machdep.c:1.94 Tue Aug 17 22:00:28 2021 +++ src/sys/arch/evbarm/iq80310/iq80310_machdep.c Thu Apr 20 08:28:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: iq80310_machdep.c,v 1.94 2021/08/17 22:00:28 andvar Exp $ */ +/* $NetBSD: iq80310_machdep.c,v 1.95 2023/04/20 08:28:04 skrll Exp $ */ /* * Copyright (c) 2001, 2002, 2003 Wasabi Systems, Inc. @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: iq80310_machdep.c,v 1.94 2021/08/17 22:00:28 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: iq80310_machdep.c,v 1.95 2023/04/20 08:28:04 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -263,42 +263,28 @@ static const struct pmap_devmap iq80310_ * Map the on-board devices VA == PA so that we can access them * with the MMU on or off. */ - { + DEVMAP_ENTRY( IQ80310_OBIO_BASE, IQ80310_OBIO_BASE, - IQ80310_OBIO_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + IQ80310_OBIO_SIZE + ), + DEVMAP_ENTRY( IQ80310_PIOW_VBASE, I80312_PCI_XLATE_PIOW_BASE, - I80312_PCI_XLATE_IOSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + I80312_PCI_XLATE_IOSIZE + ), + DEVMAP_ENTRY( IQ80310_SIOW_VBASE, I80312_PCI_XLATE_SIOW_BASE, - I80312_PCI_XLATE_IOSIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { + I80312_PCI_XLATE_IOSIZE + ), + DEVMAP_ENTRY( IQ80310_80312_VBASE, I80312_PMMR_BASE, - I80312_PMMR_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - - { - 0, - 0, - 0, - 0, - 0, - } + I80312_PMMR_SIZE + ), + + DEVMAP_ENTRY_END }; /* Index: src/sys/arch/evbarm/iq80321/iq80321_machdep.c diff -u src/sys/arch/evbarm/iq80321/iq80321_machdep.c:1.64 src/sys/arch/evbarm/iq80321/iq80321_machdep.c:1.65 --- src/sys/arch/evbarm/iq80321/iq80321_machdep.c:1.64 Tue Aug 17 22:00:28 2021 +++ src/sys/arch/evbarm/iq80321/iq80321_machdep.c Thu Apr 20 08:28:04 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: iq80321_machdep.c,v 1.64 2021/08/17 22:00:28 andvar Exp $ */ +/* $NetBSD: iq80321_machdep.c,v 1.65 2023/04/20 08:28:04 skrll Exp $ */ /* * Copyright (c) 2001, 2002, 2003 Wasabi Systems, Inc. @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: iq80321_machdep.c,v 1.64 2021/08/17 22:00:28 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: iq80321_machdep.c,v 1.65 2023/04/20 08:28:04 skrll Exp $"); #include "opt_console.h" #include "opt_ddb.h" @@ -303,41 +303,29 @@ cpu_reboot(int howto, char *bootstr) /* Static device mappings. */ static const struct pmap_devmap iq80321_devmap[] = { - /* - * Map the on-board devices VA == PA so that we can access them - * with the MMU on or off. - */ - { - IQ80321_OBIO_BASE, - IQ80321_OBIO_BASE, - IQ80321_OBIO_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - - { - IQ80321_IOW_VBASE, - VERDE_OUT_XLATE_IO_WIN0_BASE, - VERDE_OUT_XLATE_IO_WIN_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - - { - IQ80321_80321_VBASE, - VERDE_PMMR_BASE, - VERDE_PMMR_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - - { - 0, - 0, - 0, - 0, - 0, - } + /* + * Map the on-board devices VA == PA so that we can access them + * with the MMU on or off. + */ + DEVMAP_ENTRY( + IQ80321_OBIO_BASE, + IQ80321_OBIO_BASE, + IQ80321_OBIO_SIZE + ), + + DEVMAP_ENTRY( + IQ80321_IOW_VBASE, + VERDE_OUT_XLATE_IO_WIN0_BASE, + VERDE_OUT_XLATE_IO_WIN_SIZE + ), + + DEVMAP_ENTRY( + IQ80321_80321_VBASE, + VERDE_PMMR_BASE, + VERDE_PMMR_SIZE + ), + + DEVMAP_ENTRY_END }; static void Index: src/sys/arch/evbarm/ixm1200/ixm1200_machdep.c diff -u src/sys/arch/evbarm/ixm1200/ixm1200_machdep.c:1.66 src/sys/arch/evbarm/ixm1200/ixm1200_machdep.c:1.67 --- src/sys/arch/evbarm/ixm1200/ixm1200_machdep.c:1.66 Tue Aug 17 22:00:28 2021 +++ src/sys/arch/evbarm/ixm1200/ixm1200_machdep.c Thu Apr 20 08:28:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: ixm1200_machdep.c,v 1.66 2021/08/17 22:00:28 andvar Exp $ */ +/* $NetBSD: ixm1200_machdep.c,v 1.67 2023/04/20 08:28:05 skrll Exp $ */ /* * Copyright (c) 2002, 2003 @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ixm1200_machdep.c,v 1.66 2021/08/17 22:00:28 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ixm1200_machdep.c,v 1.67 2023/04/20 08:28:05 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -263,48 +263,32 @@ cpu_reboot(int howto, char *bootstr) /* Static device mappings. */ static const struct pmap_devmap ixm1200_devmap[] = { /* StrongARM System and Peripheral Registers */ - { + DEVMAP_ENTRY( IXP12X0_SYS_VBASE, IXP12X0_SYS_HWBASE, - IXP12X0_SYS_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IXP12X0_SYS_SIZE + ), /* PCI Registers Accessible Through StrongARM Core */ - { + DEVMAP_ENTRY( IXP12X0_PCI_VBASE, IXP12X0_PCI_HWBASE, - IXP12X0_PCI_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IXP12X0_PCI_SIZE + ), /* PCI Registers Accessible Through I/O Cycle Access */ - { + DEVMAP_ENTRY( IXP12X0_PCI_IO_VBASE, IXP12X0_PCI_IO_HWBASE, - IXP12X0_PCI_IO_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IXP12X0_PCI_IO_SIZE + ), /* PCI Type0 Configuration Space */ - { + DEVMAP_ENTRY( IXP12X0_PCI_TYPE0_VBASE, IXP12X0_PCI_TYPE0_HWBASE, - IXP12X0_PCI_TYPE0_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IXP12X0_PCI_TYPE0_SIZE + ), /* PCI Type1 Configuration Space */ - { + DEVMAP_ENTRY( IXP12X0_PCI_TYPE1_VBASE, IXP12X0_PCI_TYPE1_HWBASE, - IXP12X0_PCI_TYPE1_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { - 0, - 0, - 0, - 0, - 0 - }, + IXP12X0_PCI_TYPE1_SIZE + ), + DEVMAP_ENTRY_END }; /* Index: src/sys/arch/evbarm/kobo/kobo_machdep.c diff -u src/sys/arch/evbarm/kobo/kobo_machdep.c:1.8 src/sys/arch/evbarm/kobo/kobo_machdep.c:1.9 --- src/sys/arch/evbarm/kobo/kobo_machdep.c:1.8 Wed Jul 24 12:33:18 2019 +++ src/sys/arch/evbarm/kobo/kobo_machdep.c Thu Apr 20 08:28:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: kobo_machdep.c,v 1.8 2019/07/24 12:33:18 hkenken Exp $ */ +/* $NetBSD: kobo_machdep.c,v 1.9 2023/04/20 08:28:05 skrll Exp $ */ /* * Copyright (c) 2002, 2003, 2005, 2010 Genetec Corporation. @@ -102,7 +102,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kobo_machdep.c,v 1.8 2019/07/24 12:33:18 hkenken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kobo_machdep.c,v 1.9 2023/04/20 08:28:05 skrll Exp $"); #include "opt_evbarm_boardtype.h" #include "opt_arm_debug.h" @@ -193,24 +193,16 @@ int comcnmode = CONMODE; * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - const struct pmap_devmap kobo_devmap[] = { - { + DEVMAP_ENTRY( /* for UART2, IOMUXC */ - .pd_va = _A(KOBO_IO_VBASE0), - .pd_pa = _A(KOBO_IO_PBASE0), - .pd_size = _S(L1_S_SIZE * 4), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, - {0} + KOBO_IO_VBASE0, + KOBO_IO_PBASE0, + L1_S_SIZE * 4 + ), + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - #ifndef MEMSTART #define MEMSTART 0x70000000 #endif Index: src/sys/arch/evbarm/lubbock/lubbock_machdep.c diff -u src/sys/arch/evbarm/lubbock/lubbock_machdep.c:1.42 src/sys/arch/evbarm/lubbock/lubbock_machdep.c:1.43 --- src/sys/arch/evbarm/lubbock/lubbock_machdep.c:1.42 Tue Aug 17 22:00:29 2021 +++ src/sys/arch/evbarm/lubbock/lubbock_machdep.c Thu Apr 20 08:28:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: lubbock_machdep.c,v 1.42 2021/08/17 22:00:29 andvar Exp $ */ +/* $NetBSD: lubbock_machdep.c,v 1.43 2023/04/20 08:28:05 skrll Exp $ */ /* * Copyright (c) 2002, 2003, 2005 Genetec Corporation. All rights reserved. @@ -112,7 +112,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lubbock_machdep.c,v 1.42 2021/08/17 22:00:29 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lubbock_machdep.c,v 1.43 2023/04/20 08:28:05 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -347,53 +347,41 @@ read_ttb(void) * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - static const struct pmap_devmap lubbock_devmap[] = { - { + DEVMAP_ENTRY{ LUBBOCK_OBIO_VBASE, - _A(LUBBOCK_OBIO_PBASE), - _S(LUBBOCK_OBIO_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, + LUBBOCK_OBIO_PBASE, + LUBBOCK_OBIO_SIZE }, - { + DEVMAP_ENTRY{ LUBBOCK_GPIO_VBASE, - _A(PXA2X0_GPIO_BASE), - _S(PXA250_GPIO_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, + PXA2X0_GPIO_BASE, + PXA250_GPIO_SIZE }, - { + DEVMAP_ENTRY{ LUBBOCK_CLKMAN_VBASE, - _A(PXA2X0_CLKMAN_BASE), - _S(PXA2X0_CLKMAN_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, + PXA2X0_CLKMAN_BASE, + PXA2X0_CLKMAN_SIZE }, - { + DEVMAP_ENTRY{ LUBBOCK_INTCTL_VBASE, - _A(PXA2X0_INTCTL_BASE), - _S(PXA2X0_INTCTL_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, + PXA2X0_INTCTL_BASE, + PXA2X0_INTCTL_SIZE }, - { + DEVMAP_ENTRY{ LUBBOCK_FFUART_VBASE, - _A(PXA2X0_FFUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, + PXA2X0_FFUART_BASE, + 4 * COM_NPORTS }, - { + DEVMAP_ENTRY{ LUBBOCK_BTUART_VBASE, - _A(PXA2X0_BTUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, + PXA2X0_BTUART_BASE, + 4 * COM_NPORTS }, - {0, 0, 0, 0,} + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - /* * vaddr_t initarm(...) * Index: src/sys/arch/evbarm/marvell/marvell_machdep.c diff -u src/sys/arch/evbarm/marvell/marvell_machdep.c:1.37 src/sys/arch/evbarm/marvell/marvell_machdep.c:1.38 --- src/sys/arch/evbarm/marvell/marvell_machdep.c:1.37 Mon Aug 30 00:04:30 2021 +++ src/sys/arch/evbarm/marvell/marvell_machdep.c Thu Apr 20 08:28:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: marvell_machdep.c,v 1.37 2021/08/30 00:04:30 rin Exp $ */ +/* $NetBSD: marvell_machdep.c,v 1.38 2023/04/20 08:28:05 skrll Exp $ */ /* * Copyright (c) 2007, 2008, 2010 KIYOHARA Takashi * All rights reserved. @@ -25,7 +25,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: marvell_machdep.c,v 1.37 2021/08/30 00:04:30 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: marvell_machdep.c,v 1.38 2023/04/20 08:28:05 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -257,19 +257,14 @@ read_ttb(void) * registers segment-aligned and segment-rounded in order to avoid * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) static struct pmap_devmap marvell_devmap[] = { - { + DEVMAP_ENTRY( MARVELL_INTERREGS_VBASE, - _A(MARVELL_INTERREGS_PBASE), - _S(MVSOC_INTERREGS_SIZE), - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - - { 0, 0, 0, 0, 0 } + MARVELL_INTERREGS_PBASE, + MVSOC_INTERREGS_SIZE + ), + DEVMAP_ENTRY_END }; extern uint32_t *u_boot_args[]; Index: src/sys/arch/evbarm/mini2440/mini2440_machdep.c diff -u src/sys/arch/evbarm/mini2440/mini2440_machdep.c:1.19 src/sys/arch/evbarm/mini2440/mini2440_machdep.c:1.20 --- src/sys/arch/evbarm/mini2440/mini2440_machdep.c:1.19 Tue Aug 17 22:00:29 2021 +++ src/sys/arch/evbarm/mini2440/mini2440_machdep.c Thu Apr 20 08:28:05 2023 @@ -131,7 +131,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mini2440_machdep.c,v 1.19 2021/08/17 22:00:29 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mini2440_machdep.c,v 1.20 2023/04/20 08:28:05 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -362,9 +362,6 @@ cpu_reboot(int howto, char *bootstr) * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - #define _V(n) (MINI2440_IO_VBASE + (n) * L1_S_SIZE) #define GPIO_VBASE _V(0) @@ -374,37 +371,30 @@ cpu_reboot(int howto, char *bootstr) static const struct pmap_devmap mini2440_devmap[] = { /* GPIO registers */ - { + DEVMAP_ENTRY{ GPIO_VBASE, - _A(S3C2440_GPIO_BASE), - _S(S3C2440_GPIO_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + S3C2440_GPIO_BASE, + S3C2440_GPIO_SIZE + ), + DEVMAP_ENTRY({ INTCTL_VBASE, - _A(S3C2440_INTCTL_BASE), - _S(S3C2440_INTCTL_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + S3C2440_INTCTL_BASE, + S3C2440_INTCTL_SIZE + ), + DEVMAP_ENTRY({ CLKMAN_VBASE, - _A(S3C2440_CLKMAN_BASE), - _S(S3C24X0_CLKMAN_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { /* UART registers for UART0, 1, 2. */ + S3C2440_CLKMAN_BASE), + S3C24X0_CLKMAN_SIZE + ), + /* UART registers for UART0, 1, 2. */ + DEVMAP_ENTRY({ UART_VBASE, - _A(S3C2440_UART0_BASE), - _S(S3C2440_UART_BASE(3) - S3C2440_UART0_BASE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - - { 0, 0, 0, 0 } + S3C2440_UART0_BASE), + S3C2440_UART_BASE(3) - S3C2440_UART0_BASE + ), + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - static inline pd_entry_t * read_ttb(void) { Index: src/sys/arch/evbarm/netwalker/netwalker_machdep.c diff -u src/sys/arch/evbarm/netwalker/netwalker_machdep.c:1.26 src/sys/arch/evbarm/netwalker/netwalker_machdep.c:1.27 --- src/sys/arch/evbarm/netwalker/netwalker_machdep.c:1.26 Wed Jul 24 12:33:18 2019 +++ src/sys/arch/evbarm/netwalker/netwalker_machdep.c Thu Apr 20 08:28:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: netwalker_machdep.c,v 1.26 2019/07/24 12:33:18 hkenken Exp $ */ +/* $NetBSD: netwalker_machdep.c,v 1.27 2023/04/20 08:28:05 skrll Exp $ */ /* * Copyright (c) 2002, 2003, 2005, 2010 Genetec Corporation. @@ -102,7 +102,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netwalker_machdep.c,v 1.26 2019/07/24 12:33:18 hkenken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netwalker_machdep.c,v 1.27 2023/04/20 08:28:05 skrll Exp $"); #include "opt_evbarm_boardtype.h" #include "opt_arm_debug.h" @@ -207,24 +207,16 @@ int comcnmode = CONMODE; * with kernel's page table which we build up in initarm(). */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - static const struct pmap_devmap netwalker_devmap[] = { - { + DEVMAP_ENTRY( /* for UART1, IOMUXC */ - .pd_va = _A(NETWALKER_IO_VBASE0), - .pd_pa = _A(NETWALKER_IO_PBASE0), - .pd_size = _S(L1_S_SIZE * 4), - .pd_prot = VM_PROT_READ|VM_PROT_WRITE, - .pd_cache = PTE_NOCACHE - }, - {0} + NETWALKER_IO_VBASE0, + NETWALKER_IO_PBASE0, + L1_S_SIZE * 4 + ), + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - #ifndef MEMSTART #define MEMSTART 0x90000000 #endif Index: src/sys/arch/evbarm/nslu2/nslu2_machdep.c diff -u src/sys/arch/evbarm/nslu2/nslu2_machdep.c:1.35 src/sys/arch/evbarm/nslu2/nslu2_machdep.c:1.36 --- src/sys/arch/evbarm/nslu2/nslu2_machdep.c:1.35 Tue Aug 17 22:00:29 2021 +++ src/sys/arch/evbarm/nslu2/nslu2_machdep.c Thu Apr 20 08:28:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: nslu2_machdep.c,v 1.35 2021/08/17 22:00:29 andvar Exp $ */ +/* $NetBSD: nslu2_machdep.c,v 1.36 2023/04/20 08:28:05 skrll Exp $ */ /*- * Copyright (c) 2006 The NetBSD Foundation, Inc. @@ -94,7 +94,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nslu2_machdep.c,v 1.35 2021/08/17 22:00:29 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nslu2_machdep.c,v 1.36 2023/04/20 08:28:05 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -345,66 +345,48 @@ cpu_reboot(int howto, char *bootstr) /* Static device mappings. */ static const struct pmap_devmap nslu2_devmap[] = { /* Physical/Virtual address for I/O space */ - { + DEVMAP_ENTRY( IXP425_IO_VBASE, IXP425_IO_HWBASE, - IXP425_IO_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IXP425_IO_SIZE + ), /* Expansion Bus */ - { + DEVMAP_ENTRY( IXP425_EXP_VBASE, IXP425_EXP_HWBASE, - IXP425_EXP_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IXP425_EXP_SIZE + ), /* IXP425 PCI Configuration */ - { + DEVMAP_ENTRY( IXP425_PCI_VBASE, IXP425_PCI_HWBASE, - IXP425_PCI_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IXP425_PCI_SIZE + ), /* SDRAM Controller */ - { + DEVMAP_ENTRY( IXP425_MCU_VBASE, IXP425_MCU_HWBASE, - IXP425_MCU_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IXP425_MCU_SIZE + ), /* PCI Memory Space */ - { + DEVMAP_ENTRY( IXP425_PCI_MEM_VBASE, IXP425_PCI_MEM_HWBASE, - IXP425_PCI_MEM_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IXP425_PCI_MEM_SIZE + ), /* Flash memory */ - { + DEVMAP_ENTRY( NSLU2_FLASH_VBASE, NSLU2_FLASH_HWBASE, - NSLU2_FLASH_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + NSLU2_FLASH_SIZE + ), - { - 0, - 0, - 0, - 0, - 0, - } + DEVMAP_ENTRY_END }; /* Index: src/sys/arch/evbarm/smdk2xx0/smdk2410_machdep.c diff -u src/sys/arch/evbarm/smdk2xx0/smdk2410_machdep.c:1.45 src/sys/arch/evbarm/smdk2xx0/smdk2410_machdep.c:1.46 --- src/sys/arch/evbarm/smdk2xx0/smdk2410_machdep.c:1.45 Tue Aug 17 22:00:29 2021 +++ src/sys/arch/evbarm/smdk2xx0/smdk2410_machdep.c Thu Apr 20 08:28:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: smdk2410_machdep.c,v 1.45 2021/08/17 22:00:29 andvar Exp $ */ +/* $NetBSD: smdk2410_machdep.c,v 1.46 2023/04/20 08:28:05 skrll Exp $ */ /* * Copyright (c) 2002, 2003 Fujitsu Component Limited @@ -105,7 +105,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: smdk2410_machdep.c,v 1.45 2021/08/17 22:00:29 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: smdk2410_machdep.c,v 1.46 2023/04/20 08:28:05 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -328,9 +328,6 @@ cpu_reboot(int howto, char *bootstr) * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - #define _V(n) (SMDK2410_IO_VBASE + (n) * L1_S_SIZE) #define GPIO_VBASE _V(0) @@ -343,37 +340,31 @@ cpu_reboot(int howto, char *bootstr) static const struct pmap_devmap smdk2410_devmap[] = { /* GPIO registers */ - { + DEVMAP_ENTRY( GPIO_VBASE, - _A(S3C2410_GPIO_BASE), - _S(S3C2410_GPIO_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + S3C2410_GPIO_BASE, + S3C2410_GPIO_SIZE + ), + DEVMAP_ENTRY( INTCTL_VBASE, - _A(S3C2410_INTCTL_BASE), - _S(S3C2410_INTCTL_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + S3C2410_INTCTL_BASE, + S3C2410_INTCTL_SIZE + ), + DEVMAP_ENTRY( CLKMAN_VBASE, - _A(S3C2410_CLKMAN_BASE), - _S(S3C24X0_CLKMAN_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { /* UART registers for UART0, 1, 2. */ + S3C2410_CLKMAN_BASE, + S3C24X0_CLKMAN_SIZE + ), + /* UART registers for UART0, 1, 2. */ + DEVMAP_ENTRY( UART_VBASE, - _A(S3C2410_UART0_BASE), - _S(S3C2410_UART_BASE(3) - S3C2410_UART0_BASE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, + S3C2410_UART0_BASE, + S3C2410_UART_BASE(3) - S3C2410_UART0_BASE + ), - { 0, 0, 0, 0 } + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - static inline pd_entry_t * read_ttb(void) { Index: src/sys/arch/evbarm/smdk2xx0/smdk2800_machdep.c diff -u src/sys/arch/evbarm/smdk2xx0/smdk2800_machdep.c:1.50 src/sys/arch/evbarm/smdk2xx0/smdk2800_machdep.c:1.51 --- src/sys/arch/evbarm/smdk2xx0/smdk2800_machdep.c:1.50 Tue Aug 17 22:00:29 2021 +++ src/sys/arch/evbarm/smdk2xx0/smdk2800_machdep.c Thu Apr 20 08:28:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: smdk2800_machdep.c,v 1.50 2021/08/17 22:00:29 andvar Exp $ */ +/* $NetBSD: smdk2800_machdep.c,v 1.51 2023/04/20 08:28:05 skrll Exp $ */ /* * Copyright (c) 2002, 2003, 2005 Fujitsu Component Limited @@ -106,7 +106,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: smdk2800_machdep.c,v 1.50 2021/08/17 22:00:29 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: smdk2800_machdep.c,v 1.51 2023/04/20 08:28:05 skrll Exp $"); #include "opt_ddb.h" #include "opt_console.h" @@ -312,13 +312,12 @@ cpu_reboot(int howto, char *bootstr) * at the same position. */ static const struct pmap_devmap smdk2800_devmap[] = { - { + DEVMAP_ENTRY( SMDK2800_IO_AREA_VBASE, S3C2800_PERIPHERALS, - S3C2800_PERIPHERALS_SIZE, - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { 0, 0, 0, 0 } + S3C2800_PERIPHERALS_SIZE + ), + DEVMAP_ENTRY_END }; #define ioreg_vaddr(pa) ((pa) - S3C2800_PERIPHERALS + SMDK2800_IO_AREA_VBASE) Index: src/sys/arch/evbarm/tsarm/tsarm_machdep.c diff -u src/sys/arch/evbarm/tsarm/tsarm_machdep.c:1.34 src/sys/arch/evbarm/tsarm/tsarm_machdep.c:1.35 --- src/sys/arch/evbarm/tsarm/tsarm_machdep.c:1.34 Sun Jul 3 19:58:42 2022 +++ src/sys/arch/evbarm/tsarm/tsarm_machdep.c Thu Apr 20 08:28:05 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: tsarm_machdep.c,v 1.34 2022/07/03 19:58:42 andvar Exp $ */ +/* $NetBSD: tsarm_machdep.c,v 1.35 2023/04/20 08:28:05 skrll Exp $ */ /* * Copyright (c) 2001, 2002, 2003 Wasabi Systems, Inc. @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tsarm_machdep.c,v 1.34 2022/07/03 19:58:42 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tsarm_machdep.c,v 1.35 2023/04/20 08:28:05 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_console.h" @@ -306,50 +306,36 @@ cpu_reboot(int howto, char *bootstr) /* Static device mappings. */ static const struct pmap_devmap tsarm_devmap[] = { - { + DEVMAP_ENTRY( EP93XX_AHB_VBASE, EP93XX_AHB_HWBASE, - EP93XX_AHB_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + EP93XX_AHB_SIZE + ), - { + DEVMAP_ENTRY( EP93XX_APB_VBASE, EP93XX_APB_HWBASE, - EP93XX_APB_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + EP93XX_APB_SIZE + ), /* * IO8 and IO16 space *must* be mapped contiguously with * IO8_VA == IO16_VA - 64 Mbytes. ISA busmap driver depends * on that! */ - { + DEVMAP_ENTRY( TS7XXX_IO8_VBASE, TS7XXX_IO8_HWBASE, - TS7XXX_IO8_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + TS7XXX_IO8_SIZE + ), - { + DEVMAP_ENTRY( TS7XXX_IO16_VBASE, TS7XXX_IO16_HWBASE, - TS7XXX_IO16_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - - { - 0, - 0, - 0, - 0, - 0, - } + TS7XXX_IO16_SIZE + ), + + DEVMAP_ENTRY_END }; /* Index: src/sys/arch/hpcarm/hpcarm/netbookpro_machdep.c diff -u src/sys/arch/hpcarm/hpcarm/netbookpro_machdep.c:1.1 src/sys/arch/hpcarm/hpcarm/netbookpro_machdep.c:1.2 --- src/sys/arch/hpcarm/hpcarm/netbookpro_machdep.c:1.1 Sat Aug 6 03:53:40 2011 +++ src/sys/arch/hpcarm/hpcarm/netbookpro_machdep.c Thu Apr 20 08:28:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: netbookpro_machdep.c,v 1.1 2011/08/06 03:53:40 kiyohara Exp $ */ +/* $NetBSD: netbookpro_machdep.c,v 1.2 2023/04/20 08:28:06 skrll Exp $ */ /* * Copyright (c) 2011 KIYOHARA Takashi * All rights reserved. @@ -25,7 +25,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbookpro_machdep.c,v 1.1 2011/08/06 03:53:40 kiyohara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbookpro_machdep.c,v 1.2 2023/04/20 08:28:06 skrll Exp $"); #include <sys/systm.h> #include <sys/device.h> @@ -64,16 +64,14 @@ static int __unused enable_console(void static void disable_consoles(void); static void cn_nonprobe(struct consdev *); -#define _A(a) ((a) & L1_S_FRAME) -#define _S(s) (((s) + L1_S_SIZE - 1) & L1_S_FRAME) const struct pmap_devmap machdep_devmap[] = { - { /* Framebuffer */ + /* Framebuffer */ + DEVMAP_ENTRY( 0x14000000, - _A(0x14000000), - _S(0x00400000), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, + 0x14000000, + 0x00400000 }, - { 0, 0, 0, 0, 0, } + DEVMAP_ENTRY_END }; static struct pxa2x0_gpioconf netbookpro_boarddep_gpioconf[] = { Index: src/sys/arch/hpcarm/hpcarm/pxa2x0_hpc_machdep.c diff -u src/sys/arch/hpcarm/hpcarm/pxa2x0_hpc_machdep.c:1.30 src/sys/arch/hpcarm/hpcarm/pxa2x0_hpc_machdep.c:1.31 --- src/sys/arch/hpcarm/hpcarm/pxa2x0_hpc_machdep.c:1.30 Tue Aug 17 22:00:29 2021 +++ src/sys/arch/hpcarm/hpcarm/pxa2x0_hpc_machdep.c Thu Apr 20 08:28:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pxa2x0_hpc_machdep.c,v 1.30 2021/08/17 22:00:29 andvar Exp $ */ +/* $NetBSD: pxa2x0_hpc_machdep.c,v 1.31 2023/04/20 08:28:06 skrll Exp $ */ /* * Copyright (c) 1994-1998 Mark Brinicombe. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pxa2x0_hpc_machdep.c,v 1.30 2021/08/17 22:00:29 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pxa2x0_hpc_machdep.c,v 1.31 2023/04/20 08:28:06 skrll Exp $"); #include "opt_ddb.h" #include "opt_dram_pages.h" @@ -163,56 +163,45 @@ static void fakecninit(void); #define PXA2X0_BTUART_VBASE 0xfd500000 #define PXA2X0_STUART_VBASE 0xfd600000 -#define _A(a) ((a) & L1_S_FRAME) -#define _S(s) (((s) + L1_S_SIZE - 1) & L1_S_FRAME) const struct pmap_devmap pxa2x0_devmap[] = { - { + DEVMAP_ENTRY( PXA2X0_GPIO_VBASE, - _A(PXA2X0_GPIO_BASE), - _S(PXA2X0_GPIO_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_GPIO_BASE, + PXA2X0_GPIO_SIZE + ), + DEVMAP_ENTRY( PXA2X0_CLKMAN_VBASE, - _A(PXA2X0_CLKMAN_BASE), - _S(PXA2X0_CLKMAN_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_CLKMAN_BASE, + PXA2X0_CLKMAN_SIZE + ), + DEVMAP_ENTRY( PXA2X0_INTCTL_VBASE, - _A(PXA2X0_INTCTL_BASE), - _S(PXA2X0_INTCTL_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_INTCTL_BASE, + PXA2X0_INTCTL_SIZE + ), + DEVMAP_ENTRY( PXA2X0_MEMCTL_VBASE, - _A(PXA2X0_MEMCTL_BASE), - _S(PXA2X0_MEMCTL_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_MEMCTL_BASE, + PXA2X0_MEMCTL_SIZE + ), + DEVMAP_ENTRY( PXA2X0_FFUART_VBASE, - _A(PXA2X0_FFUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_FFUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( PXA2X0_BTUART_VBASE, - _A(PXA2X0_BTUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_BTUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( PXA2X0_STUART_VBASE, - _A(PXA2X0_STUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, + PXA2X0_STUART_BASE, + 4 * COM_NPORTS + ), - { 0, 0, 0, 0, 0, } + DEVMAP_ENTRY_END }; -#undef _A -#undef _S extern const struct pmap_devmap machdep_devmap[]; Index: src/sys/arch/hpcarm/hpcarm/sa11x0_hpc_machdep.c diff -u src/sys/arch/hpcarm/hpcarm/sa11x0_hpc_machdep.c:1.21 src/sys/arch/hpcarm/hpcarm/sa11x0_hpc_machdep.c:1.22 --- src/sys/arch/hpcarm/hpcarm/sa11x0_hpc_machdep.c:1.21 Mon Oct 11 14:36:05 2021 +++ src/sys/arch/hpcarm/hpcarm/sa11x0_hpc_machdep.c Thu Apr 20 08:28:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: sa11x0_hpc_machdep.c,v 1.21 2021/10/11 14:36:05 rin Exp $ */ +/* $NetBSD: sa11x0_hpc_machdep.c,v 1.22 2023/04/20 08:28:06 skrll Exp $ */ /* * Copyright (c) 1994-1998 Mark Brinicombe. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sa11x0_hpc_machdep.c,v 1.21 2021/10/11 14:36:05 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sa11x0_hpc_machdep.c,v 1.22 2023/04/20 08:28:06 skrll Exp $"); #include "opt_ddb.h" #include "opt_dram_pages.h" @@ -158,13 +158,12 @@ extern void *__sleep_ctx; */ static const struct pmap_devmap sa11x0_devmap[] = { /* Physical/virtual address for UART #3. */ - { + DEVMAP_ENTRY( SACOM3_VBASE, SACOM3_BASE, - 0x24, - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE - }, - { 0, 0, 0, 0, 0 } + 0x24 + ), + DEVMAP_ENTRY_END }; /* Index: src/sys/arch/iyonix/iyonix/iyonix_machdep.c diff -u src/sys/arch/iyonix/iyonix/iyonix_machdep.c:1.31 src/sys/arch/iyonix/iyonix/iyonix_machdep.c:1.32 --- src/sys/arch/iyonix/iyonix/iyonix_machdep.c:1.31 Sun Jan 2 16:42:10 2022 +++ src/sys/arch/iyonix/iyonix/iyonix_machdep.c Thu Apr 20 08:28:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: iyonix_machdep.c,v 1.31 2022/01/02 16:42:10 christos Exp $ */ +/* $NetBSD: iyonix_machdep.c,v 1.32 2023/04/20 08:28:06 skrll Exp $ */ /* * Copyright (c) 2001, 2002, 2003 Wasabi Systems, Inc. @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: iyonix_machdep.c,v 1.31 2022/01/02 16:42:10 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: iyonix_machdep.c,v 1.32 2023/04/20 08:28:06 skrll Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -317,45 +317,31 @@ static const struct pmap_devmap iyonix_d * Map the on-board devices VA == PA so that we can access them * with the MMU on or off. */ - { + DEVMAP_ENTRY( IYONIX_OBIO_BASE, IYONIX_OBIO_BASE, - IYONIX_OBIO_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + IYONIX_OBIO_SIZE + ), - { + DEVMAP_ENTRY( IYONIX_IOW_VBASE, VERDE_OUT_XLATE_IO_WIN0_BASE, - VERDE_OUT_XLATE_IO_WIN_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + VERDE_OUT_XLATE_IO_WIN_SIZE + ), - { + DEVMAP_ENTRY( IYONIX_80321_VBASE, VERDE_PMMR_BASE, - VERDE_PMMR_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, + VERDE_PMMR_SIZE + ), - { + DEVMAP_ENTRY( IYONIX_FLASH_BASE, IYONIX_FLASH_BASE, - IYONIX_FLASH_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - - { - 0, - 0, - 0, - 0, - 0, - } + IYONIX_FLASH_SIZE + ), + + DEVMAP_ENTRY_END }; /* Read out the Machine ID from the flash, and stash it away for later use. */ Index: src/sys/arch/zaurus/zaurus/machdep.c diff -u src/sys/arch/zaurus/zaurus/machdep.c:1.50 src/sys/arch/zaurus/zaurus/machdep.c:1.51 --- src/sys/arch/zaurus/zaurus/machdep.c:1.50 Sun Jul 3 19:58:42 2022 +++ src/sys/arch/zaurus/zaurus/machdep.c Thu Apr 20 08:28:06 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.50 2022/07/03 19:58:42 andvar Exp $ */ +/* $NetBSD: machdep.c,v 1.51 2023/04/20 08:28:06 skrll Exp $ */ /* $OpenBSD: zaurus_machdep.c,v 1.25 2006/06/20 18:24:04 todd Exp $ */ /* @@ -107,7 +107,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.50 2022/07/03 19:58:42 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.51 2023/04/20 08:28:06 skrll Exp $"); #include "opt_ddb.h" #include "opt_kgdb.h" @@ -484,77 +484,61 @@ read_ttb(void) * registers segment-aligned and segment-rounded in order to avoid * using the 2nd page tables. */ -#define _A(a) ((a) & ~L1_S_OFFSET) -#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) - static const struct pmap_devmap zaurus_devmap[] = { - { + DEVMAP_ENTRY( ZAURUS_GPIO_VBASE, - _A(PXA2X0_GPIO_BASE), - _S(PXA2X0_GPIO_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_GPIO_BASE, + PXA2X0_GPIO_SIZE + ), + DEVMAP_ENTRY( ZAURUS_CLKMAN_VBASE, - _A(PXA2X0_CLKMAN_BASE), - _S(PXA2X0_CLKMAN_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_CLKMAN_BASE, + PXA2X0_CLKMAN_SIZE + ), + DEVMAP_ENTRY( ZAURUS_INTCTL_VBASE, - _A(PXA2X0_INTCTL_BASE), - _S(PXA2X0_INTCTL_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_INTCTL_BASE, + PXA2X0_INTCTL_SIZE + ), + DEVMAP_ENTRY( ZAURUS_MEMCTL_VBASE, - _A(PXA2X0_MEMCTL_BASE), - _S(PXA2X0_MEMCTL_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_MEMCTL_BASE, + PXA2X0_MEMCTL_SIZE + ), + DEVMAP_ENTRY( ZAURUS_SCOOP0_VBASE, - _A(C3000_SCOOP0_BASE), - _S(SCOOP_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + C3000_SCOOP0_BASE, + SCOOP_SIZE + ), + DEVMAP_ENTRY( ZAURUS_SCOOP1_VBASE, - _A(C3000_SCOOP1_BASE), - _S(SCOOP_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + C3000_SCOOP1_BASE, + SCOOP_SIZE + ), + DEVMAP_ENTRY( ZAURUS_FFUART_VBASE, - _A(PXA2X0_FFUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_FFUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( ZAURUS_BTUART_VBASE, - _A(PXA2X0_BTUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_BTUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( ZAURUS_STUART_VBASE, - _A(PXA2X0_STUART_BASE), - _S(4 * COM_NPORTS), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, - { + PXA2X0_STUART_BASE, + 4 * COM_NPORTS + ), + DEVMAP_ENTRY( ZAURUS_POWMAN_VBASE, - _A(PXA2X0_POWMAN_BASE), - _S(PXA2X0_POWMAN_SIZE), - VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, - }, + PXA2X0_POWMAN_BASE, + PXA2X0_POWMAN_SIZE + ), - {0, 0, 0, 0, 0,} + DEVMAP_ENTRY_END }; -#undef _A -#undef _S - void green_on(int virt); void green_on(int virt) Added files: Index: src/sys/uvm/pmap/pmap_devmap.c diff -u /dev/null src/sys/uvm/pmap/pmap_devmap.c:1.1 --- /dev/null Thu Apr 20 08:28:06 2023 +++ src/sys/uvm/pmap/pmap_devmap.c Thu Apr 20 08:28:02 2023 @@ -0,0 +1,173 @@ +/* $NetBSD: pmap_devmap.c,v 1.1 2023/04/20 08:28:02 skrll Exp $ */ + +/*- + * Copyright (c) 2022 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Nick Hudson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: pmap_devmap.c,v 1.1 2023/04/20 08:28:02 skrll Exp $"); + + +#include <sys/param.h> +#include <sys/types.h> + +#include <uvm/uvm.h> +#include <uvm/uvm_extern.h> +#include <uvm/pmap/pmap_devmap.h> + + +static const struct pmap_devmap *pd_table; +static vaddr_t pd_root; + +bool pmap_devmap_bootstrap_done = false; + +bool +pmap_devmap_bootstrapped_p(void) +{ + return pmap_devmap_bootstrap_done; +} + + +vaddr_t +pmap_devmap_root(void) +{ + return pd_root; +} + +/* + * Register the devmap table. This is provided in case early console + * initialization needs to register mappings created by bootstrap code + * before pmap_devmap_bootstrap() is called. + */ +void +pmap_devmap_register(const struct pmap_devmap *table) +{ + + pd_table = table; +} + +/* + * Map all of the static regions in the devmap table, and remember + * the devmap table so other parts of the kernel can look up entries + * later. + */ +void +pmap_devmap_bootstrap(vaddr_t root, const struct pmap_devmap *table) +{ + UVMHIST_FUNC(__func__); + UVMHIST_CALLARGS(maphist, "(root=%#jx, table=%p)", root, + (uintptr_t)table, 0, 0); + + bool done = false; + + pd_root = root; + pd_table = table; + + for (size_t i = 0; table[i].pd_size != 0; i++) { + const struct pmap_devmap * const pdp = &table[i]; + const vaddr_t vmax = __type_max_u(vaddr_t); + const vaddr_t pmax = __type_max_u(paddr_t); + + KASSERT(pdp->pd_size != 0); + KASSERTMSG(vmax - pdp->pd_va >= pdp->pd_size - 1, + "va %" PRIxVADDR " sz %" PRIxPSIZE, pdp->pd_va, + pdp->pd_size); + KASSERTMSG(pmax - pdp->pd_pa >= pdp->pd_size - 1, + "pa %" PRIxPADDR " sz %" PRIxPSIZE, pdp->pd_pa, + pdp->pd_size); + UVMHIST_LOG(maphist, + "pa %#jx -> %#jx @ va %#jx -> %#jx", + pdp->pd_pa, pdp->pd_pa + pdp->pd_size - 1, + pdp->pd_va, pdp->pd_va + pdp->pd_size - 1); + + pmap_kenter_range(pdp->pd_va, pdp->pd_pa, pdp->pd_size, + pdp->pd_prot, pdp->pd_flags); + done = true; + } + if (done) + pmap_devmap_bootstrap_done = true; +} + +/* + * Find the table entry that fully covers the physical address + * range [pa, pa + size) + */ +const struct pmap_devmap * +pmap_devmap_find_pa(paddr_t pa, psize_t size) +{ + if (pd_table == NULL) + return NULL; + + for (size_t i = 0; pd_table[i].pd_size != 0; i++) { + const paddr_t pd_pa = pd_table[i].pd_pa; + const psize_t pd_sz = pd_table[i].pd_size; + + if (pa < pd_pa) + continue; + + const psize_t pdiff = pa - pd_pa; + + if (pd_sz < pdiff) + continue; + + if (pd_sz - pdiff >= size) + return &pd_table[i]; + } + + return NULL; +} + +/* + * Find the table entry that fully covers the virtual address + * range [va, va + size) + */ +const struct pmap_devmap * +pmap_devmap_find_va(vaddr_t va, vsize_t size) +{ + if (pd_table == NULL) + return NULL; + + for (size_t i = 0; pd_table[i].pd_size != 0; i++) { + const vaddr_t pd_va = pd_table[i].pd_va; + const vsize_t pd_sz = pd_table[i].pd_size; + + if (va < pd_va) + continue; + + const vsize_t vdiff = va - pd_va; + + if (pd_sz < vdiff) + continue; + + if (pd_sz - vdiff >= size) + return &pd_table[i]; + + } + + return NULL; +} Index: src/sys/uvm/pmap/pmap_devmap.h diff -u /dev/null src/sys/uvm/pmap/pmap_devmap.h:1.1 --- /dev/null Thu Apr 20 08:28:06 2023 +++ src/sys/uvm/pmap/pmap_devmap.h Thu Apr 20 08:28:02 2023 @@ -0,0 +1,66 @@ +/* $NetBSD: pmap_devmap.h,v 1.1 2023/04/20 08:28:02 skrll Exp $ */ + +/*- + * Copyright (c) 2022 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Nick Hudson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + + +#ifndef _UVM_PMAP_DEVMAP_H_ +#define _UVM_PMAP_DEVMAP_H_ + +typedef struct pmap_devmap { + vaddr_t pd_va; /* virtual address */ + paddr_t pd_pa; /* physical address */ + psize_t pd_size; /* size of region */ + vm_prot_t pd_prot; /* protection code */ + u_int pd_flags; /* flags for pmap_kenter_{pa,range} */ +} pmap_devmap_t; + + +bool pmap_devmap_bootstrapped_p(void); +void pmap_devmap_register(const struct pmap_devmap *); +void pmap_devmap_bootstrap(vaddr_t, const struct pmap_devmap *); +vaddr_t pmap_devmap_root(void); +const struct pmap_devmap *pmap_devmap_find_pa(paddr_t, psize_t); +const struct pmap_devmap *pmap_devmap_find_va(vaddr_t, vsize_t); + +#define DEVMAP_ENTRY_FLAGS(va, pa, sz, fl) \ +{ \ + .pd_va = DEVMAP_ALIGN(va), \ + .pd_pa = DEVMAP_ALIGN(pa), \ + .pd_size = DEVMAP_SIZE(sz), \ + .pd_prot = VM_PROT_READ | VM_PROT_WRITE, \ + .pd_flags = (fl), \ +} + +#define DEVMAP_ENTRY(va, pa, sz) \ + DEVMAP_ENTRY_FLAGS(va, pa, sz, DEVMAP_FLAGS) + +#define DEVMAP_ENTRY_END { 0 } + +#endif /* _UVM_PMAP_DEVMAP_H_ */