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);