Module Name: src Committed By: jmcneill Date: Mon Sep 6 14:03:18 UTC 2021
Modified Files: src/sys/arch/arm/apple: apple_dart.c apple_intc.c apple_pcie.c apple_wdog.c src/sys/arch/arm/fdt: pcihost_fdt.c pcihost_fdtvar.h src/sys/arch/arm/rockchip: rk3399_pcie.c src/sys/arch/evbarm/conf: files.fdt src/sys/arch/mips/cavium: mainbus.c src/sys/dev/fdt: fdtbus.c fdtvar.h Added Files: src/sys/arch/evbarm/fdt: fdt_bus_machdep.c Log Message: Instead of requiring drivers to be explicit about their device memory mapping requirements, move this decision into the fdt layer. This introduces a new MD function, fdtbus_bus_tag_create, which is responsible for returning per-node bus_space handles. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/apple/apple_dart.c \ src/sys/arch/arm/apple/apple_pcie.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/apple/apple_intc.c \ src/sys/arch/arm/apple/apple_wdog.c cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/fdt/pcihost_fdt.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/fdt/pcihost_fdtvar.h cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/rockchip/rk3399_pcie.c cvs rdiff -u -r1.8 -r1.9 src/sys/arch/evbarm/conf/files.fdt cvs rdiff -u -r0 -r1.1 src/sys/arch/evbarm/fdt/fdt_bus_machdep.c cvs rdiff -u -r1.9 -r1.10 src/sys/arch/mips/cavium/mainbus.c cvs rdiff -u -r1.42 -r1.43 src/sys/dev/fdt/fdtbus.c cvs rdiff -u -r1.71 -r1.72 src/sys/dev/fdt/fdtvar.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/arm/apple/apple_dart.c diff -u src/sys/arch/arm/apple/apple_dart.c:1.2 src/sys/arch/arm/apple/apple_dart.c:1.3 --- src/sys/arch/arm/apple/apple_dart.c:1.2 Sat Sep 4 12:35:31 2021 +++ src/sys/arch/arm/apple/apple_dart.c Mon Sep 6 14:03:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: apple_dart.c,v 1.2 2021/09/04 12:35:31 jmcneill Exp $ */ +/* $NetBSD: apple_dart.c,v 1.3 2021/09/06 14:03:17 jmcneill Exp $ */ /*- * Copyright (c) 2021 Mark Kettenis <kette...@openbsd.org> @@ -20,7 +20,7 @@ //#define APPLE_DART_DEBUG #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: apple_dart.c,v 1.2 2021/09/04 12:35:31 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: apple_dart.c,v 1.3 2021/09/06 14:03:17 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -482,8 +482,7 @@ apple_dart_attach(device_t parent, devic sc->sc_phandle = phandle; sc->sc_dmat = faa->faa_dmat; sc->sc_bst = faa->faa_bst; - if (bus_space_map(sc->sc_bst, addr, size, - _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, &sc->sc_bsh) != 0) { + if (bus_space_map(sc->sc_bst, addr, size, 0, &sc->sc_bsh) != 0) { aprint_error(": couldn't map registers\n"); return; } Index: src/sys/arch/arm/apple/apple_pcie.c diff -u src/sys/arch/arm/apple/apple_pcie.c:1.2 src/sys/arch/arm/apple/apple_pcie.c:1.3 --- src/sys/arch/arm/apple/apple_pcie.c:1.2 Sat Sep 4 12:35:31 2021 +++ src/sys/arch/arm/apple/apple_pcie.c Mon Sep 6 14:03:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: apple_pcie.c,v 1.2 2021/09/04 12:35:31 jmcneill Exp $ */ +/* $NetBSD: apple_pcie.c,v 1.3 2021/09/06 14:03:17 jmcneill Exp $ */ /*- * Copyright (c) 2021 Jared McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: apple_pcie.c,v 1.2 2021/09/04 12:35:31 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: apple_pcie.c,v 1.3 2021/09/06 14:03:17 jmcneill Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -106,9 +106,13 @@ apple_pcie_attach(device_t parent, devic sc->sc_dev = self; sc->sc_dmat = faa->faa_dmat; sc->sc_bst = faa->faa_bst; + /* + * Create a new bus tag for PCIe devices that does not inherit the + * nonposted MMIO flag from the host controller. + */ + sc->sc_pci_bst = fdtbus_bus_tag_create(phandle, 0); sc->sc_phandle = phandle; - error = bus_space_map(sc->sc_bst, cs_addr, cs_size, - _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, &sc->sc_bsh); + error = bus_space_map(faa->faa_bst, cs_addr, cs_size, 0, &sc->sc_bsh); if (error) { aprint_error(": couldn't map registers: %d\n", error); return; @@ -146,8 +150,7 @@ apple_pcie_setup_port(struct apple_pcie_ aprint_error(": couldn't get %s regs\n", regname); return; } - error = bus_space_map(bst, addr, size, - _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, &bsh); + error = bus_space_map(bst, addr, size, 0, &bsh); if (error != 0) { aprint_error(": couldn't map %s regs\n", regname); return; Index: src/sys/arch/arm/apple/apple_intc.c diff -u src/sys/arch/arm/apple/apple_intc.c:1.1 src/sys/arch/arm/apple/apple_intc.c:1.2 --- src/sys/arch/arm/apple/apple_intc.c:1.1 Mon Aug 30 23:26:26 2021 +++ src/sys/arch/arm/apple/apple_intc.c Mon Sep 6 14:03:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: apple_intc.c,v 1.1 2021/08/30 23:26:26 jmcneill Exp $ */ +/* $NetBSD: apple_intc.c,v 1.2 2021/09/06 14:03:17 jmcneill Exp $ */ /*- * Copyright (c) 2021 Jared McNeill <jmcne...@invisible.ca> @@ -31,7 +31,7 @@ #define _INTR_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: apple_intc.c,v 1.1 2021/08/30 23:26:26 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: apple_intc.c,v 1.2 2021/09/06 14:03:17 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -465,8 +465,7 @@ apple_intc_attach(device_t parent, devic sc->sc_dev = self; sc->sc_bst = faa->faa_bst; - if (bus_space_map(sc->sc_bst, addr, size, - _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, &sc->sc_bsh) != 0) { + if (bus_space_map(sc->sc_bst, addr, size, 0, &sc->sc_bsh) != 0) { aprint_error(": couldn't map registers\n"); return; } Index: src/sys/arch/arm/apple/apple_wdog.c diff -u src/sys/arch/arm/apple/apple_wdog.c:1.1 src/sys/arch/arm/apple/apple_wdog.c:1.2 --- src/sys/arch/arm/apple/apple_wdog.c:1.1 Mon Aug 30 23:26:26 2021 +++ src/sys/arch/arm/apple/apple_wdog.c Mon Sep 6 14:03:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: apple_wdog.c,v 1.1 2021/08/30 23:26:26 jmcneill Exp $ */ +/* $NetBSD: apple_wdog.c,v 1.2 2021/09/06 14:03:17 jmcneill Exp $ */ /*- * Copyright (c) 2021 Jared McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: apple_wdog.c,v 1.1 2021/08/30 23:26:26 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: apple_wdog.c,v 1.2 2021/09/06 14:03:17 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -99,8 +99,7 @@ apple_wdog_attach(device_t parent, devic sc->sc_dev = self; sc->sc_bst = faa->faa_bst; - if (bus_space_map(sc->sc_bst, addr, size, - _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, &sc->sc_bsh) != 0) { + if (bus_space_map(sc->sc_bst, addr, size, 0, &sc->sc_bsh) != 0) { aprint_error(": couldn't map registers\n"); return; } Index: src/sys/arch/arm/fdt/pcihost_fdt.c diff -u src/sys/arch/arm/fdt/pcihost_fdt.c:1.26 src/sys/arch/arm/fdt/pcihost_fdt.c:1.27 --- src/sys/arch/arm/fdt/pcihost_fdt.c:1.26 Sat Aug 7 16:18:43 2021 +++ src/sys/arch/arm/fdt/pcihost_fdt.c Mon Sep 6 14:03:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pcihost_fdt.c,v 1.26 2021/08/07 16:18:43 thorpej Exp $ */ +/* $NetBSD: pcihost_fdt.c,v 1.27 2021/09/06 14:03:17 jmcneill Exp $ */ /*- * Copyright (c) 2018 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pcihost_fdt.c,v 1.26 2021/08/07 16:18:43 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pcihost_fdt.c,v 1.27 2021/09/06 14:03:17 jmcneill Exp $"); #include <sys/param.h> @@ -126,6 +126,7 @@ pcihost_attach(device_t parent, device_t sc->sc_dev = self; sc->sc_dmat = faa->faa_dmat; sc->sc_bst = faa->faa_bst; + sc->sc_pci_bst = faa->faa_bst; sc->sc_phandle = faa->faa_phandle; error = bus_space_map(sc->sc_bst, cs_addr, cs_size, _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, &sc->sc_bsh); @@ -230,14 +231,14 @@ pcihost_config(struct pcihost_softc *sc) bool swap; struct pcih_bus_space * const pibs = &sc->sc_io; - pibs->bst = *sc->sc_bst; + pibs->bst = *sc->sc_pci_bst; pibs->bst.bs_cookie = pibs; pibs->map = pibs->bst.bs_map; pibs->flags = PCI_FLAGS_IO_OKAY; pibs->bst.bs_map = pcihost_bus_space_map; struct pcih_bus_space * const pmbs = &sc->sc_mem; - pmbs->bst = *sc->sc_bst; + pmbs->bst = *sc->sc_pci_bst; pmbs->bst.bs_cookie = pmbs; pmbs->map = pmbs->bst.bs_map; pmbs->flags = PCI_FLAGS_MEM_OKAY; Index: src/sys/arch/arm/fdt/pcihost_fdtvar.h diff -u src/sys/arch/arm/fdt/pcihost_fdtvar.h:1.3 src/sys/arch/arm/fdt/pcihost_fdtvar.h:1.4 --- src/sys/arch/arm/fdt/pcihost_fdtvar.h:1.3 Sat Dec 28 17:19:43 2019 +++ src/sys/arch/arm/fdt/pcihost_fdtvar.h Mon Sep 6 14:03:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: pcihost_fdtvar.h,v 1.3 2019/12/28 17:19:43 jmcneill Exp $ */ +/* $NetBSD: pcihost_fdtvar.h,v 1.4 2021/09/06 14:03:17 jmcneill Exp $ */ /*- * Copyright (c) 2018 Jared D. McNeill <jmcne...@invisible.ca> @@ -67,6 +67,7 @@ struct pcihost_softc { bus_dma_tag_t sc_dmat; bus_space_tag_t sc_bst; bus_space_handle_t sc_bsh; + bus_space_tag_t sc_pci_bst; int sc_phandle; enum pcihost_type sc_type; Index: src/sys/arch/arm/rockchip/rk3399_pcie.c diff -u src/sys/arch/arm/rockchip/rk3399_pcie.c:1.16 src/sys/arch/arm/rockchip/rk3399_pcie.c:1.17 --- src/sys/arch/arm/rockchip/rk3399_pcie.c:1.16 Fri Sep 3 01:21:48 2021 +++ src/sys/arch/arm/rockchip/rk3399_pcie.c Mon Sep 6 14:03:17 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: rk3399_pcie.c,v 1.16 2021/09/03 01:21:48 mrg Exp $ */ +/* $NetBSD: rk3399_pcie.c,v 1.17 2021/09/06 14:03:17 jmcneill Exp $ */ /* * Copyright (c) 2018 Mark Kettenis <kette...@openbsd.org> * @@ -17,7 +17,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: rk3399_pcie.c,v 1.16 2021/09/03 01:21:48 mrg Exp $"); +__KERNEL_RCSID(1, "$NetBSD: rk3399_pcie.c,v 1.17 2021/09/06 14:03:17 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -215,11 +215,12 @@ rkpcie_attach(device_t parent, device_t phsc->sc_dev = self; phsc->sc_bst = faa->faa_bst; + phsc->sc_pci_bst = faa->faa_bst; phsc->sc_dmat = faa->faa_dmat; sc->sc_iot = phsc->sc_bst; phsc->sc_phandle = faa->faa_phandle; const int phandle = phsc->sc_phandle; - + if (fdtbus_get_reg_byname(faa->faa_phandle, "axi-base", &sc->sc_axi_addr, &sc->sc_axi_size) != 0) { aprint_error(": couldn't get axi registers\n"); return; Index: src/sys/arch/evbarm/conf/files.fdt diff -u src/sys/arch/evbarm/conf/files.fdt:1.8 src/sys/arch/evbarm/conf/files.fdt:1.9 --- src/sys/arch/evbarm/conf/files.fdt:1.8 Wed May 12 23:22:32 2021 +++ src/sys/arch/evbarm/conf/files.fdt Mon Sep 6 14:03:17 2021 @@ -1,8 +1,9 @@ -# $NetBSD: files.fdt,v 1.8 2021/05/12 23:22:32 thorpej Exp $ +# $NetBSD: files.fdt,v 1.9 2021/09/06 14:03:17 jmcneill Exp $ # # FDT-based kernel configuration info # +file arch/evbarm/fdt/fdt_bus_machdep.c fdt file arch/evbarm/fdt/fdt_dma_machdep.c fdt file arch/evbarm/fdt/fdt_machdep.c fdt file dev/ofw/ofw_pci_subr.c fdt & pci Index: src/sys/arch/mips/cavium/mainbus.c diff -u src/sys/arch/mips/cavium/mainbus.c:1.9 src/sys/arch/mips/cavium/mainbus.c:1.10 --- src/sys/arch/mips/cavium/mainbus.c:1.9 Sat Aug 7 16:18:59 2021 +++ src/sys/arch/mips/cavium/mainbus.c Mon Sep 6 14:03:18 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: mainbus.c,v 1.9 2021/08/07 16:18:59 thorpej Exp $ */ +/* $NetBSD: mainbus.c,v 1.10 2021/09/06 14:03:18 jmcneill Exp $ */ /* * Copyright (c) 2007 @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.9 2021/08/07 16:18:59 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.10 2021/09/06 14:03:18 jmcneill Exp $"); #define _MIPS_BUS_DMA_PRIVATE @@ -186,3 +186,9 @@ mainbus_print(void *aux, const char *pnp #define CHIP_W1_SYS_END(v) 0xffffffffffffffffULL #include <mips/mips/bus_space_alignstride_chipdep.c> + +bus_space_tag_t +fdtbus_bus_tag_create(int phandle, uint32_t flags) +{ + return &simplebus_bus_tag; +} Index: src/sys/dev/fdt/fdtbus.c diff -u src/sys/dev/fdt/fdtbus.c:1.42 src/sys/dev/fdt/fdtbus.c:1.43 --- src/sys/dev/fdt/fdtbus.c:1.42 Sat Aug 7 16:19:10 2021 +++ src/sys/dev/fdt/fdtbus.c Mon Sep 6 14:03:18 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: fdtbus.c,v 1.42 2021/08/07 16:19:10 thorpej Exp $ */ +/* $NetBSD: fdtbus.c,v 1.43 2021/09/06 14:03:18 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fdtbus.c,v 1.42 2021/08/07 16:19:10 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fdtbus.c,v 1.43 2021/09/06 14:03:18 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -206,7 +206,9 @@ fdt_init_attach_args(const struct fdt_at faa->faa_phandle = node->n_phandle; faa->faa_name = node->n_name; faa->faa_quiet = quiet; - faa->faa_dmat = node->n_faa.faa_dmat; + faa->faa_bst = node->n_faa.faa_bst; + faa->faa_dmat = fdtbus_iommu_map(node->n_phandle, 0, + node->n_faa.faa_dmat); } static bool @@ -295,6 +297,34 @@ fdt_get_dma_tag(struct fdt_node *node) return fdtbus_dma_tag_create(node->n_phandle, ranges, nranges); } +static uint32_t +fdt_bus_flags(int phandle, uint32_t *flags) +{ + if (of_hasprop(phandle, "nonposted-mmio")) { + *flags |= FDT_BUS_SPACE_FLAG_NONPOSTED_MMIO; + return 1; + } + + return 0; +} + +static bus_space_tag_t +fdt_get_bus_tag(struct fdt_node *node) +{ + uint32_t flags = 0; + int parent; + + parent = OF_parent(node->n_phandle); + while (parent != -1) { + if (fdt_bus_flags(parent, &flags) != 0) { + break; + } + parent = OF_parent(parent); + } + + return fdtbus_bus_tag_create(node->n_phandle, flags); +} + void fdt_add_child(device_t bus, const int child, struct fdt_attach_args *faa, u_int order) @@ -313,6 +343,7 @@ fdt_add_child(device_t bus, const int ch node->n_faa = *faa; node->n_faa.faa_phandle = child; node->n_faa.faa_name = node->n_name; + node->n_faa.faa_bst = fdt_get_bus_tag(node); node->n_faa.faa_dmat = fdt_get_dma_tag(node); fdt_add_node(node); Index: src/sys/dev/fdt/fdtvar.h diff -u src/sys/dev/fdt/fdtvar.h:1.71 src/sys/dev/fdt/fdtvar.h:1.72 --- src/sys/dev/fdt/fdtvar.h:1.71 Sat Sep 4 12:34:39 2021 +++ src/sys/dev/fdt/fdtvar.h Mon Sep 6 14:03:18 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: fdtvar.h,v 1.71 2021/09/04 12:34:39 jmcneill Exp $ */ +/* $NetBSD: fdtvar.h,v 1.72 2021/09/06 14:03:18 jmcneill Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca> @@ -275,6 +275,8 @@ struct fdt_dma_range { bus_size_t dr_len; }; +#define FDT_BUS_SPACE_FLAG_NONPOSTED_MMIO __BIT(0) + int fdtbus_register_interrupt_controller(device_t, int, const struct fdtbus_interrupt_controller_func *); int fdtbus_register_i2c_controller(i2c_tag_t, int); @@ -447,5 +449,6 @@ int fdtbus_print(void *, const char *); bus_dma_tag_t fdtbus_dma_tag_create(int, const struct fdt_dma_range *, u_int); +bus_space_tag_t fdtbus_bus_tag_create(int, uint32_t); #endif /* _DEV_FDT_FDTVAR_H_ */ Added files: Index: src/sys/arch/evbarm/fdt/fdt_bus_machdep.c diff -u /dev/null src/sys/arch/evbarm/fdt/fdt_bus_machdep.c:1.1 --- /dev/null Mon Sep 6 14:03:18 2021 +++ src/sys/arch/evbarm/fdt/fdt_bus_machdep.c Mon Sep 6 14:03:18 2021 @@ -0,0 +1,68 @@ +/* $NetBSD: fdt_bus_machdep.c,v 1.1 2021/09/06 14:03:18 jmcneill Exp $ */ + +/*- + * Copyright (c) 2021 Jared McNeill <jmcne...@invisible.ca> + * All rights reserved. + * + * 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 AUTHOR ``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 AUTHOR 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> +__KERNEL_RCSID(0, "$NetBSD: fdt_bus_machdep.c,v 1.1 2021/09/06 14:03:18 jmcneill Exp $"); + +#include <sys/param.h> +#include <sys/bus.h> +#include <sys/kmem.h> + +#include <dev/fdt/fdtvar.h> +#include <arm/fdt/arm_fdtvar.h> + +extern struct bus_space arm_generic_bs_tag; + +static int +nonposted_mmio_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flag, + bus_space_handle_t *bshp) +{ + if (flag == 0) { + flag |= _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED; + } + + return bus_space_map(&arm_generic_bs_tag, bpa, size, flag, bshp); +} + +bus_space_tag_t +fdtbus_bus_tag_create(int phandle, uint32_t flags) +{ + const struct arm_platform *plat = arm_fdt_platform(); + struct bus_space *tagp; + struct fdt_attach_args faa; + + plat->ap_init_attach_args(&faa); + + tagp = kmem_alloc(sizeof(*tagp), KM_SLEEP); + *tagp = *faa.faa_bst; + if ((flags & FDT_BUS_SPACE_FLAG_NONPOSTED_MMIO) != 0) { + tagp->bs_map = nonposted_mmio_bs_map; + } + + return tagp; +}