Module Name:    src
Committed By:   jmcneill
Date:           Sat Dec 28 17:19:44 UTC 2019

Modified Files:
        src/sys/arch/aarch64/aarch64: bus_space.c genassym.cf locore.S pmap.c
        src/sys/arch/aarch64/conf: files.aarch64
        src/sys/arch/aarch64/include: pmap.h
        src/sys/arch/arm/acpi: acpi_machdep.c acpipchb.c
        src/sys/arch/arm/fdt: pcihost_fdt.c pcihost_fdtvar.h
        src/sys/arch/arm/include: bus_defs.h
        src/sys/arch/arm/nvidia: tegra_pcie.c
        src/sys/arch/arm/rockchip: rk3399_pcie.c

Log Message:
Do not use Early Write Acknowledge for PCIe I/O and config space.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/aarch64/aarch64/bus_space.c
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/aarch64/aarch64/genassym.cf
cvs rdiff -u -r1.48 -r1.49 src/sys/arch/aarch64/aarch64/locore.S
cvs rdiff -u -r1.57 -r1.58 src/sys/arch/aarch64/aarch64/pmap.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/aarch64/conf/files.aarch64
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/aarch64/include/pmap.h
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/acpi/acpi_machdep.c
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/acpi/acpipchb.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/fdt/pcihost_fdt.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/fdt/pcihost_fdtvar.h
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/include/bus_defs.h
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/nvidia/tegra_pcie.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/rockchip/rk3399_pcie.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/aarch64/aarch64/bus_space.c
diff -u src/sys/arch/aarch64/aarch64/bus_space.c:1.8 src/sys/arch/aarch64/aarch64/bus_space.c:1.9
--- src/sys/arch/aarch64/aarch64/bus_space.c:1.8	Sun Jan 27 02:08:36 2019
+++ src/sys/arch/aarch64/aarch64/bus_space.c	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: bus_space.c,v 1.8 2019/01/27 02:08:36 pgoyette Exp $ */
+/* $NetBSD: bus_space.c,v 1.9 2019/12/28 17:19:43 jmcneill Exp $ */
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: bus_space.c,v 1.8 2019/01/27 02:08:36 pgoyette Exp $");
+__KERNEL_RCSID(1, "$NetBSD: bus_space.c,v 1.9 2019/12/28 17:19:43 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -561,6 +561,8 @@ generic_bs_map(void *t, bus_addr_t bpa, 
 		pmapflags = PMAP_WRITE_COMBINE;
 	else if ((flag & BUS_SPACE_MAP_CACHEABLE) != 0)
 		pmapflags = PMAP_WRITE_BACK;
+	else if ((flag & _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED) != 0)
+		pmapflags = PMAP_DEV_SO;
 	else
 		pmapflags = PMAP_DEV;
 

Index: src/sys/arch/aarch64/aarch64/genassym.cf
diff -u src/sys/arch/aarch64/aarch64/genassym.cf:1.16 src/sys/arch/aarch64/aarch64/genassym.cf:1.17
--- src/sys/arch/aarch64/aarch64/genassym.cf:1.16	Fri Dec 27 18:56:47 2019
+++ src/sys/arch/aarch64/aarch64/genassym.cf	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-# $NetBSD: genassym.cf,v 1.16 2019/12/27 18:56:47 jmcneill Exp $
+# $NetBSD: genassym.cf,v 1.17 2019/12/28 17:19:43 jmcneill Exp $
 #-
 # Copyright (c) 2014 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -335,6 +335,7 @@ define	MAIR_ATTR0		MAIR_ATTR0
 define	MAIR_ATTR1		MAIR_ATTR1
 define	MAIR_ATTR2		MAIR_ATTR2
 define	MAIR_ATTR3		MAIR_ATTR3
+define	MAIR_ATTR4		MAIR_ATTR4
 define	MAIR_DEVICE_nGnRnE	MAIR_DEVICE_nGnRnE
 define	MAIR_DEVICE_nGnRE	MAIR_DEVICE_nGnRE
 define	MAIR_NORMAL_NC		MAIR_NORMAL_NC

Index: src/sys/arch/aarch64/aarch64/locore.S
diff -u src/sys/arch/aarch64/aarch64/locore.S:1.48 src/sys/arch/aarch64/aarch64/locore.S:1.49
--- src/sys/arch/aarch64/aarch64/locore.S:1.48	Fri Dec 27 18:56:47 2019
+++ src/sys/arch/aarch64/aarch64/locore.S	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.S,v 1.48 2019/12/27 18:56:47 jmcneill Exp $	*/
+/*	$NetBSD: locore.S,v 1.49 2019/12/28 17:19:43 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 2017 Ryo Shimizu <r...@nerv.org>
@@ -38,13 +38,14 @@
 #include <aarch64/hypervisor.h>
 #include "assym.h"
 
-RCSID("$NetBSD: locore.S,v 1.48 2019/12/27 18:56:47 jmcneill Exp $")
+RCSID("$NetBSD: locore.S,v 1.49 2019/12/28 17:19:43 jmcneill Exp $")
 
-#ifdef AARCH64_DEVICE_MEM_STRICTLY_ORDERED
+#ifdef AARCH64_DEVICE_MEM_STRONGLY_ORDERED
 #define	MAIR_DEVICE_MEM		MAIR_DEVICE_nGnRnE
 #else
 #define	MAIR_DEVICE_MEM		MAIR_DEVICE_nGnRE
 #endif
+#define	MAIR_DEVICE_MEM_SO	MAIR_DEVICE_nGnRnE
 
 /*#define DEBUG_LOCORE			/* debug print */
 /*#define DEBUG_LOCORE_PRINT_LOCK	/* avoid mixing AP's output */
@@ -953,7 +954,8 @@ mair_setting:
 	    __SHIFTIN(MAIR_NORMAL_WB, MAIR_ATTR0) |	\
 	    __SHIFTIN(MAIR_NORMAL_NC, MAIR_ATTR1) |	\
 	    __SHIFTIN(MAIR_NORMAL_WT, MAIR_ATTR2) |	\
-	    __SHIFTIN(MAIR_DEVICE_MEM, MAIR_ATTR3))
+	    __SHIFTIN(MAIR_DEVICE_MEM, MAIR_ATTR3) |	\
+	    __SHIFTIN(MAIR_DEVICE_MEM_SO, MAIR_ATTR4))
 
 #define VIRT_BIT	48
 

Index: src/sys/arch/aarch64/aarch64/pmap.c
diff -u src/sys/arch/aarch64/aarch64/pmap.c:1.57 src/sys/arch/aarch64/aarch64/pmap.c:1.58
--- src/sys/arch/aarch64/aarch64/pmap.c:1.57	Fri Dec 27 18:56:47 2019
+++ src/sys/arch/aarch64/aarch64/pmap.c	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.57 2019/12/27 18:56:47 jmcneill Exp $	*/
+/*	$NetBSD: pmap.c,v 1.58 2019/12/28 17:19:43 jmcneill 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.57 2019/12/27 18:56:47 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.58 2019/12/28 17:19:43 jmcneill Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_ddb.h"
@@ -951,7 +951,10 @@ _pmap_pte_adjust_cacheflags(pt_entry_t p
 
 	pte &= ~LX_BLKPAG_ATTR_MASK;
 
-	switch (flags & (PMAP_CACHE_MASK|PMAP_DEV)) {
+	switch (flags & (PMAP_CACHE_MASK|PMAP_DEV_MASK)) {
+	case PMAP_DEV_SO ... PMAP_DEV_SO | PMAP_CACHE_MASK:
+		pte |= LX_BLKPAG_ATTR_DEVICE_MEM_SO;	/* Device-nGnRnE */
+		break;
 	case PMAP_DEV ... PMAP_DEV | PMAP_CACHE_MASK:
 		pte |= LX_BLKPAG_ATTR_DEVICE_MEM;	/* Device-nGnRE */
 		break;

Index: src/sys/arch/aarch64/conf/files.aarch64
diff -u src/sys/arch/aarch64/conf/files.aarch64:1.15 src/sys/arch/aarch64/conf/files.aarch64:1.16
--- src/sys/arch/aarch64/conf/files.aarch64:1.15	Fri Dec 27 18:56:47 2019
+++ src/sys/arch/aarch64/conf/files.aarch64	Sat Dec 28 17:19:43 2019
@@ -1,10 +1,10 @@
-#	$NetBSD: files.aarch64,v 1.15 2019/12/27 18:56:47 jmcneill Exp $
+#	$NetBSD: files.aarch64,v 1.16 2019/12/28 17:19:43 jmcneill Exp $
 
 defflag opt_cpuoptions.h	AARCH64_ALIGNMENT_CHECK
 defflag opt_cpuoptions.h	AARCH64_EL0_STACK_ALIGNMENT_CHECK
 defflag opt_cpuoptions.h	AARCH64_EL1_STACK_ALIGNMENT_CHECK
 defflag opt_cpuoptions.h	AARCH64_HAVE_L2CTLR
-defflag opt_cpuoptions.h	AARCH64_DEVICE_MEM_STRICTLY_ORDERED
+defflag opt_cpuoptions.h	AARCH64_DEVICE_MEM_STRONGLY_ORDERED
 
 defflag	opt_cputypes.h		CPU_ARMV8
 defflag	opt_cputypes.h		CPU_CORTEX: CPU_ARMV8

Index: src/sys/arch/aarch64/include/pmap.h
diff -u src/sys/arch/aarch64/include/pmap.h:1.27 src/sys/arch/aarch64/include/pmap.h:1.28
--- src/sys/arch/aarch64/include/pmap.h:1.27	Fri Dec 27 18:56:47 2019
+++ src/sys/arch/aarch64/include/pmap.h	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.h,v 1.27 2019/12/27 18:56:47 jmcneill Exp $ */
+/* $NetBSD: pmap.h,v 1.28 2019/12/28 17:19:43 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -114,6 +114,7 @@ struct vm_page_md {
 #define LX_BLKPAG_ATTR_NORMAL_NC	__SHIFTIN(1, LX_BLKPAG_ATTR_INDX)
 #define LX_BLKPAG_ATTR_NORMAL_WT	__SHIFTIN(2, LX_BLKPAG_ATTR_INDX)
 #define LX_BLKPAG_ATTR_DEVICE_MEM	__SHIFTIN(3, LX_BLKPAG_ATTR_INDX)
+#define LX_BLKPAG_ATTR_DEVICE_MEM_SO	__SHIFTIN(4, LX_BLKPAG_ATTR_INDX)
 #define LX_BLKPAG_ATTR_MASK		LX_BLKPAG_ATTR_INDX
 
 #define lxpde_pa(pde)		((paddr_t)((pde) & LX_TBL_PA))
@@ -228,6 +229,8 @@ paddr_t pmap_alloc_pdp(struct pmap *, st
 
 #define	PMAP_PTE			0x10000000 /* kenter_pa */
 #define	PMAP_DEV			0x20000000 /* kenter_pa */
+#define	PMAP_DEV_SO			0x40000000 /* kenter_pa */
+#define	PMAP_DEV_MASK			(PMAP_DEV | PMAP_DEV_SO)
 
 static inline u_int
 aarch64_mmap_flags(paddr_t mdpgno)
@@ -235,12 +238,13 @@ aarch64_mmap_flags(paddr_t mdpgno)
 	u_int nflag, pflag;
 
 	/*
-	 * aarch64 arch has 4 memory attribute:
+	 * aarch64 arch has 5 memory attribute:
 	 *
 	 *  WriteBack      - write back cache
 	 *  WriteThru      - wite through cache
 	 *  NoCache        - no cache
 	 *  Device(nGnRE)  - no Gathering, no Reordering, Early write ack
+	 *  Device(nGnRnE) - no Gathering, no Reordering, no Early write ack
 	 *
 	 * but pmap has PMAP_{NOCACHE,WRITE_COMBINE,WRITE_BACK} flags.
 	 */

Index: src/sys/arch/arm/acpi/acpi_machdep.c
diff -u src/sys/arch/arm/acpi/acpi_machdep.c:1.12 src/sys/arch/arm/acpi/acpi_machdep.c:1.13
--- src/sys/arch/arm/acpi/acpi_machdep.c:1.12	Mon Dec 23 15:34:23 2019
+++ src/sys/arch/arm/acpi/acpi_machdep.c	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_machdep.c,v 1.12 2019/12/23 15:34:23 jmcneill Exp $ */
+/* $NetBSD: acpi_machdep.c,v 1.13 2019/12/28 17:19:43 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
 #include "pci.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.12 2019/12/23 15:34:23 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.13 2019/12/28 17:19:43 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -325,13 +325,27 @@ acpi_md_gtdt_probe(ACPI_GTDT_HEADER *hdr
 	return AE_OK;
 }
 
+#if NPCI > 0
+static struct bus_space acpi_md_mcfg_bs_tag;
+
+static int
+acpi_md_mcfg_bs_map(void *t, bus_addr_t bpa, bus_size_t size, int flag,
+    bus_space_handle_t *bshp)
+{
+	return arm_generic_bs_tag.bs_map(t, bpa, size,
+	    flag | _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, bshp);
+}
+#endif
+
 void
 acpi_md_callback(struct acpi_softc *sc)
 {
 	ACPI_TABLE_HEADER *hdrp;
 
 #if NPCI > 0
-	acpimcfg_init(&arm_generic_bs_tag, NULL);
+	acpi_md_mcfg_bs_tag = arm_generic_bs_tag;
+	acpi_md_mcfg_bs_tag.bs_map = acpi_md_mcfg_bs_map;
+	acpimcfg_init(&acpi_md_mcfg_bs_tag, NULL);
 #endif
 
 	if (acpi_madt_map() != AE_OK)

Index: src/sys/arch/arm/acpi/acpipchb.c
diff -u src/sys/arch/arm/acpi/acpipchb.c:1.13 src/sys/arch/arm/acpi/acpipchb.c:1.14
--- src/sys/arch/arm/acpi/acpipchb.c:1.13	Tue Oct 15 13:27:50 2019
+++ src/sys/arch/arm/acpi/acpipchb.c	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: acpipchb.c,v 1.13 2019/10/15 13:27:50 jmcneill Exp $ */
+/* $NetBSD: acpipchb.c,v 1.14 2019/12/28 17:19:43 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpipchb.c,v 1.13 2019/10/15 13:27:50 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpipchb.c,v 1.14 2019/12/28 17:19:43 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -75,6 +75,8 @@ struct acpipchb_bus_space {
 
 	int			(*map)(void *, bus_addr_t, bus_size_t,
 				       int, bus_space_handle_t *);
+
+	int			flags;
 };
 
 struct acpipchb_softc {
@@ -157,7 +159,8 @@ acpipchb_amazon_graviton_map(ACPI_HANDLE
 		return AE_NOT_FOUND;
 	}
 
-	error = bus_space_map(ap->ap_bst, mem->ar_base, mem->ar_length, 0, &ap->ap_conf_bsh);
+	error = bus_space_map(ap->ap_bst, mem->ar_base, mem->ar_length,
+	    _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, &ap->ap_conf_bsh);
 	if (error != 0)
 		return AE_NO_MEMORY;
 
@@ -309,6 +312,11 @@ acpipchb_bus_space_map(void *t, bus_addr
 	if (size == 0)
 		return ERANGE;
 
+	if ((abs->flags & PCI_FLAGS_IO_OKAY) != 0) {
+		/* Force strongly ordered mapping for all I/O space */
+		flag = _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED;
+	}
+
 	for (i = 0; i < abs->nrange; i++) {
 		struct acpipchb_bus_range * const range = &abs->range[i];
 		if (bpa >= range->min && bpa + size - 1 <= range->max) 
@@ -377,6 +385,7 @@ acpipchb_setup_ranges_cb(ACPI_RESOURCE *
 		abs->bs = *sc->sc_memt;
 		abs->bs.bs_cookie = abs;
 		abs->map = abs->bs.bs_map;
+		abs->flags = pci_flags;
 		abs->bs.bs_map = acpipchb_bus_space_map;
 		if ((pci_flags & PCI_FLAGS_IO_OKAY) != 0)
 			pba->pba_iot = &abs->bs;

Index: src/sys/arch/arm/fdt/pcihost_fdt.c
diff -u src/sys/arch/arm/fdt/pcihost_fdt.c:1.11 src/sys/arch/arm/fdt/pcihost_fdt.c:1.12
--- src/sys/arch/arm/fdt/pcihost_fdt.c:1.11	Sun Jun 23 22:06:03 2019
+++ src/sys/arch/arm/fdt/pcihost_fdt.c	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pcihost_fdt.c,v 1.11 2019/06/23 22:06:03 jmcneill Exp $ */
+/* $NetBSD: pcihost_fdt.c,v 1.12 2019/12/28 17:19:43 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.11 2019/06/23 22:06:03 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pcihost_fdt.c,v 1.12 2019/12/28 17:19:43 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -126,7 +126,8 @@ pcihost_attach(device_t parent, device_t
 	sc->sc_dmat = faa->faa_dmat;
 	sc->sc_bst = faa->faa_bst;
 	sc->sc_phandle = faa->faa_phandle;
-	error = bus_space_map(sc->sc_bst, cs_addr, cs_size, 0, &sc->sc_bsh);
+	error = bus_space_map(sc->sc_bst, cs_addr, cs_size,
+	    _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, &sc->sc_bsh);
 	if (error) {
 		aprint_error(": couldn't map registers: %d\n", error);
 		return;
@@ -231,12 +232,14 @@ pcihost_config(struct pcihost_softc *sc)
 	pibs->bst = *sc->sc_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.bs_cookie = pmbs;
 	pmbs->map = pmbs->bst.bs_map;
+	pmbs->flags = PCI_FLAGS_MEM_OKAY;
 	pmbs->bst.bs_map = pcihost_bus_space_map;
 
 	/*
@@ -634,6 +637,11 @@ pcihost_bus_space_map(void *t, bus_addr_
 {
 	struct pcih_bus_space * const pbs = t;
 
+	if ((pbs->flags & PCI_FLAGS_IO_OKAY) != 0) {
+		/* Force strongly ordered mapping for all I/O space */
+		flag = _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED;
+	}
+
 	for (size_t i = 0; i < pbs->nranges; i++) {
 		const bus_addr_t rmin = pbs->ranges[i].bpci;
 		const bus_addr_t rmax = pbs->ranges[i].bpci - 1 + pbs->ranges[i].size;

Index: src/sys/arch/arm/fdt/pcihost_fdtvar.h
diff -u src/sys/arch/arm/fdt/pcihost_fdtvar.h:1.2 src/sys/arch/arm/fdt/pcihost_fdtvar.h:1.3
--- src/sys/arch/arm/fdt/pcihost_fdtvar.h:1.2	Wed Jun 12 10:13:44 2019
+++ src/sys/arch/arm/fdt/pcihost_fdtvar.h	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pcihost_fdtvar.h,v 1.2 2019/06/12 10:13:44 jmcneill Exp $ */
+/* $NetBSD: pcihost_fdtvar.h,v 1.3 2019/12/28 17:19:43 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared D. McNeill <jmcne...@invisible.ca>
@@ -52,6 +52,8 @@ struct pcih_bus_space {
 
 	int		(*map)(void *, bus_addr_t, bus_size_t,
 			      int, bus_space_handle_t *);
+	int			flags;
+
 	struct space_range {
 		bus_addr_t	bpci;
 		bus_addr_t	bbus;

Index: src/sys/arch/arm/include/bus_defs.h
diff -u src/sys/arch/arm/include/bus_defs.h:1.13 src/sys/arch/arm/include/bus_defs.h:1.14
--- src/sys/arch/arm/include/bus_defs.h:1.13	Mon Nov 19 10:45:47 2018
+++ src/sys/arch/arm/include/bus_defs.h	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_defs.h,v 1.13 2018/11/19 10:45:47 jmcneill Exp $	*/
+/*	$NetBSD: bus_defs.h,v 1.14 2019/12/28 17:19:43 jmcneill Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc.
@@ -97,6 +97,13 @@ typedef u_long bus_space_handle_t;
 #define	BUS_SPACE_MAP_LINEAR		0x02
 #define	BUS_SPACE_MAP_PREFETCHABLE     	0x04
 
+#define	BUS_SPACE_MAP_BUS1		0x0100
+#define	BUS_SPACE_MAP_BUS2		0x0200
+#define	BUS_SPACE_MAP_BUS3		0x0400
+#define	BUS_SPACE_MAP_BUS4		0x0800
+
+#define	_ARM_BUS_SPACE_MAP_STRONGLY_ORDERED	BUS_SPACE_MAP_BUS1
+
 struct bus_space {
 	/* cookie */
 	void		*bs_cookie;

Index: src/sys/arch/arm/nvidia/tegra_pcie.c
diff -u src/sys/arch/arm/nvidia/tegra_pcie.c:1.26 src/sys/arch/arm/nvidia/tegra_pcie.c:1.27
--- src/sys/arch/arm/nvidia/tegra_pcie.c:1.26	Tue Mar 12 18:46:20 2019
+++ src/sys/arch/arm/nvidia/tegra_pcie.c	Sat Dec 28 17:19:43 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_pcie.c,v 1.26 2019/03/12 18:46:20 jakllsch Exp $ */
+/* $NetBSD: tegra_pcie.c,v 1.27 2019/12/28 17:19:43 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_pcie.c,v 1.26 2019/03/12 18:46:20 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_pcie.c,v 1.27 2019/12/28 17:19:43 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -188,8 +188,8 @@ tegra_pcie_attach(device_t parent, devic
 		aprint_error(": couldn't map pads registers: %d\n", error);
 		return;
 	}
-	error = bus_space_map(sc->sc_bst, cs_addr, cs_size, 0,
-	    &sc->sc_bsh_rpconf);
+	error = bus_space_map(sc->sc_bst, cs_addr, cs_size,
+	    _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED, &sc->sc_bsh_rpconf);
 	if (error) {
 		aprint_error(": couldn't map cs registers: %d\n", error);
 		return;
@@ -565,7 +565,8 @@ tegra_pcie_conf_frag_map(struct tegra_pc
 	}
 
 	a = TEGRA_PCIE_EXTC_BASE + (bus << 16) + (frg << 24);
-	if (bus_space_map(sc->sc_bst, a, 1 << 16, 0,
+	if (bus_space_map(sc->sc_bst, a, 1 << 16,
+	    _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED,
 	    &sc->sc_bsh_extc[bus-1][frg]) != 0)
 		device_printf(sc->sc_dev, "couldn't map PCIE "
 		    "configuration for bus %u fragment %#x", bus, frg);

Index: src/sys/arch/arm/rockchip/rk3399_pcie.c
diff -u src/sys/arch/arm/rockchip/rk3399_pcie.c:1.8 src/sys/arch/arm/rockchip/rk3399_pcie.c:1.9
--- src/sys/arch/arm/rockchip/rk3399_pcie.c:1.8	Sat Dec  7 16:00:36 2019
+++ src/sys/arch/arm/rockchip/rk3399_pcie.c	Sat Dec 28 17:19:44 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_pcie.c,v 1.8 2019/12/07 16:00:36 jmcneill Exp $ */
+/* $NetBSD: rk3399_pcie.c,v 1.9 2019/12/28 17:19:44 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.8 2019/12/07 16:00:36 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_pcie.c,v 1.9 2019/12/28 17:19:44 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -228,8 +228,9 @@ rkpcie_attach(device_t parent, device_t 
 		return;
 	}
 
-	if (bus_space_map(sc->sc_iot, sc->sc_apb_addr, sc->sc_apb_size, 0, &sc->sc_ioh) != 0 ||
-	    bus_space_map(sc->sc_iot, sc->sc_axi_addr, sc->sc_axi_size, 0, &sc->sc_axi_ioh) != 0) {
+	const int mapflags = _ARM_BUS_SPACE_MAP_STRONGLY_ORDERED;
+	if (bus_space_map(sc->sc_iot, sc->sc_apb_addr, sc->sc_apb_size, mapflags, &sc->sc_ioh) != 0 ||
+	    bus_space_map(sc->sc_iot, sc->sc_axi_addr, sc->sc_axi_size, mapflags, &sc->sc_axi_ioh) != 0) {
 		printf(": can't map registers\n");
 		sc->sc_axi_size = 0;
 		sc->sc_apb_size = 0;

Reply via email to