Module Name:    src
Committed By:   jmcneill
Date:           Wed Jun 19 13:39:18 UTC 2019

Modified Files:
        src/sys/arch/arm/acpi: acpi_platform.c acpipchb.c
        src/sys/arch/arm/fdt: acpi_fdt.c

Log Message:
Provide a 64-bit dma tag and use a coherent tag unless CCA=0


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/acpi/acpi_platform.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/acpi/acpipchb.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/fdt/acpi_fdt.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/arm/acpi/acpi_platform.c
diff -u src/sys/arch/arm/acpi/acpi_platform.c:1.12 src/sys/arch/arm/acpi/acpi_platform.c:1.13
--- src/sys/arch/arm/acpi/acpi_platform.c:1.12	Thu May 23 15:54:28 2019
+++ src/sys/arch/arm/acpi/acpi_platform.c	Wed Jun 19 13:39:18 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_platform.c,v 1.12 2019/05/23 15:54:28 ryo Exp $ */
+/* $NetBSD: acpi_platform.c,v 1.13 2019/06/19 13:39:18 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_platform.c,v 1.12 2019/05/23 15:54:28 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_platform.c,v 1.13 2019/06/19 13:39:18 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -94,6 +94,26 @@ extern struct bus_space arm_generic_a4x_
 static struct plcom_instance plcom_console;
 #endif
 
+struct arm32_bus_dma_tag acpi_coherent32_dma_tag;
+static struct arm32_dma_range acpi_coherent32_ranges[] = {
+	[0] = {
+		.dr_sysbase = 0,
+		.dr_busbase = 0,
+		.dr_len = 0xffffffffU,
+	  	.dr_flags = _BUS_DMAMAP_COHERENT,
+	}
+};
+
+struct arm32_bus_dma_tag acpi_coherent64_dma_tag;
+static struct arm32_dma_range acpi_coherent64_ranges[] = {
+	[0] = {
+		.dr_sysbase = 0,
+		.dr_busbase = 0,
+		.dr_len = UINTPTR_MAX,
+	 	.dr_flags = _BUS_DMAMAP_COHERENT,
+	}
+};
+
 static const struct pmap_devmap *
 acpi_platform_devmap(void)
 {
@@ -107,6 +127,15 @@ acpi_platform_devmap(void)
 static void
 acpi_platform_bootstrap(void)
 {
+	extern struct arm32_bus_dma_tag arm_generic_dma_tag;
+
+	acpi_coherent32_dma_tag = arm_generic_dma_tag;
+	acpi_coherent32_dma_tag._ranges = acpi_coherent32_ranges;
+	acpi_coherent32_dma_tag._nranges = __arraycount(acpi_coherent32_ranges);
+
+	acpi_coherent64_dma_tag = arm_generic_dma_tag;
+	acpi_coherent64_dma_tag._ranges = acpi_coherent64_ranges;
+	acpi_coherent64_dma_tag._nranges = __arraycount(acpi_coherent64_ranges);
 }
 
 static void
@@ -222,13 +251,12 @@ acpi_platform_startup(void)
 static void
 acpi_platform_init_attach_args(struct fdt_attach_args *faa)
 {
-	extern struct arm32_bus_dma_tag arm_generic_dma_tag;
 	extern struct bus_space arm_generic_bs_tag;
 	extern struct bus_space arm_generic_a4x_bs_tag;
 
 	faa->faa_bst = &arm_generic_bs_tag;
 	faa->faa_a4x_bst = &arm_generic_a4x_bs_tag;
-	faa->faa_dmat = &arm_generic_dma_tag;
+	faa->faa_dmat = &acpi_coherent64_dma_tag;
 }
 
 static void

Index: src/sys/arch/arm/acpi/acpipchb.c
diff -u src/sys/arch/arm/acpi/acpipchb.c:1.7 src/sys/arch/arm/acpi/acpipchb.c:1.8
--- src/sys/arch/arm/acpi/acpipchb.c:1.7	Mon Nov 19 10:45:47 2018
+++ src/sys/arch/arm/acpi/acpipchb.c	Wed Jun 19 13:39:18 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: acpipchb.c,v 1.7 2018/11/19 10:45:47 jmcneill Exp $ */
+/* $NetBSD: acpipchb.c,v 1.8 2019/06/19 13:39:18 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.7 2018/11/19 10:45:47 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpipchb.c,v 1.8 2019/06/19 13:39:18 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -82,15 +82,6 @@ struct acpipchb_softc {
 	struct acpipchb_bus_space sc_pciio_bst;
 };
 
-static struct arm32_dma_range ahcipchb_coherent_ranges[] = {
-	[0] = {
-		.dr_sysbase = 0,
-		.dr_busbase = 0,
-		.dr_len = UINTPTR_MAX,
-		.dr_flags = _BUS_DMAMAP_COHERENT,
-	}
-};
-
 static int	acpipchb_match(device_t, cfdata_t, void *);
 static void	acpipchb_attach(device_t, device_t, void *);
 
@@ -133,16 +124,14 @@ acpipchb_attach(device_t parent, device_
 		seg = 0;
 
 	if (ACPI_FAILURE(acpi_eval_integer(sc->sc_handle, "_CCA", &cca)))
-		cca = 0;
+		cca = 1;
 
 	aprint_naive("\n");
 	aprint_normal(": PCI Express Host Bridge\n");
 
 	sc->sc_dmat = *aa->aa_dmat;
-	if (cca) {
-		sc->sc_dmat._ranges = ahcipchb_coherent_ranges;
-		sc->sc_dmat._nranges = __arraycount(ahcipchb_coherent_ranges);
-	}
+	if (cca == 0)
+		sc->sc_dmat._nranges = 0;
 
 	sc->sc_ap.ap_pc = *aa->aa_pc;
 	sc->sc_ap.ap_pc.pc_conf_v = &sc->sc_ap;

Index: src/sys/arch/arm/fdt/acpi_fdt.c
diff -u src/sys/arch/arm/fdt/acpi_fdt.c:1.9 src/sys/arch/arm/fdt/acpi_fdt.c:1.10
--- src/sys/arch/arm/fdt/acpi_fdt.c:1.9	Mon Nov 12 12:56:05 2018
+++ src/sys/arch/arm/fdt/acpi_fdt.c	Wed Jun 19 13:39:18 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_fdt.c,v 1.9 2018/11/12 12:56:05 jmcneill Exp $ */
+/* $NetBSD: acpi_fdt.c,v 1.10 2019/06/19 13:39:18 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2015-2017 Jared McNeill <jmcne...@invisible.ca>
@@ -30,7 +30,7 @@
 #include "opt_efi.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_fdt.c,v 1.9 2018/11/12 12:56:05 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_fdt.c,v 1.10 2019/06/19 13:39:18 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -70,6 +70,9 @@ static int	acpi_fdt_efi_rtc_settime(todr
 
 static void	acpi_fdt_sysctl_init(void);
 
+extern struct arm32_bus_dma_tag acpi_coherent32_dma_tag;
+extern struct arm32_bus_dma_tag acpi_coherent64_dma_tag;
+
 #if NPCI > 0
 static struct acpi_pci_context acpi_fdt_pci_context;
 #endif
@@ -134,9 +137,9 @@ acpi_fdt_attach(device_t parent, device_
 #endif
 
 	aa.aa_memt = faa->faa_bst;
-	aa.aa_dmat = faa->faa_dmat;
+	aa.aa_dmat = &acpi_coherent32_dma_tag;
 #ifdef _PCI_HAVE_DMA64
-	aa.aa_dmat64 = faa->faa_dmat;
+	aa.aa_dmat64 = &acpi_coherent64_dma_tag;
 #endif
 	config_found_ia(self, "acpibus", &aa, 0);
 

Reply via email to