CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sun Aug 8 18:55:12 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: bcm2835_com_acpi.c Log Message: Adjust register base and size To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2835_com_acpi.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/broadcom/bcm2835_com_acpi.c diff -u src/sys/arch/arm/broadcom/bcm2835_com_acpi.c:1.1 src/sys/arch/arm/broadcom/bcm2835_com_acpi.c:1.2 --- src/sys/arch/arm/broadcom/bcm2835_com_acpi.c:1.1 Sun Aug 8 18:43:21 2021 +++ src/sys/arch/arm/broadcom/bcm2835_com_acpi.c Sun Aug 8 18:55:12 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_com_acpi.c,v 1.1 2021/08/08 18:43:21 jmcneill Exp $ */ +/* $NetBSD: bcm2835_com_acpi.c,v 1.2 2021/08/08 18:55:12 jmcneill Exp $ */ /* * Copyright (c) 2021 Jared McNeill @@ -26,7 +26,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_com_acpi.c,v 1.1 2021/08/08 18:43:21 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_com_acpi.c,v 1.2 2021/08/08 18:55:12 jmcneill Exp $"); #include #include @@ -100,8 +100,8 @@ bcmcom_acpi_attach(device_t parent, devi } iot = aa->aa_memt; - base = mem->ar_base; - size = mem->ar_length; + base = mem->ar_base + 0x40; + size = mem->ar_length - 0x40; irq = acpi_res_irq(, 0); if (irq == NULL) {
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sun Aug 8 18:43:21 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: files.bcm2835 Added Files: src/sys/arch/arm/broadcom: bcm2835_com_acpi.c Log Message: broadcom: ACPI: Add support for mini UART in ACPI mode. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/broadcom/bcm2835_com_acpi.c cvs rdiff -u -r1.41 -r1.42 src/sys/arch/arm/broadcom/files.bcm2835 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/broadcom/files.bcm2835 diff -u src/sys/arch/arm/broadcom/files.bcm2835:1.41 src/sys/arch/arm/broadcom/files.bcm2835:1.42 --- src/sys/arch/arm/broadcom/files.bcm2835:1.41 Sun Aug 8 10:32:26 2021 +++ src/sys/arch/arm/broadcom/files.bcm2835 Sun Aug 8 18:43:21 2021 @@ -1,4 +1,4 @@ -# $NetBSD: files.bcm2835,v 1.41 2021/08/08 10:32:26 jmcneill Exp $ +# $NetBSD: files.bcm2835,v 1.42 2021/08/08 18:43:21 jmcneill Exp $ # # Configuration info for Broadcom BCM2835 ARM Peripherals # @@ -60,6 +60,11 @@ file arch/arm/broadcom/bcm2835_aux.c bc attach com at fdt with bcmcom file arch/arm/broadcom/bcm2835_com.c bcmcom +ifdef acpinodebus +attach com at acpinodebus with bcmcom_acpi +file arch/arm/broadcom/bcm2835_com_acpi.c bcmcom_acpi +endif + # External Mass Media Controller (BCM2835_EMMC_BASE) attach sdhc at fdt with bcmemmc file arch/arm/broadcom/bcm2835_emmc.c bcmemmc Added files: Index: src/sys/arch/arm/broadcom/bcm2835_com_acpi.c diff -u /dev/null src/sys/arch/arm/broadcom/bcm2835_com_acpi.c:1.1 --- /dev/null Sun Aug 8 18:43:21 2021 +++ src/sys/arch/arm/broadcom/bcm2835_com_acpi.c Sun Aug 8 18:43:21 2021 @@ -0,0 +1,168 @@ +/* $NetBSD: bcm2835_com_acpi.c,v 1.1 2021/08/08 18:43:21 jmcneill Exp $ */ + +/* + * Copyright (c) 2021 Jared McNeill + * 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. The name of the author may not be used to endorse or promote products + *derived from this software without specific prior written permission. + * + * 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 +__KERNEL_RCSID(0, "$NetBSD: bcm2835_com_acpi.c,v 1.1 2021/08/08 18:43:21 jmcneill Exp $"); + +#include +#include +#include +#include + +#include +#include + +#include + +#include +#include +#include + +static int bcmcom_acpi_match(device_t, cfdata_t , void *); +static void bcmcom_acpi_attach(device_t, device_t, void *); + +static u_int bcmcom_acpi_get_clockrate(device_t); + +struct vcmbox_clockrate_request { + struct vcprop_buffer_hdr vb_hdr; + struct vcprop_tag_clockrate vbt_clockrate; + struct vcprop_tag end; +} __packed; + +CFATTACH_DECL_NEW(bcmcom_acpi, sizeof(struct com_softc), bcmcom_acpi_match, +bcmcom_acpi_attach, NULL, NULL); + +static const struct device_compatible_entry compat_data[] = { + { .compat = "BCM2836", .value = COM_TYPE_BCMAUXUART }, + DEVICE_COMPAT_EOL +}; + +static int +bcmcom_acpi_match(device_t parent, cfdata_t match, void *aux) +{ + struct acpi_attach_args *aa = aux; + + return acpi_compatible_match(aa, compat_data); +} + +static void +bcmcom_acpi_attach(device_t parent, device_t self, void *aux) +{ + struct com_softc *sc = device_private(self); + struct acpi_attach_args *aa = aux; + const struct device_compatible_entry *dce; + struct acpi_resources res; + struct acpi_mem *mem; + struct acpi_irq *irq; + bus_space_tag_t iot; + bus_space_handle_t ioh; + bus_addr_t base; + bus_size_t size; + ACPI_STATUS rv; + void *ih; + + sc->sc_dev = self; + + rv = acpi_resource_parse(sc->sc_dev, aa->aa_node->ad_handle, "_CRS", + , _resource_parse_ops_default); + if (ACPI_FAILURE(rv)) { + return; + } + + mem = acpi_res_mem(, 0); + if (mem == NULL) { + aprint_error_dev(self, "couldn't find mem resource\n"); + goto cleanup; + } + + iot = aa->aa_memt; + base = mem->ar_base; + size = mem->ar_length; + + irq = acpi_res_irq(, 0); + if (irq == NULL) { + aprint_error_dev(self, "couldn't find irq resource\n"); +
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sun Aug 8 10:59:27 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: bcm2838_emmc2_acpi.c Log Message: disable DMA for now... To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2838_emmc2_acpi.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/broadcom/bcm2838_emmc2_acpi.c diff -u src/sys/arch/arm/broadcom/bcm2838_emmc2_acpi.c:1.1 src/sys/arch/arm/broadcom/bcm2838_emmc2_acpi.c:1.2 --- src/sys/arch/arm/broadcom/bcm2838_emmc2_acpi.c:1.1 Sun Aug 8 10:32:26 2021 +++ src/sys/arch/arm/broadcom/bcm2838_emmc2_acpi.c Sun Aug 8 10:59:27 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2838_emmc2_acpi.c,v 1.1 2021/08/08 10:32:26 jmcneill Exp $ */ +/* $NetBSD: bcm2838_emmc2_acpi.c,v 1.2 2021/08/08 10:59:27 jmcneill Exp $ */ /* * Copyright (c) 2021 Jared McNeill @@ -26,7 +26,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2838_emmc2_acpi.c,v 1.1 2021/08/08 10:32:26 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2838_emmc2_acpi.c,v 1.2 2021/08/08 10:59:27 jmcneill Exp $"); #include #include @@ -119,8 +119,10 @@ bcmemmc2_acpi_attach(device_t parent, de * disable UHS modes. */ sc->sc.sc_flags = SDHC_FLAG_32BIT_ACCESS | +#if notyet SDHC_FLAG_USE_DMA | SDHC_FLAG_USE_ADMA2 | +#endif SDHC_FLAG_NO_1_8_V; sc->sc_ih = acpi_intr_establish(self,
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sun Aug 8 10:32:27 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: files.bcm2835 Added Files: src/sys/arch/arm/broadcom: bcm2838_emmc2_acpi.c Log Message: bcm2838: Add ACPI support for the EMMC2 SDHCI controller. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/broadcom/bcm2838_emmc2_acpi.c cvs rdiff -u -r1.40 -r1.41 src/sys/arch/arm/broadcom/files.bcm2835 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/broadcom/files.bcm2835 diff -u src/sys/arch/arm/broadcom/files.bcm2835:1.40 src/sys/arch/arm/broadcom/files.bcm2835:1.41 --- src/sys/arch/arm/broadcom/files.bcm2835:1.40 Wed Mar 10 11:03:48 2021 +++ src/sys/arch/arm/broadcom/files.bcm2835 Sun Aug 8 10:32:26 2021 @@ -1,4 +1,4 @@ -# $NetBSD: files.bcm2835,v 1.40 2021/03/10 11:03:48 mlelstv Exp $ +# $NetBSD: files.bcm2835,v 1.41 2021/08/08 10:32:26 jmcneill Exp $ # # Configuration info for Broadcom BCM2835 ARM Peripherals # @@ -67,6 +67,8 @@ file arch/arm/broadcom/bcm2835_emmc.c bc ifdef acpinodebus attach sdhc at acpinodebus with bcmemmc_acpi file arch/arm/broadcom/bcm2835_emmc_acpi.c bcmemmc_acpi +attach sdhc at acpinodebus with bcmemmc2_acpi +file arch/arm/broadcom/bcm2838_emmc2_acpi.c bcmemmc2_acpi endif # SD Host Controller (BCM2835_SDHOST_BASE) Added files: Index: src/sys/arch/arm/broadcom/bcm2838_emmc2_acpi.c diff -u /dev/null src/sys/arch/arm/broadcom/bcm2838_emmc2_acpi.c:1.1 --- /dev/null Sun Aug 8 10:32:27 2021 +++ src/sys/arch/arm/broadcom/bcm2838_emmc2_acpi.c Sun Aug 8 10:32:26 2021 @@ -0,0 +1,164 @@ +/* $NetBSD: bcm2838_emmc2_acpi.c,v 1.1 2021/08/08 10:32:26 jmcneill Exp $ */ + +/* + * Copyright (c) 2021 Jared McNeill + * 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. The name of the author may not be used to endorse or promote products + *derived from this software without specific prior written permission. + * + * 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 +__KERNEL_RCSID(0, "$NetBSD: bcm2838_emmc2_acpi.c,v 1.1 2021/08/08 10:32:26 jmcneill Exp $"); + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#define _COMPONENT ACPI_RESOURCE_COMPONENT +ACPI_MODULE_NAME ("bcmemmc2_acpi") + +static int bcmemmc2_acpi_match(device_t, cfdata_t, void *); +static void bcmemmc2_acpi_attach(device_t, device_t, void *); +static void bcmemmc2_acpi_attach1(device_t); + +static const char * const compatible[] = { + "BRCME88C", + NULL +}; + +struct bcmemmc2_acpi_softc { + struct sdhc_softc sc; + bus_space_tag_t sc_memt; + bus_space_handle_t sc_memh; + bus_size_t sc_memsize; + void *sc_ih; + struct sdhc_host *sc_hosts[1]; +}; + +CFATTACH_DECL_NEW(bcmemmc2_acpi, sizeof(struct bcmemmc2_acpi_softc), +bcmemmc2_acpi_match, bcmemmc2_acpi_attach, NULL, NULL); + +static int +bcmemmc2_acpi_match(device_t parent, cfdata_t match, void *opaque) +{ + struct acpi_attach_args *aa = opaque; + + if (aa->aa_node->ad_type != ACPI_TYPE_DEVICE) + return 0; + + return acpi_match_hid(aa->aa_node->ad_devinfo, compatible); +} + +static void +bcmemmc2_acpi_attach(device_t parent, device_t self, void *opaque) +{ + struct bcmemmc2_acpi_softc *sc = device_private(self); + struct acpi_attach_args *aa = opaque; + struct acpi_resources res; + struct acpi_mem *mem; + struct acpi_irq *irq; + ACPI_STATUS rv; + + sc->sc.sc_dev = self; + sc->sc.sc_dmat = aa->aa_dmat; + sc->sc.sc_host = sc->sc_hosts; + sc->sc_memt = aa->aa_memt; + + rv = acpi_resource_parse(self, aa->aa_node->ad_handle, "_CRS", + , _resource_parse_ops_default); + if (ACPI_FAILURE(rv)) + return; + + mem = acpi_res_mem(, 0); + irq = acpi_res_irq(, 0); + if (mem == NULL || irq == NULL) { + aprint_error_dev(self, "incomplete resources\n"); + goto cleanup; + } + if (mem->ar_length == 0) { + aprint_error_dev(self, "zero length memory resource\n"); + goto
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: tnn Date: Mon May 3 18:56:38 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: bcm2838_pcie.c Log Message: bcm2838_pcie: match brcm,bcm2711-pcie To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/broadcom/bcm2838_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/arm/broadcom/bcm2838_pcie.c diff -u src/sys/arch/arm/broadcom/bcm2838_pcie.c:1.2 src/sys/arch/arm/broadcom/bcm2838_pcie.c:1.3 --- src/sys/arch/arm/broadcom/bcm2838_pcie.c:1.2 Sat Apr 24 23:36:26 2021 +++ src/sys/arch/arm/broadcom/bcm2838_pcie.c Mon May 3 18:56:38 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2838_pcie.c,v 1.2 2021/04/24 23:36:26 thorpej Exp $ */ +/* $NetBSD: bcm2838_pcie.c,v 1.3 2021/05/03 18:56:38 tnn Exp $ */ /*- * Copyright (c) 2020 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2838_pcie.c,v 1.2 2021/04/24 23:36:26 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2838_pcie.c,v 1.3 2021/05/03 18:56:38 tnn Exp $"); #include #include @@ -156,6 +156,7 @@ stb_setbits(struct bcmstb_softc *sc, int static const struct device_compatible_entry compat_data[] = { { .compat = "brcm,pci-plat-dev" }, + { .compat = "brcm,bcm2711-pcie" }, DEVICE_COMPAT_EOL };
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Wed Mar 10 11:03:49 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: files.bcm2835 Log Message: Add PCIe driver to build. You still need: bcm2838pcie* at fdt?# STB PCIe host controller in kernel config, and DTB entries like: pci@7d50 { compatible = "brcm,bcm2711-pcie\0brcm,pci-plat-dev"; device_type = "pci"; #address-cells = <0x03>; #size-cells = <0x02>; bus-range = <0x00 0x01>; reg = <0x00 0x7d50 0x8>; ranges = <0x200 0x00 0xf800 0x06 0x00 0x00 0x400>; #interrupt-cells = <0x01>; interrupt-map = <0x00 0x00 0x00 0x01 0x01 0x00 0x8f 0x04>; interrupt-map-mask = <0x00 0x00 0x00 0x07>; linux,pci-domain = <0x00>; phandle = <0x90>; }; and pcie0 = "/scb/pci@7d50"; in __symbols__ To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 src/sys/arch/arm/broadcom/files.bcm2835 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/broadcom/files.bcm2835 diff -u src/sys/arch/arm/broadcom/files.bcm2835:1.39 src/sys/arch/arm/broadcom/files.bcm2835:1.40 --- src/sys/arch/arm/broadcom/files.bcm2835:1.39 Tue Mar 31 12:23:17 2020 +++ src/sys/arch/arm/broadcom/files.bcm2835 Wed Mar 10 11:03:48 2021 @@ -1,4 +1,4 @@ -# $NetBSD: files.bcm2835,v 1.39 2020/03/31 12:23:17 jmcneill Exp $ +# $NetBSD: files.bcm2835,v 1.40 2021/03/10 11:03:48 mlelstv Exp $ # # Configuration info for Broadcom BCM2835 ARM Peripherals # @@ -46,6 +46,11 @@ attach bcm2838rng at fdt with bcm2838rng file arch/arm/broadcom/bcm2838_rng.c bcm2838rng file dev/ic/rng200.cbcm2838rng +# Broadcom STB PCIE host +device bcm2838pcie: pcibus +attach bcm2838pcie at fdt with bcm2838pcie_fdt +file arch/arm/broadcom/bcm2838_pcie.c bcm2838pcie + # AUX device bcmaux attach bcmaux at fdt with bcmaux_fdt
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Mon Mar 8 14:27:46 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: bcm2835reg.h Log Message: Add comments for 2711 local peripherals To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 src/sys/arch/arm/broadcom/bcm2835reg.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/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.31 src/sys/arch/arm/broadcom/bcm2835reg.h:1.32 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.31 Mon Mar 8 14:22:42 2021 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Mon Mar 8 14:27:45 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.31 2021/03/08 14:22:42 mlelstv Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.32 2021/03/08 14:27:45 mlelstv Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -179,18 +179,18 @@ #define BCM2836_ARM_LOCAL_BASE 0x4000 #define BCM2836_ARM_LOCAL_SIZE 0x1000 /* 4KBytes */ -#define BCM2836_LOCAL_CONTROL 0x000 +#define BCM2836_LOCAL_CONTROL 0x000 /* ARM_CONTROL */ #define BCM2836_LOCAL_PRESCALER 0x008 -#define BCM2836_LOCAL_GPU_INT_ROUTING 0x00c -#define BCM2836_LOCAL_PM_ROUTING_SET 0x010 -#define BCM2836_LOCAL_PM_ROUTING_CLR 0x014 +#define BCM2836_LOCAL_GPU_INT_ROUTING 0x00c /* CORE_IRQ_CONTROL */ +#define BCM2836_LOCAL_PM_ROUTING_SET 0x010 /* PMU_CONTROL_SET */ +#define BCM2836_LOCAL_PM_ROUTING_CLR 0x014 /* PMU_CONTROL_CLR */ #define BCM2836_LOCAL_TIMER_LS 0x01c #define BCM2836_LOCAL_TIMER_MS 0x020 -#define BCM2836_LOCAL_INT_ROUTING 0x024 +#define BCM2836_LOCAL_INT_ROUTING 0x024 /* PERI_IRQ_ROUTE0 */ #define BCM2836_LOCAL_AXI_COUNT 0x02c -#define BCM2836_LOCAL_AXI_IRQ 0x030 +#define BCM2836_LOCAL_AXI_IRQ 0x030 /* AXI_QUIET_TIME */ #define BCM2836_LOCAL_TIMER_CONTROL 0x034 -#define BCM2836_LOCAL_TIMER_WRITE 0x038 +#define BCM2836_LOCAL_TIMER_WRITE 0x038 /* LOCAL_TIMER_IRQ */ #define BCM2836_LOCAL_TIMER_IRQ_CONTROL_BASE 0x40
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Mon Mar 8 14:22:42 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c bcm2835reg.h Log Message: Move interrupt register definitions to driver. To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 src/sys/arch/arm/broadcom/bcm2835_intr.c cvs rdiff -u -r1.30 -r1.31 src/sys/arch/arm/broadcom/bcm2835reg.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.37 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.38 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.37 Wed Jan 27 03:10:19 2021 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Mon Mar 8 14:22:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.37 2021/01/27 03:10:19 thorpej Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.38 2021/03/08 14:22:42 mlelstv Exp $ */ /*- * Copyright (c) 2012, 2015, 2019 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.37 2021/01/27 03:10:19 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.38 2021/03/08 14:22:42 mlelstv Exp $"); #define _INTR_PRIVATE @@ -104,6 +104,49 @@ static int bcm2836mp_int_base[BCM2836_NC #define BCM2835_INT_BASE bcm2835_int_base #define BCM2836_INT_BASECPUN(n) bcm2836mp_int_base[(n)] +#define BCM2836_INT_CNTPSIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTPSIRQ) +#define BCM2836_INT_CNTPNSIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTPNSIRQ) +#define BCM2836_INT_CNTVIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTVIRQ) +#define BCM2836_INT_CNTHPIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTHPIRQ) +#define BCM2836_INT_MAILBOX0_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_MAILBOX0) + +/* Periperal Interrupt sources */ +#define BCM2835_NIRQ 96 + +#define BCM2835_INT_GPU0BASE (BCM2835_INT_BASE + 0) +#define BCM2835_INT_TIMER0 (BCM2835_INT_GPU0BASE + 0) +#define BCM2835_INT_TIMER1 (BCM2835_INT_GPU0BASE + 1) +#define BCM2835_INT_TIMER2 (BCM2835_INT_GPU0BASE + 2) +#define BCM2835_INT_TIMER3 (BCM2835_INT_GPU0BASE + 3) +#define BCM2835_INT_USB (BCM2835_INT_GPU0BASE + 9) +#define BCM2835_INT_DMA0 (BCM2835_INT_GPU0BASE + 16) +#define BCM2835_INT_DMA2 (BCM2835_INT_GPU0BASE + 18) +#define BCM2835_INT_DMA3 (BCM2835_INT_GPU0BASE + 19) +#define BCM2835_INT_AUX (BCM2835_INT_GPU0BASE + 29) +#define BCM2835_INT_ARM (BCM2835_INT_GPU0BASE + 30) + +#define BCM2835_INT_GPU1BASE (BCM2835_INT_BASE + 32) +#define BCM2835_INT_GPIO0 (BCM2835_INT_GPU1BASE + 17) +#define BCM2835_INT_GPIO1 (BCM2835_INT_GPU1BASE + 18) +#define BCM2835_INT_GPIO2 (BCM2835_INT_GPU1BASE + 19) +#define BCM2835_INT_GPIO3 (BCM2835_INT_GPU1BASE + 20) +#define BCM2835_INT_BSC (BCM2835_INT_GPU1BASE + 21) +#define BCM2835_INT_SPI0 (BCM2835_INT_GPU1BASE + 22) +#define BCM2835_INT_PCM (BCM2835_INT_GPU1BASE + 23) +#define BCM2835_INT_SDHOST (BCM2835_INT_GPU1BASE + 24) +#define BCM2835_INT_UART0 (BCM2835_INT_GPU1BASE + 25) +#define BCM2835_INT_EMMC (BCM2835_INT_GPU1BASE + 30) + +#define BCM2835_INT_BASICBASE (BCM2835_INT_BASE + 64) +#define BCM2835_INT_ARMTIMER (BCM2835_INT_BASICBASE + 0) +#define BCM2835_INT_ARMMAILBOX (BCM2835_INT_BASICBASE + 1) +#define BCM2835_INT_ARMDOORBELL0 (BCM2835_INT_BASICBASE + 2) +#define BCM2835_INT_ARMDOORBELL1 (BCM2835_INT_BASICBASE + 3) +#define BCM2835_INT_GPU0HALTED (BCM2835_INT_BASICBASE + 4) +#define BCM2835_INT_GPU1HALTED (BCM2835_INT_BASICBASE + 5) +#define BCM2835_INT_ILLEGALTYPE0 (BCM2835_INT_BASICBASE + 6) +#define BCM2835_INT_ILLEGALTYPE1 (BCM2835_INT_BASICBASE + 7) + static void bcm2835_set_priority(struct pic_softc *pic, int ipl) { Index: src/sys/arch/arm/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.30 src/sys/arch/arm/broadcom/bcm2835reg.h:1.31 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.30 Sat Feb 22 00:17:54 2020 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Mon Mar 8 14:22:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.30 2020/02/22 00:17:54 jmcneill Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.31 2021/03/08 14:22:42 mlelstv Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -165,50 +165,6 @@ #define BCM2836_INT_TIMER 11 #define BCM2836_INT_NLOCAL 12 -#define BCM2836_INT_CNTPSIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTPSIRQ) -#define BCM2836_INT_CNTPNSIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTPNSIRQ) -#define BCM2836_INT_CNTVIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTVIRQ) -#define BCM2836_INT_CNTHPIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTHPIRQ) -#define BCM2836_INT_MAILBOX0_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_MAILBOX0) - -/* Periperal Interrupt sources */ -#define BCM2835_NIRQ 96 - -#define BCM2835_INT_GPU0BASE (BCM2835_INT_BASE + 0) -#define BCM2835_INT_TIMER0 (BCM2835_INT_GPU0BASE + 0)
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Mon Mar 8 13:59:29 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: bcm2835_gpioreg.h Log Message: Undocumented register to multiplex emmc2 pins to legacy sdhc To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/broadcom/bcm2835_gpioreg.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/broadcom/bcm2835_gpioreg.h diff -u src/sys/arch/arm/broadcom/bcm2835_gpioreg.h:1.5 src/sys/arch/arm/broadcom/bcm2835_gpioreg.h:1.6 --- src/sys/arch/arm/broadcom/bcm2835_gpioreg.h:1.5 Sat Sep 28 07:24:52 2019 +++ src/sys/arch/arm/broadcom/bcm2835_gpioreg.h Mon Mar 8 13:59:29 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_gpioreg.h,v 1.5 2019/09/28 07:24:52 mlelstv Exp $ */ +/* $NetBSD: bcm2835_gpioreg.h,v 1.6 2021/03/08 13:59:29 mlelstv Exp $ */ /* * Copyright (c) 2013 Jonathan A. Kollasch @@ -73,4 +73,8 @@ #define BCM2835_GPIO_ALT2 6 #define BCM2835_GPIO_ALT3 7 +/* Undocumented register to multiplex emmc2 pins to legacy sdhc */ +#define BCM2838_GPIO_MUX 0x0d0 +#define BCM2838_GPIO_MUX_LEGACY 0x2 + #endif /* _BROADCOM_BCM2835_GPIOREG_H_ */
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Mon Mar 8 13:49:02 UTC 2021 Added Files: src/sys/arch/arm/broadcom: bcm2838_pcie.c bcm2838_pcie.h Log Message: RPI4 PCIe driver, based on pcihost_fdt.c To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/broadcom/bcm2838_pcie.c \ src/sys/arch/arm/broadcom/bcm2838_pcie.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/sys/arch/arm/broadcom/bcm2838_pcie.c diff -u /dev/null src/sys/arch/arm/broadcom/bcm2838_pcie.c:1.1 --- /dev/null Mon Mar 8 13:49:02 2021 +++ src/sys/arch/arm/broadcom/bcm2838_pcie.c Mon Mar 8 13:49:01 2021 @@ -0,0 +1,872 @@ +/* $NetBSD: bcm2838_pcie.c,v 1.1 2021/03/08 13:49:01 mlelstv Exp $ */ + +/*- + * Copyright (c) 2020 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Michael van Elst + * + * 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 +__KERNEL_RCSID(0, "$NetBSD: bcm2838_pcie.c,v 1.1 2021/03/08 13:49:01 mlelstv Exp $"); + +#include +#include + +#include +#include +#include + +#include + +#include +#include + +#include +#include + +#define PHYS_HI_RELO __BIT(31) +#define PHYS_HI_PREFETCH __BIT(30) +#define PHYS_HI_ALIASED __BIT(29) +#define PHYS_HI_SPACE __BITS(25,24) +#define PHYS_HI_SPACE_CFG 0 +#define PHYS_HI_SPACE_IO 1 +#define PHYS_HI_SPACE_MEM32 2 +#define PHYS_HI_SPACE_MEM64 3 + +#define CFG_OFFSET(b,d,f,r) ((b) << 16 | (d) << 1 | (f) << 8 | (r)) + +struct bcmstb_busspace { + struct bus_space bst; + int (*map)(void *, bus_addr_t, bus_size_t, +int, bus_space_handle_t *); + int flags; + struct { + bus_addr_t bpci; + bus_addr_t bbus; + bus_size_t size; + } ranges[4]; + size_t nranges; +}; + +struct bcmstb_softc { +bus_space_tag_t sc_bst; +bus_space_handle_t sc_bsh; + bus_dma_tag_t sc_dmat; + +kmutex_tsc_lock; +const char *sc_name; + + int sc_phandle; + + uint32_t sc_bus_min; + uint32_t sc_bus_max; + + struct arm32_pci_chipset sc_pc; + + struct bcmstb_busspace sc_io; + struct bcmstb_busspace sc_mem; + + int sc_pci_flags; +}; + +static void bcmstb_attach(device_t, struct bcmstb_softc *); +static int bcmstb_config(struct bcmstb_softc *); +static int bcmstb_setup(struct bcmstb_softc *); +static void bcmstb_attach_hook(device_t, device_t, struct pcibus_attach_args *); +static int bcmstb_bus_maxdevs(void *, int); +static pcitag_t bcmstb_make_tag(void *, int, int, int); +static void bcmstb_decompose_tag(void *, pcitag_t, int *, int *, int *); +static u_int bcmstb_get_segment(void *); +static pcireg_t bcmstb_conf_read(void *, pcitag_t, int); +static void bcmstb_conf_write(void *, pcitag_t, int, pcireg_t); +static int bcmstb_conf_hook(void *, int, int, int, pcireg_t); +static void bcmstb_conf_interrupt(void *, int, int, int, int, int *); + +static int bcmstb_intr_map(const struct pci_attach_args *, pci_intr_handle_t *); +static const char *bcmstb_intr_string(void *, pci_intr_handle_t, char *, size_t); +static const struct evcnt *bcmstb_intr_evcnt(void *, pci_intr_handle_t); +static int bcmstb_intr_setattr(void *, pci_intr_handle_t *, int, uint64_t); +static void *bcmstb_intr_establish(void *, pci_intr_handle_t, int, +int (*)(void *), void *, const char *); +static void bcmstb_intr_disestablish(void *, void *); +static int bcmstb_bus_space_map(void *, bus_addr_t, +bus_size_t, int, bus_space_handle_t *); + +struct bcm2838pcie_softc { + device_t sc_dev; + struct bcmstb_softc sc_bcmstb; +}; + +static int
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Fri Jan 29 14:11:14 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: bcm2835_bsc_fdt.c bcm2835_com.c bcm2835_dmac.c bcm2835_dwctwo.c bcm2835_emmc.c bcm2835_gpio.c bcm2835_mbox_fdt.c bcm2835_sdhost.c bcm2835_spi.c bcm2835_tmr.c Log Message: fdtbus_intr_establish -> fdtbus_intr_establish_xname To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/broadcom/bcm2835_com.c \ src/sys/arch/arm/broadcom/bcm2835_sdhost.c cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/broadcom/bcm2835_dmac.c \ src/sys/arch/arm/broadcom/bcm2835_gpio.c cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/broadcom/bcm2835_dwctwo.c cvs rdiff -u -r1.42 -r1.43 src/sys/arch/arm/broadcom/bcm2835_emmc.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/broadcom/bcm2835_mbox_fdt.c cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/broadcom/bcm2835_spi.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/broadcom/bcm2835_tmr.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/broadcom/bcm2835_bsc_fdt.c diff -u src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c:1.5 src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c:1.6 --- src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c:1.5 Wed Jan 27 03:10:19 2021 +++ src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c Fri Jan 29 14:11:14 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_bsc_fdt.c,v 1.5 2021/01/27 03:10:19 thorpej Exp $ */ +/* $NetBSD: bcm2835_bsc_fdt.c,v 1.6 2021/01/29 14:11:14 skrll Exp $ */ /* * Copyright (c) 2019 Jason R. Thorpe @@ -28,7 +28,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc_fdt.c,v 1.5 2021/01/27 03:10:19 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc_fdt.c,v 1.6 2021/01/29 14:11:14 skrll Exp $"); #include #include @@ -118,8 +118,8 @@ bsciic_fdt_attach(device_t parent, devic aprint_error_dev(sc->sc_dev, "failed to decode interrupt\n"); return; } - sc->sc_inth = fdtbus_intr_establish(phandle, 0, IPL_VM, - FDT_INTR_MPSAFE, bsciic_intr, sc); + sc->sc_inth = fdtbus_intr_establish_xname(phandle, 0, IPL_VM, + FDT_INTR_MPSAFE, bsciic_intr, sc, device_xname(sc->sc_dev)); if (sc->sc_inth == NULL) { aprint_error_dev(sc->sc_dev, "failed to establish interrupt %s\n", intrstr); Index: src/sys/arch/arm/broadcom/bcm2835_com.c diff -u src/sys/arch/arm/broadcom/bcm2835_com.c:1.7 src/sys/arch/arm/broadcom/bcm2835_com.c:1.8 --- src/sys/arch/arm/broadcom/bcm2835_com.c:1.7 Wed Jan 27 03:10:19 2021 +++ src/sys/arch/arm/broadcom/bcm2835_com.c Fri Jan 29 14:11:14 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_com.c,v 1.7 2021/01/27 03:10:19 thorpej Exp $ */ +/* $NetBSD: bcm2835_com.c,v 1.8 2021/01/29 14:11:14 skrll Exp $ */ /*- * Copyright (c) 2017 Jared McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_com.c,v 1.7 2021/01/27 03:10:19 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_com.c,v 1.8 2021/01/29 14:11:14 skrll Exp $"); #include #include @@ -116,8 +116,8 @@ bcm_com_attach(device_t parent, device_t return; } - ih = fdtbus_intr_establish(phandle, 0, IPL_SERIAL, FDT_INTR_MPSAFE, - comintr, sc); + ih = fdtbus_intr_establish_xname(phandle, 0, IPL_SERIAL, FDT_INTR_MPSAFE, + comintr, sc, device_xname(sc->sc_dev)); if (ih == NULL) { aprint_error_dev(self, "failed to establish interrupt %s\n", intrstr); Index: src/sys/arch/arm/broadcom/bcm2835_sdhost.c diff -u src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.7 src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.8 --- src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.7 Wed Jan 27 03:10:19 2021 +++ src/sys/arch/arm/broadcom/bcm2835_sdhost.c Fri Jan 29 14:11:14 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_sdhost.c,v 1.7 2021/01/27 03:10:19 thorpej Exp $ */ +/* $NetBSD: bcm2835_sdhost.c,v 1.8 2021/01/29 14:11:14 skrll Exp $ */ /*- * Copyright (c) 2017 Jared McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.7 2021/01/27 03:10:19 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.8 2021/01/29 14:11:14 skrll Exp $"); #include "bcmdmac.h" @@ -243,8 +243,8 @@ sdhost_attach(device_t parent, device_t return; } - sc->sc_ih = fdtbus_intr_establish(phandle, 0, IPL_SDMMC, - FDT_INTR_MPSAFE, sdhost_intr, sc); + sc->sc_ih = fdtbus_intr_establish_xname(phandle, 0, IPL_SDMMC, + FDT_INTR_MPSAFE, sdhost_intr, sc, device_xname(self)); if (sc->sc_ih == NULL) { aprint_error_dev(self, "failed to establish interrupt %s\n", intrstr); Index: src/sys/arch/arm/broadcom/bcm2835_dmac.c diff -u src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.18 src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.19 --- src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.18 Wed Jan 27 03:10:19 2021 +++ src/sys/arch/arm/broadcom/bcm2835_dmac.c Fri Jan 29 14:11:14 2021 @@ -1,4 +1,4
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: nia Date: Wed Jan 27 12:06:10 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: bcm2835_vcaudio.c Log Message: vcaudio: Do not report recording mode in hardware format To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/broadcom/bcm2835_vcaudio.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/broadcom/bcm2835_vcaudio.c diff -u src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.16 src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.17 --- src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.16 Sat Jan 23 12:53:46 2021 +++ src/sys/arch/arm/broadcom/bcm2835_vcaudio.c Wed Jan 27 12:06:10 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_vcaudio.c,v 1.16 2021/01/23 12:53:46 nia Exp $ */ +/* $NetBSD: bcm2835_vcaudio.c,v 1.17 2021/01/27 12:06:10 nia Exp $ */ /*- * Copyright (c) 2013 Jared D. McNeill @@ -31,7 +31,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.16 2021/01/23 12:53:46 nia Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.17 2021/01/27 12:06:10 nia Exp $"); #include #include @@ -270,7 +270,7 @@ vcaudio_init(struct vcaudio_softc *sc) sc->sc_hwvol[VCAUDIO_DEST_HDMI] = 255; sc->sc_dest = VCAUDIO_DEST_AUTO; - sc->sc_format.mode = AUMODE_PLAY|AUMODE_RECORD; + sc->sc_format.mode = AUMODE_PLAY; sc->sc_format.encoding = AUDIO_ENCODING_SLINEAR_LE; sc->sc_format.validbits = 16; sc->sc_format.precision = 16;
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: nia Date: Sat Jan 23 12:53:46 UTC 2021 Modified Files: src/sys/arch/arm/broadcom: bcm2835_vcaudio.c Log Message: vcaudio: don't advertise CAPTURE when all functions return EINVAL To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/broadcom/bcm2835_vcaudio.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/broadcom/bcm2835_vcaudio.c diff -u src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.15 src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.16 --- src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.15 Wed Jan 22 21:21:24 2020 +++ src/sys/arch/arm/broadcom/bcm2835_vcaudio.c Sat Jan 23 12:53:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_vcaudio.c,v 1.15 2020/01/22 21:21:24 mlelstv Exp $ */ +/* $NetBSD: bcm2835_vcaudio.c,v 1.16 2021/01/23 12:53:46 nia Exp $ */ /*- * Copyright (c) 2013 Jared D. McNeill @@ -31,7 +31,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.15 2020/01/22 21:21:24 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.16 2021/01/23 12:53:46 nia Exp $"); #include #include @@ -159,7 +159,6 @@ static int vcaudio_set_format(void *, in const audio_params_t *, const audio_params_t *, audio_filter_reg_t *, audio_filter_reg_t *); static int vcaudio_halt_output(void *); -static int vcaudio_halt_input(void *); static int vcaudio_set_port(void *, mixer_ctrl_t *); static int vcaudio_get_port(void *, mixer_ctrl_t *); static int vcaudio_query_devinfo(void *, mixer_devinfo_t *); @@ -171,8 +170,6 @@ static int vcaudio_round_blocksize(void static int vcaudio_trigger_output(void *, void *, void *, int, void (*)(void *), void *, const audio_params_t *); -static int vcaudio_trigger_input(void *, void *, void *, int, -void (*)(void *), void *, const audio_params_t *); static void vcaudio_get_locks(void *, kmutex_t **, kmutex_t **); @@ -182,7 +179,6 @@ static const struct audio_hw_if vcaudio_ .query_format = vcaudio_query_format, .set_format = vcaudio_set_format, .halt_output = vcaudio_halt_output, - .halt_input = vcaudio_halt_input, .getdev = vcaudio_getdev, .set_port = vcaudio_set_port, .get_port = vcaudio_get_port, @@ -190,7 +186,6 @@ static const struct audio_hw_if vcaudio_ .get_props = vcaudio_get_props, .round_blocksize = vcaudio_round_blocksize, .trigger_output = vcaudio_trigger_output, - .trigger_input = vcaudio_trigger_input, .get_locks = vcaudio_get_locks, }; @@ -612,12 +607,6 @@ vcaudio_halt_output(void *priv) } static int -vcaudio_halt_input(void *priv) -{ - return EINVAL; -} - -static int vcaudio_set_volume(struct vcaudio_softc *sc, enum vcaudio_dest dest, int hwvol) { @@ -802,7 +791,7 @@ vcaudio_getdev(void *priv, struct audio_ static int vcaudio_get_props(void *priv) { - return AUDIO_PROP_PLAYBACK|AUDIO_PROP_CAPTURE|AUDIO_PROP_INDEPENDENT; + return AUDIO_PROP_PLAYBACK; } static int @@ -837,13 +826,6 @@ vcaudio_trigger_output(void *priv, void return 0; } -static int -vcaudio_trigger_input(void *priv, void *start, void *end, int blksize, -void (*intr)(void *), void *intrarg, const audio_params_t *params) -{ - return EINVAL; -} - static void vcaudio_get_locks(void *priv, kmutex_t **intr, kmutex_t **thread) {
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: thorpej Date: Wed Dec 23 02:56:11 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_bsc_fdt.c Log Message: Add missing call to fdtbus_register_i2c_controller(). This doesn't affect basic child attachment, but would have broken other references to the i2c controller in DT overlays. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/broadcom/bcm2835_bsc_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/broadcom/bcm2835_bsc_fdt.c diff -u src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c:1.2 src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c:1.3 --- src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c:1.2 Sun May 31 23:52:19 2020 +++ src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c Wed Dec 23 02:56:11 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_bsc_fdt.c,v 1.2 2020/05/31 23:52:19 thorpej Exp $ */ +/* $NetBSD: bcm2835_bsc_fdt.c,v 1.3 2020/12/23 02:56:11 thorpej Exp $ */ /* * Copyright (c) 2019 Jason R. Thorpe @@ -28,7 +28,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc_fdt.c,v 1.2 2020/05/31 23:52:19 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc_fdt.c,v 1.3 2020/12/23 02:56:11 thorpej Exp $"); #include #include @@ -46,6 +46,18 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc_ #include +static i2c_tag_t +bsciic_fdt_get_tag(device_t dev) +{ + struct bsciic_softc * const sc = device_private(dev); + + return >sc_i2c; +} + +static const struct fdtbus_i2c_controller_func bsciic_fdt_funcs = { + .get_tag = bsciic_fdt_get_tag, +}; + static int bsciic_fdt_match(device_t, cfdata_t, void *); static void bsciic_fdt_attach(device_t, device_t, void *); @@ -129,5 +141,7 @@ bsciic_fdt_attach(device_t parent, devic sc->sc_i2c.ic_release_bus = bsciic_release_bus; sc->sc_i2c.ic_exec = bsciic_exec; + fdtbus_register_i2c_controller(self, phandle, _fdt_funcs); + fdtbus_attach_i2cbus(self, phandle, >sc_i2c, iicbus_print); }
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: rin Date: Tue Dec 1 04:17:10 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_genfb.c Log Message: bcm2835-fb seems byte-swapped to CPU when running in big-endian mode. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/broadcom/bcm2835_genfb.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/broadcom/bcm2835_genfb.c diff -u src/sys/arch/arm/broadcom/bcm2835_genfb.c:1.10 src/sys/arch/arm/broadcom/bcm2835_genfb.c:1.11 --- src/sys/arch/arm/broadcom/bcm2835_genfb.c:1.10 Mon Nov 23 06:46:38 2020 +++ src/sys/arch/arm/broadcom/bcm2835_genfb.c Tue Dec 1 04:17:10 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_genfb.c,v 1.10 2020/11/23 06:46:38 rin Exp $ */ +/* $NetBSD: bcm2835_genfb.c,v 1.11 2020/12/01 04:17:10 rin Exp $ */ /*- * Copyright (c) 2013 Jared D. McNeill @@ -31,13 +31,14 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_genfb.c,v 1.10 2020/11/23 06:46:38 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_genfb.c,v 1.11 2020/12/01 04:17:10 rin Exp $"); #include #include #include #include #include +#include #include #include @@ -96,6 +97,9 @@ bcmgenfb_attach(device_t parent, device_ sc->sc_wstype = WSDISPLAY_TYPE_VC4; prop_dictionary_get_uint32(dict, "wsdisplay_type", >sc_wstype); prop_dictionary_get_bool(dict, "is_console", _console); +#if BYTE_ORDER == BIG_ENDIAN + prop_dictionary_set_bool(dict, "is_swapped", true); +#endif genfb_init(>sc_gen);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: rin Date: Tue Dec 1 04:16:18 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Data written to and read from bcm283x UART registers should be in little-endian. To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.44 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.45 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.44 Tue Dec 1 04:14:31 2020 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Tue Dec 1 04:16:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.44 2020/12/01 04:14:31 rin Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.45 2020/12/01 04:16:18 rin Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.44 2020/12/01 04:14:31 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.45 2020/12/01 04:16:18 rin Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -1347,12 +1347,12 @@ bcm283x_platform_early_putchar(vaddr_t v (volatile uint32_t *)va : (volatile uint32_t *)pa; - while ((uartaddr[PL01XCOM_FR / 4] & PL01X_FR_TXFF) != 0) + while ((le32toh(uartaddr[PL01XCOM_FR / 4]) & PL01X_FR_TXFF) != 0) continue; - uartaddr[PL01XCOM_DR / 4] = c; + uartaddr[PL01XCOM_DR / 4] = htole32(c); - while ((uartaddr[PL01XCOM_FR / 4] & PL01X_FR_TXFE) == 0) + while ((le32toh(uartaddr[PL01XCOM_FR / 4]) & PL01X_FR_TXFE) == 0) continue; } @@ -1364,10 +1364,10 @@ bcm283x_aux_platform_early_putchar(vaddr (volatile uint32_t *)va : (volatile uint32_t *)pa; - while ((uartaddr[com_lsr] & LSR_TXRDY) == 0) + while ((le32toh(uartaddr[com_lsr]) & LSR_TXRDY) == 0) continue; - uartaddr[com_data] = c; + uartaddr[com_data] = htole32(c); } void __noasan
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: rin Date: Tue Dec 1 04:15:04 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_dmac.h bcm2835_emmc.c bcm2835_sdhost.c Log Message: Data written to bcmdmac(4) should be in little-endian. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/broadcom/bcm2835_dmac.h cvs rdiff -u -r1.38 -r1.39 src/sys/arch/arm/broadcom/bcm2835_emmc.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/broadcom/bcm2835_sdhost.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/broadcom/bcm2835_dmac.h diff -u src/sys/arch/arm/broadcom/bcm2835_dmac.h:1.4 src/sys/arch/arm/broadcom/bcm2835_dmac.h:1.5 --- src/sys/arch/arm/broadcom/bcm2835_dmac.h:1.4 Sun Aug 9 13:06:44 2015 +++ src/sys/arch/arm/broadcom/bcm2835_dmac.h Tue Dec 1 04:15:04 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_dmac.h,v 1.4 2015/08/09 13:06:44 mlelstv Exp $ */ +/* $NetBSD: bcm2835_dmac.h,v 1.5 2020/12/01 04:15:04 rin Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill @@ -29,6 +29,8 @@ #ifndef BCM2835_DMAC_H #define BCM2835_DMAC_H +#include + #define DMAC_CS(n) (0x00 + (0x100 * (n))) #define DMAC_CS_RESET __BIT(31) #define DMAC_CS_ABORT __BIT(30) @@ -62,6 +64,9 @@ #define DMAC_DEBUG_FIFO_ERROR __BIT(1) #define DMAC_DEBUG_READ_LAST_NOT_SET_ERROR __BIT(0) +/* + * Byte-order is little endain. + */ struct bcm_dmac_conblk { uint32_t cb_ti; #define DMAC_TI_NO_WIDE_BURSTS __BIT(26) @@ -108,5 +113,16 @@ void bcm_dmac_set_conblk_addr(struct bcm int bcm_dmac_transfer(struct bcm_dmac_channel *); void bcm_dmac_halt(struct bcm_dmac_channel *); +static inline void +bcm_dmac_swap_conblk(struct bcm_dmac_conblk *conblk) +{ + + HTOLE32(conblk->cb_ti); + HTOLE32(conblk->cb_source_ad); + HTOLE32(conblk->cb_dest_ad); + HTOLE32(conblk->cb_txfr_len); + HTOLE32(conblk->cb_stride); + HTOLE32(conblk->cb_nextconbk); +} #endif /* !BCM2835_DMAC_H */ Index: src/sys/arch/arm/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.38 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.39 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.38 Fri Aug 28 13:13:55 2020 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Tue Dec 1 04:15:04 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.38 2020/08/28 13:13:55 skrll Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.39 2020/12/01 04:15:04 rin Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.38 2020/08/28 13:13:55 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.39 2020/12/01 04:15:04 rin Exp $"); #include "bcmdmac.h" @@ -327,6 +327,7 @@ bcmemmc_xfer_data_dma(struct sdhc_softc sc->sc_dmamap->dm_segs[0].ds_addr + sizeof(struct bcm_dmac_conblk) * (seg+1); } + bcm_dmac_swap_conblk(>sc_cblk[seg]); sc->sc_cblk[seg].cb_padding[0] = 0; sc->sc_cblk[seg].cb_padding[1] = 0; } Index: src/sys/arch/arm/broadcom/bcm2835_sdhost.c diff -u src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.5 src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.6 --- src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.5 Sun May 31 23:52:19 2020 +++ src/sys/arch/arm/broadcom/bcm2835_sdhost.c Tue Dec 1 04:15:04 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_sdhost.c,v 1.5 2020/05/31 23:52:19 thorpej Exp $ */ +/* $NetBSD: bcm2835_sdhost.c,v 1.6 2020/12/01 04:15:04 rin Exp $ */ /*- * Copyright (c) 2017 Jared McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.5 2020/05/31 23:52:19 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.6 2020/12/01 04:15:04 rin Exp $"); #include "bcmdmac.h" @@ -397,6 +397,7 @@ sdhost_dma_transfer(struct sdhost_softc sc->sc_dmamap->dm_segs[0].ds_addr + sizeof(struct bcm_dmac_conblk) * (seg+1); } + bcm_dmac_swap_conblk(>sc_cblk[seg]); sc->sc_cblk[seg].cb_padding[0] = 0; sc->sc_cblk[seg].cb_padding[1] = 0; }
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: rin Date: Mon Nov 23 06:46:38 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_genfb.c Log Message: Sort headers. No binary changes. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/broadcom/bcm2835_genfb.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/broadcom/bcm2835_genfb.c diff -u src/sys/arch/arm/broadcom/bcm2835_genfb.c:1.9 src/sys/arch/arm/broadcom/bcm2835_genfb.c:1.10 --- src/sys/arch/arm/broadcom/bcm2835_genfb.c:1.9 Sun Apr 1 04:35:03 2018 +++ src/sys/arch/arm/broadcom/bcm2835_genfb.c Mon Nov 23 06:46:38 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_genfb.c,v 1.9 2018/04/01 04:35:03 ryo Exp $ */ +/* $NetBSD: bcm2835_genfb.c,v 1.10 2020/11/23 06:46:38 rin Exp $ */ /*- * Copyright (c) 2013 Jared D. McNeill @@ -31,15 +31,15 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_genfb.c,v 1.9 2018/04/01 04:35:03 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_genfb.c,v 1.10 2020/11/23 06:46:38 rin Exp $"); #include #include -#include -#include -#include #include +#include +#include #include +#include #include
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: rin Date: Mon Nov 23 06:21:07 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Factor out bcm283x_aux_platform_early_putchar() from bcm{2837,2711}_platform_early_putchar(), for which output goes to AUX UART (aka mini UART). No functional changes. To generate a diff of this commit: cvs rdiff -u -r1.41 -r1.42 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.41 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.42 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.41 Mon Sep 28 11:54:23 2020 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Mon Nov 23 06:21:07 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.41 2020/09/28 11:54:23 jmcneill Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.42 2020/11/23 06:21:07 rin Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.41 2020/09/28 11:54:23 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.42 2020/11/23 06:21:07 rin Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -1344,6 +1344,20 @@ bcm283x_platform_early_putchar(vaddr_t v continue; } +static void __noasan +bcm283x_aux_platform_early_putchar(vaddr_t va, paddr_t pa, char c) +{ + volatile uint32_t *uartaddr = + cpu_earlydevice_va_p() ? + (volatile uint32_t *)va : + (volatile uint32_t *)pa; + + while ((uartaddr[com_lsr] & LSR_TXRDY) == 0) + continue; + + uartaddr[com_data] = c; +} + void __noasan bcm2835_platform_early_putchar(char c) { @@ -1365,37 +1379,19 @@ bcm2836_platform_early_putchar(char c) void __noasan bcm2837_platform_early_putchar(char c) { -#define AUCONSADDR_PA BCM2836_PERIPHERALS_BUS_TO_PHYS(BCM2835_AUX_UART_BASE) -#define AUCONSADDR_VA BCM2835_IOPHYSTOVIRT(AUCONSADDR_PA) - volatile uint32_t *uartaddr = - cpu_earlydevice_va_p() ? - (volatile uint32_t *)AUCONSADDR_VA : - (volatile uint32_t *)AUCONSADDR_PA; - - while ((uartaddr[com_lsr] & LSR_TXRDY) == 0) - ; + paddr_t pa = BCM2836_PERIPHERALS_BUS_TO_PHYS(BCM2835_AUX_UART_BASE); + vaddr_t va = BCM2835_IOPHYSTOVIRT(pa); - uartaddr[com_data] = c; -#undef AUCONSADDR_VA -#undef AUCONSADDR_PA + bcm283x_aux_platform_early_putchar(va, pa, c); } void __noasan bcm2711_platform_early_putchar(char c) { -#define AUCONSADDR_PA BCM2711_PERIPHERALS_BUS_TO_PHYS(BCM2835_AUX_UART_BASE) -#define AUCONSADDR_VA BCM2711_IOPHYSTOVIRT(AUCONSADDR_PA) - volatile uint32_t *uartaddr = - cpu_earlydevice_va_p() ? - (volatile uint32_t *)AUCONSADDR_VA : - (volatile uint32_t *)AUCONSADDR_PA; + paddr_t pa = BCM2711_PERIPHERALS_BUS_TO_PHYS(BCM2835_AUX_UART_BASE); + vaddr_t va = BCM2711_IOPHYSTOVIRT(pa); - while ((uartaddr[com_lsr] & LSR_TXRDY) == 0) - ; - - uartaddr[com_data] = c; -#undef AUCONSADDR_VA -#undef AUCONSADDR_PA + bcm283x_aux_platform_early_putchar(va, pa, c); } #define BCM283x_REF_FREQ 1920
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Wed Sep 30 23:58:13 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_dmac.c Log Message: Fix off-by-one in channel count, from Mark Millard. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/broadcom/bcm2835_dmac.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/broadcom/bcm2835_dmac.c diff -u src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.16 src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.17 --- src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.16 Sun Dec 10 21:38:26 2017 +++ src/sys/arch/arm/broadcom/bcm2835_dmac.c Wed Sep 30 23:58:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_dmac.c,v 1.16 2017/12/10 21:38:26 skrll Exp $ */ +/* $NetBSD: bcm2835_dmac.c,v 1.17 2020/09/30 23:58:13 jmcneill Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill @@ -29,7 +29,7 @@ #include "opt_ddb.h" #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_dmac.c,v 1.16 2017/12/10 21:38:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_dmac.c,v 1.17 2020/09/30 23:58:13 jmcneill Exp $"); #include #include @@ -142,7 +142,7 @@ bcm_dmac_attach(device_t parent, device_ mutex_init(>sc_lock, MUTEX_DEFAULT, IPL_SCHED); - sc->sc_nchannels = 31 - __builtin_clz(sc->sc_channelmask); + sc->sc_nchannels = 32 - __builtin_clz(sc->sc_channelmask); sc->sc_channels = kmem_alloc( sizeof(*sc->sc_channels) * sc->sc_nchannels, KM_SLEEP);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Fri Aug 28 13:13:55 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_emmc.c Log Message: Fix build if NBCMDMAC is zero To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.37 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.38 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.37 Sun May 31 23:52:19 2020 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Fri Aug 28 13:13:55 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.37 2020/05/31 23:52:19 thorpej Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.38 2020/08/28 13:13:55 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.37 2020/05/31 23:52:19 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.38 2020/08/28 13:13:55 skrll Exp $"); #include "bcmdmac.h" @@ -118,11 +118,8 @@ bcmemmc_attach(device_t parent, device_t struct bcmemmc_softc *sc = device_private(self); struct fdt_attach_args * const faa = aux; const int phandle = faa->faa_phandle; - enum bcmemmc_type type; int error; - type = of_search_compatible(phandle, compat_data)->data; - sc->sc.sc_dev = self; sc->sc.sc_dmat = faa->faa_dmat; sc->sc.sc_flags = 0; @@ -186,6 +183,8 @@ bcmemmc_attach(device_t parent, device_t aprint_normal_dev(self, "interrupting on %s\n", intrstr); #if NBCMDMAC > 0 + enum bcmemmc_type type = of_search_compatible(phandle, compat_data)->data; + if (type != BCM2835_SDHCI) goto done;
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Fri Jun 26 08:42:01 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Avoid large stack usage with kmem_alloc - we're in device_register so there is no problem doing this. To generate a diff of this commit: cvs rdiff -u -r1.38 -r1.39 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.38 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.39 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.38 Sun Jun 21 07:17:25 2020 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Fri Jun 26 08:42:01 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.38 2020/06/21 07:17:25 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.39 2020/06/26 08:42:01 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.38 2020/06/21 07:17:25 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.39 2020/06/26 08:42:01 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -53,6 +53,7 @@ __KERNEL_RCSID(0, "$NetBSD: bcm283x_plat #include #include #include +#include #include #include @@ -881,11 +882,12 @@ rpi_fb_parse_mode(const char *s, uint32_ return true; } +#define RPI_EDIDSIZE 1024 + static bool rpi_fb_get_edid_mode(uint32_t *pwidth, uint32_t *pheight) { struct edid_info ei; - uint8_t edid_data[1024]; uint32_t res; int error; @@ -901,7 +903,9 @@ rpi_fb_get_edid_mode(uint32_t *pwidth, u vb_edid.vbt_edid.status != 0) return false; - memset(edid_data, 0, sizeof(edid_data)); + uint8_t *edid_data = kmem_alloc(RPI_EDIDSIZE, KM_SLEEP); + + memset(edid_data, 0, RPI_EDIDSIZE); memcpy(edid_data, vb_edid.vbt_edid.data, sizeof(vb_edid.vbt_edid.data)); edid_parse(edid_data, ); @@ -914,6 +918,8 @@ rpi_fb_get_edid_mode(uint32_t *pwidth, u *pheight = ei.edid_preferred_mode->vdisplay; } + kmem_free(edid_data, RPI_EDIDSIZE); + return true; }
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Sun Jun 21 07:17:25 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Update to new proplib api To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.37 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.38 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.37 Sat Feb 22 00:28:35 2020 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Sun Jun 21 07:17:25 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.37 2020/02/22 00:28:35 jmcneill Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.38 2020/06/21 07:17:25 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.37 2020/02/22 00:28:35 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.38 2020/06/21 07:17:25 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -1428,14 +1428,8 @@ bcm283x_platform_device_register(device_ (vb.vbt_macaddr.addr >> 40) & 0xff }; - prop_data_t pd = prop_data_create_data(enaddr, ETHER_ADDR_LEN); - KASSERT(pd != NULL); - if (prop_dictionary_set(device_properties(dev), "mac-address", - pd) == false) { - aprint_error_dev(dev, - "WARNING: Unable to set mac-address property\n"); - } - prop_object_release(pd); + prop_dictionary_set_data(dict, "mac-address", enaddr, + ETHER_ADDR_LEN); } #if NGENFB > 0
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: thorpej Date: Sun May 31 23:52:19 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_bsc_fdt.c bcm2835_emmc.c bcm2835_sdhost.c Log Message: Remove superfluous checking for a "disable" property in the device_t properties dictionary. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c cvs rdiff -u -r1.36 -r1.37 src/sys/arch/arm/broadcom/bcm2835_emmc.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/broadcom/bcm2835_sdhost.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/broadcom/bcm2835_bsc_fdt.c diff -u src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c:1.1 src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c:1.2 --- src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c:1.1 Tue Mar 31 12:23:17 2020 +++ src/sys/arch/arm/broadcom/bcm2835_bsc_fdt.c Sun May 31 23:52:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_bsc_fdt.c,v 1.1 2020/03/31 12:23:17 jmcneill Exp $ */ +/* $NetBSD: bcm2835_bsc_fdt.c,v 1.2 2020/05/31 23:52:19 thorpej Exp $ */ /* * Copyright (c) 2019 Jason R. Thorpe @@ -28,7 +28,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc_fdt.c,v 1.1 2020/03/31 12:23:17 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc_fdt.c,v 1.2 2020/05/31 23:52:19 thorpej Exp $"); #include #include @@ -67,8 +67,6 @@ bsciic_fdt_attach(device_t parent, devic struct bsciic_softc * const sc = device_private(self); struct fdt_attach_args * const faa = aux; const int phandle = faa->faa_phandle; - prop_dictionary_t prop = device_properties(self); - bool disable = false; bus_addr_t addr; bus_size_t size; @@ -82,13 +80,6 @@ bsciic_fdt_attach(device_t parent, devic return; } - prop_dictionary_get_bool(prop, "disable", ); - if (disable) { - aprint_naive(": disabled\n"); - aprint_normal(": disabled\n"); - return; - } - /* Enable clock */ sc->sc_clk = fdtbus_clock_get_index(phandle, 0); if (sc->sc_clk == NULL) { Index: src/sys/arch/arm/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.36 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.37 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.36 Thu Feb 20 01:44:06 2020 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Sun May 31 23:52:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.36 2020/02/20 01:44:06 jmcneill Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.37 2020/05/31 23:52:19 thorpej Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.36 2020/02/20 01:44:06 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.37 2020/05/31 23:52:19 thorpej Exp $"); #include "bcmdmac.h" @@ -117,9 +117,7 @@ bcmemmc_attach(device_t parent, device_t { struct bcmemmc_softc *sc = device_private(self); struct fdt_attach_args * const faa = aux; - prop_dictionary_t dict = device_properties(self); const int phandle = faa->faa_phandle; - bool disable = false; enum bcmemmc_type type; int error; @@ -138,13 +136,6 @@ bcmemmc_attach(device_t parent, device_t sc->sc.sc_clkbase = 5; /* Default to 50MHz */ sc->sc_iot = faa->faa_bst; - prop_dictionary_get_bool(dict, "disable", ); - if (disable) { - aprint_naive(": disabled\n"); - aprint_normal(": disabled\n"); - return; - } - bus_addr_t addr; bus_size_t size; Index: src/sys/arch/arm/broadcom/bcm2835_sdhost.c diff -u src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.4 src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.5 --- src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.4 Sun Dec 10 21:38:26 2017 +++ src/sys/arch/arm/broadcom/bcm2835_sdhost.c Sun May 31 23:52:19 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_sdhost.c,v 1.4 2017/12/10 21:38:26 skrll Exp $ */ +/* $NetBSD: bcm2835_sdhost.c,v 1.5 2020/05/31 23:52:19 thorpej Exp $ */ /*- * Copyright (c) 2017 Jared McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.4 2017/12/10 21:38:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.5 2020/05/31 23:52:19 thorpej Exp $"); #include "bcmdmac.h" @@ -191,8 +191,6 @@ sdhost_attach(device_t parent, device_t { struct sdhost_softc * const sc = device_private(self); struct fdt_attach_args * const faa = aux; - prop_dictionary_t dict = device_properties(self); - bool disable = false; sc->sc_dev = self; sc->sc_bst = faa->faa_bst; @@ -220,12 +218,6 @@ sdhost_attach(device_t parent, device_t aprint_naive("\n"); aprint_normal(": SD HOST controller\n"); - prop_dictionary_get_bool(dict, "disable", ); - if (disable) { - aprint_naive(": disabled\n"); - aprint_normal(": disabled\n"); - return; - } /* Enable clocks */ struct clk *clk; for (int i = 0; (clk = fdtbus_clock_get_index(phandle, i)); i++) {
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Tue Mar 31 14:39:44 UTC 2020 Added Files: src/sys/arch/arm/broadcom: bcm2835_bscvar.h Log Message: Add bcm2835_bscvar.h To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/broadcom/bcm2835_bscvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/sys/arch/arm/broadcom/bcm2835_bscvar.h diff -u /dev/null src/sys/arch/arm/broadcom/bcm2835_bscvar.h:1.1 --- /dev/null Tue Mar 31 14:39:44 2020 +++ src/sys/arch/arm/broadcom/bcm2835_bscvar.h Tue Mar 31 14:39:44 2020 @@ -0,0 +1,100 @@ +/* $NetBSD: bcm2835_bscvar.h,v 1.1 2020/03/31 14:39:44 jmcneill Exp $ */ + +/* + * Copyright (c) 2019 Jason R. Thorpe + * Copyright (c) 2012 Jonathan A. Kollasch + * 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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 _BCM2835_BSCVAR_H +#define _BCM2835_BSCVAR_H + +#include + +typedef enum { + BSC_EXEC_STATE_IDLE = 0, + BSC_EXEC_STATE_SEND_ADDR = 1, + BSC_EXEC_STATE_SEND_CMD = 2, + BSC_EXEC_STATE_SEND_DATA = 3, + BSC_EXEC_STATE_RECV_DATA = 4, + BSC_EXEC_STATE_DONE = 5, + BSC_EXEC_STATE_ERROR = 6, +} bsc_exec_state_t; + +#define BSC_EXEC_STATE_SENDING(sc) \ + ((sc)->sc_exec_state >= BSC_EXEC_STATE_SEND_ADDR && \ + (sc)->sc_exec_state <= BSC_EXEC_STATE_SEND_DATA) + +#define BSC_EXEC_STATE_RECEIVING(sc) \ + ((sc)->sc_exec_state == BSC_EXEC_STATE_RECV_DATA) + +struct bsciic_softc { + device_t sc_dev; + bus_space_tag_t sc_iot; + bus_space_handle_t sc_ioh; + struct i2c_controller sc_i2c; + void *sc_inth; + + struct clk *sc_clk; + u_int sc_frequency; + u_int sc_clkrate; + + kmutex_t sc_intr_lock; + kcondvar_t sc_intr_wait; + + struct { + i2c_op_t op; + i2c_addr_t addr; + const void *cmdbuf; + size_t cmdlen; + void *databuf; + size_t datalen; + int flags; + } sc_exec; + + /* + * Everything below here protected by the i2c controller lock + * /and/ sc_intr_lock (if we're using interrupts). + */ + + bsc_exec_state_t sc_exec_state; + + uint8_t *sc_buf; + size_t sc_bufpos; + size_t sc_buflen; + + uint32_t sc_c_bits; + bool sc_expecting_interrupt; +}; + +void bsciic_attach(struct bsciic_softc *); + +int bsciic_acquire_bus(void *, int); +void bsciic_release_bus(void *, int); +int bsciic_exec(void *, i2c_op_t, i2c_addr_t, const void *, size_t, + void *, size_t, int); + +int bsciic_intr(void *); + +#endif /* !_BCM2835_BSCVAR_H */
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sat Feb 22 22:09:07 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_mbox.c bcm2835_mbox_acpi.c Log Message: RPi4 UEFI firmware 1.1 reports the wrong IRQ for the VC mailbox. Use polling mode for now until this is sorted out. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/broadcom/bcm2835_mbox.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2835_mbox_acpi.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/broadcom/bcm2835_mbox.c diff -u src/sys/arch/arm/broadcom/bcm2835_mbox.c:1.14 src/sys/arch/arm/broadcom/bcm2835_mbox.c:1.15 --- src/sys/arch/arm/broadcom/bcm2835_mbox.c:1.14 Mon Dec 30 18:43:38 2019 +++ src/sys/arch/arm/broadcom/bcm2835_mbox.c Sat Feb 22 22:09:07 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_mbox.c,v 1.14 2019/12/30 18:43:38 jmcneill Exp $ */ +/* $NetBSD: bcm2835_mbox.c,v 1.15 2020/02/22 22:09:07 jmcneill Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_mbox.c,v 1.14 2019/12/30 18:43:38 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_mbox.c,v 1.15 2020/02/22 22:09:07 jmcneill Exp $"); #include #include @@ -97,8 +97,9 @@ bcmmbox_attach(struct bcm2835mbox_softc cv_init(>sc_chan[i], "bcmmbox"); /* enable mbox interrupt */ - bus_space_write_4(sc->sc_iot, sc->sc_ioh, BCM2835_MBOX_CFG, - BCM2835_MBOX_CFG_DATAIRQEN); + if (sc->sc_intrh != NULL) + bus_space_write_4(sc->sc_iot, sc->sc_ioh, BCM2835_MBOX_CFG, + BCM2835_MBOX_CFG_DATAIRQEN); baa.baa_dmat = sc->sc_dmat; sc->sc_platdev = config_found_ia(sc->sc_dev, "bcmmboxbus", , NULL); @@ -130,7 +131,7 @@ bcmmbox_read(uint8_t chan, uint32_t *dat mutex_enter(>sc_intr_lock); while (BCM2835_MBOX_CHAN(sc->sc_mbox[chan]) == 0) { - if (cold) + if (cold || sc->sc_intrh == NULL) bcmmbox_intr1(sc, 0); else cv_wait(>sc_chan[chan], >sc_intr_lock); Index: src/sys/arch/arm/broadcom/bcm2835_mbox_acpi.c diff -u src/sys/arch/arm/broadcom/bcm2835_mbox_acpi.c:1.1 src/sys/arch/arm/broadcom/bcm2835_mbox_acpi.c:1.2 --- src/sys/arch/arm/broadcom/bcm2835_mbox_acpi.c:1.1 Mon Dec 30 18:43:38 2019 +++ src/sys/arch/arm/broadcom/bcm2835_mbox_acpi.c Sat Feb 22 22:09:07 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_mbox_acpi.c,v 1.1 2019/12/30 18:43:38 jmcneill Exp $ */ +/* $NetBSD: bcm2835_mbox_acpi.c,v 1.2 2020/02/22 22:09:07 jmcneill Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_mbox_acpi.c,v 1.1 2019/12/30 18:43:38 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_mbox_acpi.c,v 1.2 2020/02/22 22:09:07 jmcneill Exp $"); #include #include @@ -103,12 +103,14 @@ bcmmbox_acpi_attach(device_t parent, dev return; } +#if notyet sc->sc_intrh = acpi_intr_establish(self, (uint64_t)aa->aa_node->ad_handle, IPL_VM, false, bcmmbox_intr, sc, device_xname(self)); if (sc->sc_intrh == NULL) { aprint_error_dev(self, "failed to establish interrupt\n"); return; } +#endif bcmmbox_attach(sc); }
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sat Feb 22 00:17:54 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835reg.h bcm283x_platform.c Log Message: Translate bus addresses for SCB on BCM2711 To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sys/arch/arm/broadcom/bcm2835reg.h cvs rdiff -u -r1.35 -r1.36 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.29 src/sys/arch/arm/broadcom/bcm2835reg.h:1.30 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.29 Mon Dec 30 16:19:27 2019 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Sat Feb 22 00:17:54 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.29 2019/12/30 16:19:27 skrll Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.30 2020/02/22 00:17:54 jmcneill Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -124,6 +124,15 @@ #define BCM2835_INTC_BASE (0x0) /* Relative to BCM2835_ARMICU_BASE */ +#define BCM2711_SCB_BASE 0xfc00 +#define BCM2711_SCB_SIZE 0x0380 +#define BCM2711_SCB_BASE_BUS 0x7c00 + +#define BCM2711_SCB_PHYS_TO_BUS(a) \ +((a) - BCM2711_SCB_BASE + BCM2711_SCB_BASE_BUS) +#define BCM2711_SCB_BUS_TO_PHYS(a) \ +((a) - BCM2711_SCB_BASE_BUS + BCM2711_SCB_BASE) + /* Interrupt controller */ #define BCM2835_INTC_IRQBPENDING (BCM2835_INTC_BASE + 0x00) /* IRQ Basic pending */ #define BCM2835_INTC_IRQ1PENDING (BCM2835_INTC_BASE + 0x04) /* IRQ pending 1 */ Index: src/sys/arch/arm/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.35 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.36 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.35 Thu Feb 20 01:43:07 2020 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Sat Feb 22 00:17:54 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.35 2020/02/20 01:43:07 jmcneill Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.36 2020/02/22 00:17:54 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.35 2020/02/20 01:43:07 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.36 2020/02/22 00:17:54 jmcneill Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -187,6 +187,10 @@ bcm2711_bus_to_phys(bus_addr_t ba) ba < BCM283X_PERIPHERALS_BASE_BUS + BCM283X_PERIPHERALS_SIZE) return BCM2711_PERIPHERALS_BUS_TO_PHYS(ba); + if (ba >= BCM2711_SCB_BASE_BUS && + ba < BCM2711_SCB_BASE_BUS + BCM2711_SCB_SIZE) + return BCM2711_SCB_BUS_TO_PHYS(ba); + if (ba >= BCM2711_ARM_LOCAL_BASE_BUS && ba < BCM2711_ARM_LOCAL_BASE_BUS + BCM2711_ARM_LOCAL_SIZE) return BCM2711_ARM_LOCAL_BUS_TO_PHYS(ba);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Thu Feb 20 01:44:06 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_emmc.c Log Message: Add support for brcm,bcm2711-emmc2 To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.35 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.36 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.35 Mon Dec 30 16:41:38 2019 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Thu Feb 20 01:44:06 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.35 2019/12/30 16:41:38 skrll Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.36 2020/02/20 01:44:06 jmcneill Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.35 2019/12/30 16:41:38 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.36 2020/02/20 01:44:06 jmcneill Exp $"); #include "bcmdmac.h" @@ -91,17 +91,24 @@ static void bcmemmc_dma_done(uint32_t, u CFATTACH_DECL_NEW(bcmemmc, sizeof(struct bcmemmc_softc), bcmemmc_match, bcmemmc_attach, NULL, NULL); +enum bcmemmc_type { + BCM2835_SDHCI, + BCM2711_EMMC2, +}; + +static const struct of_compat_data compat_data[] = { + { "brcm,bcm2835-sdhci", BCM2835_SDHCI }, + { "brcm,bcm2711-emmc2", BCM2711_EMMC2 }, + { NULL } +}; + /* ARGSUSED */ static int bcmemmc_match(device_t parent, struct cfdata *match, void *aux) { - const char * const compatible[] = { - "brcm,bcm2835-sdhci", - NULL - }; struct fdt_attach_args * const faa = aux; - return of_match_compatible(faa->faa_phandle, compatible); + return of_match_compat_data(faa->faa_phandle, compat_data); } /* ARGSUSED */ @@ -111,9 +118,13 @@ bcmemmc_attach(device_t parent, device_t struct bcmemmc_softc *sc = device_private(self); struct fdt_attach_args * const faa = aux; prop_dictionary_t dict = device_properties(self); + const int phandle = faa->faa_phandle; bool disable = false; + enum bcmemmc_type type; int error; + type = of_search_compatible(phandle, compat_data)->data; + sc->sc.sc_dev = self; sc->sc.sc_dmat = faa->faa_dmat; sc->sc.sc_flags = 0; @@ -137,7 +148,6 @@ bcmemmc_attach(device_t parent, device_t bus_addr_t addr; bus_size_t size; - const int phandle = faa->faa_phandle; error = fdtbus_get_reg(phandle, 0, , ); if (error) { aprint_error_dev(sc->sc.sc_dev, "unable to map device\n"); @@ -185,6 +195,9 @@ bcmemmc_attach(device_t parent, device_t aprint_normal_dev(self, "interrupting on %s\n", intrstr); #if NBCMDMAC > 0 + if (type != BCM2835_SDHCI) + goto done; + sc->sc_dmac = bcm_dmac_alloc(BCM_DMAC_TYPE_NORMAL, IPL_SDMMC, bcmemmc_dma_done, sc); if (sc->sc_dmac == NULL)
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Thu Feb 20 01:43:08 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Remove custom bus dma tag handling. To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.34 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.35 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.34 Wed Jan 1 13:54:32 2020 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Thu Feb 20 01:43:07 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.34 2020/01/01 13:54:32 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.35 2020/02/20 01:43:07 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.34 2020/01/01 13:54:32 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.35 2020/02/20 01:43:07 jmcneill Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -109,7 +109,6 @@ __KERNEL_RCSID(0, "$NetBSD: bcm283x_plat #endif #define RPI_CPU_MAX 4 -#define BCM2711_DMA_SIZE 0x3c00 void bcm2835_platform_early_putchar(char c); void bcm2836_platform_early_putchar(char c); @@ -267,28 +266,6 @@ bcm2711_a4x_bs_mmap(void *t, bus_addr_t return bcm2711_bs_mmap(t, ba, 4 * offset, prot, flags); } -struct arm32_dma_range bcm2835_dma_ranges[] = { - [0] = { - .dr_sysbase = 0, - .dr_busbase = BCM2835_BUSADDR_CACHE_COHERENT, - } -}; - -struct arm32_dma_range bcm2836_dma_ranges[] = { - [0] = { - .dr_sysbase = 0, - .dr_busbase = BCM2835_BUSADDR_CACHE_DIRECT, - } -}; - -struct arm32_dma_range bcm2711_dma_ranges[] = { - [0] = { - .dr_sysbase = 0, - .dr_busbase = BCM2835_BUSADDR_CACHE_DIRECT, - } -}; - - #if defined(SOC_BCM2835) static const struct pmap_devmap * bcm2835_platform_devmap(void) @@ -1321,11 +1298,6 @@ bcm2835_platform_init_attach_args(struct faa->faa_bst = _bs_tag; faa->faa_a4x_bst = _a4x_bs_tag; - faa->faa_dmat = _bus_dma_tag; - - bcm2835_bus_dma_tag._ranges = bcm2835_dma_ranges; - bcm2835_bus_dma_tag._nranges = __arraycount(bcm2835_dma_ranges); - bcm2835_dma_ranges[0].dr_len = bcm283x_memorysize; } #endif @@ -1336,11 +1308,6 @@ bcm2836_platform_init_attach_args(struct faa->faa_bst = _bs_tag; faa->faa_a4x_bst = _a4x_bs_tag; - faa->faa_dmat = _bus_dma_tag; - - bcm2835_bus_dma_tag._ranges = bcm2836_dma_ranges; - bcm2835_bus_dma_tag._nranges = __arraycount(bcm2836_dma_ranges); - bcm2836_dma_ranges[0].dr_len = bcm283x_memorysize; } static void @@ -1349,11 +1316,6 @@ bcm2711_platform_init_attach_args(struct faa->faa_bst = _bs_tag; faa->faa_a4x_bst = _a4x_bs_tag; - faa->faa_dmat = _bus_dma_tag; - - bcm2835_bus_dma_tag._ranges = bcm2711_dma_ranges; - bcm2835_bus_dma_tag._nranges = __arraycount(bcm2711_dma_ranges); - bcm2711_dma_ranges[0].dr_len = BCM2711_DMA_SIZE; } #endif
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Mon Feb 3 08:00:35 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm53xx_eth.c Log Message: Adopt To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 src/sys/arch/arm/broadcom/bcm53xx_eth.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/broadcom/bcm53xx_eth.c diff -u src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.39 src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.40 --- src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.39 Wed Oct 30 10:12:37 2019 +++ src/sys/arch/arm/broadcom/bcm53xx_eth.c Mon Feb 3 08:00:35 2020 @@ -35,7 +35,7 @@ #include -__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.39 2019/10/30 10:12:37 msaitoh Exp $"); +__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.40 2020/02/03 08:00:35 skrll Exp $"); #include #include @@ -1119,7 +1119,7 @@ bcmeth_rxq_consume( #ifdef BCMETH_RCVMAGIC if (rxsts == BCMETH_RCVMAGIC) { - ifp->if_ierrors++; + if_statinc(ifp, if_ierrors); if ((m->m_ext.ext_paddr >> 28) == 8) { BCMETH_EVCNT_INCR(sc->sc_ev_rx_badmagic_lo); } else { @@ -1137,7 +1137,7 @@ bcmeth_rxq_consume( * We encountered an error, take the mbufs and add them * to the rx bufcache so we can quickly reuse them. */ - ifp->if_ierrors++; + if_statinc(ifp, if_ierrors); do { struct mbuf *m0 = m->m_next; m->m_next = NULL; @@ -1662,10 +1662,10 @@ bcmeth_txq_consume( __func__, m, m->m_pkthdr.len); #endif bpf_mtap(ifp, m, BPF_D_OUT); - ifp->if_opackets++; - ifp->if_obytes += m->m_pkthdr.len; + if_statinc(ifp, if_opackets); + if_statadd(ifp, if_obytes, m->m_pkthdr.len); if (m->m_flags & M_MCAST) -ifp->if_omcasts++; +if_statinc(ifp, if_omcasts); m_freem(m); }
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Wed Jan 22 21:21:24 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_vcaudio.c bcm2835_vcaudioreg.h Log Message: Adapt to changed 64bit vchiq interface. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/broadcom/bcm2835_vcaudio.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/broadcom/bcm2835_vcaudioreg.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/broadcom/bcm2835_vcaudio.c diff -u src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.14 src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.15 --- src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.14 Wed May 8 13:40:14 2019 +++ src/sys/arch/arm/broadcom/bcm2835_vcaudio.c Wed Jan 22 21:21:24 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_vcaudio.c,v 1.14 2019/05/08 13:40:14 isaki Exp $ */ +/* $NetBSD: bcm2835_vcaudio.c,v 1.15 2020/01/22 21:21:24 mlelstv Exp $ */ /*- * Copyright (c) 2013 Jared D. McNeill @@ -31,7 +31,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.14 2019/05/08 13:40:14 isaki Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.15 2020/01/22 21:21:24 mlelstv Exp $"); #include #include @@ -371,8 +371,6 @@ vcaudio_service_callback(void *priv, con VC_AUDIO_MSG_T msg; int32_t msglen = 0; int error; - void (*intr)(void *) = NULL; - void *intrarg = NULL; if (sc == NULL || reason != VCHI_CALLBACK_MSG_AVAILABLE) return; @@ -396,9 +394,8 @@ vcaudio_service_callback(void *priv, con break; case VC_AUDIO_MSG_TYPE_COMPLETE: - intr = msg.u.complete.callback; - intrarg = msg.u.complete.cookie; - if (intr && intrarg) { + if (msg.u.complete.cookie1 == VC_AUDIO_WRITE_COOKIE1 && + msg.u.complete.cookie2 == VC_AUDIO_WRITE_COOKIE2) { int count = msg.u.complete.count & 0x; int perr = (msg.u.complete.count & __BIT(30)) != 0; bool sched = false; @@ -420,7 +417,7 @@ vcaudio_service_callback(void *priv, con } if (sched && sc->sc_pint) { -intr(intrarg); +sc->sc_pint(sc->sc_pintarg); sc->sc_abytes += sc->sc_pblksize; cv_signal(>sc_datacv); } @@ -465,8 +462,8 @@ vcaudio_worker(void *priv) msg.type = VC_AUDIO_MSG_TYPE_WRITE; msg.u.write.max_packet = VCAUDIO_MSGSIZE; msg.u.write.count = count; - msg.u.write.callback = intr; - msg.u.write.cookie = intrarg; + msg.u.write.cookie1 = VC_AUDIO_WRITE_COOKIE1; + msg.u.write.cookie2 = VC_AUDIO_WRITE_COOKIE2; msg.u.write.silence = 0; block = (uint8_t *)sc->sc_pstart + sc->sc_ppos; Index: src/sys/arch/arm/broadcom/bcm2835_vcaudioreg.h diff -u src/sys/arch/arm/broadcom/bcm2835_vcaudioreg.h:1.3 src/sys/arch/arm/broadcom/bcm2835_vcaudioreg.h:1.4 --- src/sys/arch/arm/broadcom/bcm2835_vcaudioreg.h:1.3 Fri Apr 25 15:51:12 2014 +++ src/sys/arch/arm/broadcom/bcm2835_vcaudioreg.h Wed Jan 22 21:21:24 2020 @@ -33,6 +33,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBI // FourCC code used for VCHI connection #define VC_AUDIO_SERVER_NAME MAKE_FOURCC("AUDS") +#define VC_AUDIO_WRITE_COOKIE1 MAKE_FOURCC("BCMA") +#define VC_AUDIO_WRITE_COOKIE2 MAKE_FOURCC("DATA") // Maximum message length #define VC_AUDIO_MAX_MSG_LEN (sizeof( VC_AUDIO_MSG_T )) @@ -115,8 +117,8 @@ typedef struct typedef struct { uint32_t count; // in bytes - void *callback; - void *cookie; + uint32_t cookie1; + uint32_t cookie2; uint16_t silence; uint16_t max_packet; } VC_AUDIO_WRITE_T; @@ -132,8 +134,8 @@ typedef struct typedef struct { int32_t count; // Success value - void *callback; - void *cookie; + uint32_t cookie1; + uint32_t cookie2; } VC_AUDIO_COMPLETE_T; // Message header for all messages in HOST->VC direction
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mrg Date: Mon Jan 20 06:55:35 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c Log Message: use arm_cpu_mpidr() and fix arm64 builds. To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/sys/arch/arm/broadcom/bcm2835_intr.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.30 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.31 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.30 Sun Jan 19 16:53:20 2020 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Mon Jan 20 06:55:35 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.30 2020/01/19 16:53:20 skrll Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.31 2020/01/20 06:55:35 mrg Exp $ */ /*- * Copyright (c) 2012, 2015, 2019 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.30 2020/01/19 16:53:20 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.31 2020/01/20 06:55:35 mrg Exp $"); #define _INTR_PRIVATE @@ -337,7 +337,7 @@ bcm2835_irq_handler(void *frame) { struct cpu_info * const ci = curcpu(); const int oldipl = ci->ci_cpl; - const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); + const cpuid_t cpuid = __SHIFTOUT(arm_cpu_mpidr(ci), MPIDR_AFF0); const uint32_t oldipl_mask = __BIT(oldipl); int ipl_mask = 0; @@ -700,7 +700,7 @@ static int bcm2836mp_pic_find_pending_irqs(struct pic_softc *pic) { struct cpu_info * const ci = curcpu(); - const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); + const cpuid_t cpuid = __SHIFTOUT(arm_cpu_mpidr(ci), MPIDR_AFF0); uint32_t lpending; int ipl = 0; @@ -741,7 +741,7 @@ bcm2836mp_pic_source_name(struct pic_sof #if defined(MULTIPROCESSOR) static void bcm2836mp_cpu_init(struct pic_softc *pic, struct cpu_info *ci) { - const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); + const cpuid_t cpuid = __SHIFTOUT(arm_cpu_mpidr(ci), MPIDR_AFF0); KASSERT(cpuid < BCM2836_NCPUS); @@ -768,7 +768,7 @@ int bcm2836mp_ipi_handler(void *priv) { const struct cpu_info *ci = curcpu(); - const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); + const cpuid_t cpuid = __SHIFTOUT(arm_cpu_mpidr(ci), MPIDR_AFF0); uint32_t ipimask, bit; KASSERT(cpuid < BCM2836_NCPUS); @@ -817,7 +817,7 @@ bcm2836mp_ipi_handler(void *priv) static void bcm2836mp_intr_init(void *priv, struct cpu_info *ci) { - const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); + const cpuid_t cpuid = __SHIFTOUT(arm_cpu_mpidr(ci), MPIDR_AFF0); struct pic_softc * const pic = _pic[cpuid]; KASSERT(cpuid < BCM2836_NCPUS);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Sun Jan 19 16:53:20 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c Log Message: ci_core_id isn't setup early enough after recent arm_cpu_topology changes, so use ci_mpidr as a stop gap fix for cpuid To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sys/arch/arm/broadcom/bcm2835_intr.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.29 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.30 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.29 Thu Dec 26 11:09:11 2019 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Sun Jan 19 16:53:20 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.29 2019/12/26 11:09:11 skrll Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.30 2020/01/19 16:53:20 skrll Exp $ */ /*- * Copyright (c) 2012, 2015, 2019 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.29 2019/12/26 11:09:11 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.30 2020/01/19 16:53:20 skrll Exp $"); #define _INTR_PRIVATE @@ -337,7 +337,7 @@ bcm2835_irq_handler(void *frame) { struct cpu_info * const ci = curcpu(); const int oldipl = ci->ci_cpl; - const cpuid_t cpuid = ci->ci_core_id; + const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); const uint32_t oldipl_mask = __BIT(oldipl); int ipl_mask = 0; @@ -700,7 +700,7 @@ static int bcm2836mp_pic_find_pending_irqs(struct pic_softc *pic) { struct cpu_info * const ci = curcpu(); - const cpuid_t cpuid = ci->ci_core_id; + const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); uint32_t lpending; int ipl = 0; @@ -741,7 +741,7 @@ bcm2836mp_pic_source_name(struct pic_sof #if defined(MULTIPROCESSOR) static void bcm2836mp_cpu_init(struct pic_softc *pic, struct cpu_info *ci) { - const cpuid_t cpuid = ci->ci_core_id; + const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); KASSERT(cpuid < BCM2836_NCPUS); @@ -768,7 +768,7 @@ int bcm2836mp_ipi_handler(void *priv) { const struct cpu_info *ci = curcpu(); - const cpuid_t cpuid = ci->ci_core_id; + const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); uint32_t ipimask, bit; KASSERT(cpuid < BCM2836_NCPUS); @@ -817,7 +817,7 @@ bcm2836mp_ipi_handler(void *priv) static void bcm2836mp_intr_init(void *priv, struct cpu_info *ci) { - const cpuid_t cpuid = ci->ci_core_id; + const cpuid_t cpuid = __SHIFTOUT(ci->ci_mpidr, MPIDR_AFF0); struct pic_softc * const pic = _pic[cpuid]; KASSERT(cpuid < BCM2836_NCPUS);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Wed Jan 1 13:54:32 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Provide a single generic bcm283x_platform_uart_freq which checks for "brcm,bcm2835-aux-uart" and returns the appropriate core clock based results; otherwise it returns the uart clock from firmware. Should fix early console output on the rpi0w. Based on a diff from mlelstv To generate a diff of this commit: cvs rdiff -u -r1.33 -r1.34 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.33 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.34 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.33 Wed Jan 1 09:35:50 2020 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Wed Jan 1 13:54:32 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.33 2020/01/01 09:35:50 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.34 2020/01/01 13:54:32 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.33 2020/01/01 09:35:50 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.34 2020/01/01 13:54:32 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -1499,6 +1499,20 @@ static u_int bcm283x_platform_uart_freq(void) { + /* + * We are safe to access stdout phandle - consinit did before + * calling ap_uart_freq + */ + const int phandle = fdtbus_get_stdout_phandle(); + + static const char * const aux_compatible[] = { + "brcm,bcm2835-aux-uart", + NULL + }; + + if (of_match_compatible(phandle, aux_compatible)) + return core_clk * 2; + return uart_clk; } @@ -1517,12 +1531,6 @@ ARM_PLATFORM(bcm2835, "brcm,bcm2835", #endif #if defined(SOC_BCM2836) -static u_int -bcm2837_platform_uart_freq(void) -{ - - return core_clk * 2; -} static const struct arm_platform bcm2836_platform = { .ap_devmap = bcm2836_platform_devmap, @@ -1542,7 +1550,7 @@ static const struct arm_platform bcm2837 .ap_device_register = bcm283x_platform_device_register, .ap_reset = bcm2835_system_reset, .ap_delay = gtmr_delay, - .ap_uart_freq = bcm2837_platform_uart_freq, + .ap_uart_freq = bcm283x_platform_uart_freq, .ap_mpstart = arm_fdt_cpu_mpstart, }; @@ -1553,7 +1561,7 @@ static const struct arm_platform bcm2711 .ap_device_register = bcm283x_platform_device_register, .ap_reset = bcm2835_system_reset, .ap_delay = gtmr_delay, - .ap_uart_freq = bcm2837_platform_uart_freq, + .ap_uart_freq = bcm283x_platform_uart_freq, .ap_mpstart = arm_fdt_cpu_mpstart, };
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Wed Jan 1 09:35:50 UTC 2020 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: The DMA range doesn't cover all of memory on the bcm2711 (rpi4) - it covers (most of) the first 1GB. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.32 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.33 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.32 Tue Dec 31 08:01:19 2019 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Wed Jan 1 09:35:50 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.32 2019/12/31 08:01:19 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.33 2020/01/01 09:35:50 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.32 2019/12/31 08:01:19 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.33 2020/01/01 09:35:50 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -109,6 +109,7 @@ __KERNEL_RCSID(0, "$NetBSD: bcm283x_plat #endif #define RPI_CPU_MAX 4 +#define BCM2711_DMA_SIZE 0x3c00 void bcm2835_platform_early_putchar(char c); void bcm2836_platform_early_putchar(char c); @@ -1352,7 +1353,7 @@ bcm2711_platform_init_attach_args(struct bcm2835_bus_dma_tag._ranges = bcm2711_dma_ranges; bcm2835_bus_dma_tag._nranges = __arraycount(bcm2711_dma_ranges); - bcm2711_dma_ranges[0].dr_len = bcm283x_memorysize; + bcm2711_dma_ranges[0].dr_len = BCM2711_DMA_SIZE; } #endif
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Tue Dec 31 08:01:19 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Add another cache invalidation before reading memory for firmware query results. To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.31 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.32 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.31 Mon Dec 30 16:19:27 2019 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Tue Dec 31 08:01:19 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.31 2019/12/30 16:19:27 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.32 2019/12/31 08:01:19 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.31 2019/12/30 16:19:27 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.32 2019/12/31 08:01:19 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -671,6 +671,13 @@ bcm283x_uartinit(bus_space_tag_t iot, bu bcm2835_mbox_read(iot, ioh, BCMMBOX_CHANARM2VC, ); + /* + * RPI4 has Cortex A72 processors which do speculation, so + * we need to invalidate the cache for an updates done by + * the firmware + */ + cpu_dcache_inv_range((vaddr_t)_uart, sizeof(vb_uart)); + if (vcprop_tag_success_p(_uart.vbt_uartclockrate.tag)) uart_clk = vb_uart.vbt_uartclockrate.rate; if (vcprop_tag_success_p(_uart.vbt_vpuclockrate.tag))
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Tue Dec 31 00:59:27 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: files.bcm2835 Log Message: acpi glue is conditional on acpinodebus To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 src/sys/arch/arm/broadcom/files.bcm2835 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/broadcom/files.bcm2835 diff -u src/sys/arch/arm/broadcom/files.bcm2835:1.37 src/sys/arch/arm/broadcom/files.bcm2835:1.38 --- src/sys/arch/arm/broadcom/files.bcm2835:1.37 Mon Dec 30 18:53:34 2019 +++ src/sys/arch/arm/broadcom/files.bcm2835 Tue Dec 31 00:59:26 2019 @@ -1,4 +1,4 @@ -# $NetBSD: files.bcm2835,v 1.37 2019/12/30 18:53:34 jmcneill Exp $ +# $NetBSD: files.bcm2835,v 1.38 2019/12/31 00:59:26 jmcneill Exp $ # # Configuration info for Broadcom BCM2835 ARM Peripherals # @@ -19,8 +19,11 @@ device bcmmbox: bcmmboxbus file arch/arm/broadcom/bcm2835_mbox.c bcmmbox attach bcmmbox at fdt with bcmmbox_fdt filearch/arm/broadcom/bcm2835_mbox_fdt.c bcmmbox_fdt + +ifdef acpinodebus attach bcmmbox at acpinodebus with bcmmbox_acpi file arch/arm/broadcom/bcm2835_mbox_acpi.c bcmmbox_acpi +endif # System Timer (BCM2835_TIMER_BASE) device bcmtmr @@ -56,8 +59,10 @@ file arch/arm/broadcom/bcm2835_com.c bc attach sdhc at fdt with bcmemmc file arch/arm/broadcom/bcm2835_emmc.c bcmemmc +ifdef acpinodebus attach sdhc at acpinodebus with bcmemmc_acpi file arch/arm/broadcom/bcm2835_emmc_acpi.c bcmemmc_acpi +endif # SD Host Controller (BCM2835_SDHOST_BASE) device bcmsdhost: sdmmcbus
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Mon Dec 30 18:53:34 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: files.bcm2835 Added Files: src/sys/arch/arm/broadcom: bcm2835_emmc_acpi.c Log Message: Add BCM2835 EMMC acpi glue To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/broadcom/bcm2835_emmc_acpi.c cvs rdiff -u -r1.36 -r1.37 src/sys/arch/arm/broadcom/files.bcm2835 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/broadcom/files.bcm2835 diff -u src/sys/arch/arm/broadcom/files.bcm2835:1.36 src/sys/arch/arm/broadcom/files.bcm2835:1.37 --- src/sys/arch/arm/broadcom/files.bcm2835:1.36 Mon Dec 30 18:43:38 2019 +++ src/sys/arch/arm/broadcom/files.bcm2835 Mon Dec 30 18:53:34 2019 @@ -1,4 +1,4 @@ -# $NetBSD: files.bcm2835,v 1.36 2019/12/30 18:43:38 jmcneill Exp $ +# $NetBSD: files.bcm2835,v 1.37 2019/12/30 18:53:34 jmcneill Exp $ # # Configuration info for Broadcom BCM2835 ARM Peripherals # @@ -56,6 +56,9 @@ file arch/arm/broadcom/bcm2835_com.c bc attach sdhc at fdt with bcmemmc file arch/arm/broadcom/bcm2835_emmc.c bcmemmc +attach sdhc at acpinodebus with bcmemmc_acpi +file arch/arm/broadcom/bcm2835_emmc_acpi.c bcmemmc_acpi + # SD Host Controller (BCM2835_SDHOST_BASE) device bcmsdhost: sdmmcbus attach bcmsdhost at fdt with bcmsdhost Added files: Index: src/sys/arch/arm/broadcom/bcm2835_emmc_acpi.c diff -u /dev/null src/sys/arch/arm/broadcom/bcm2835_emmc_acpi.c:1.1 --- /dev/null Mon Dec 30 18:53:34 2019 +++ src/sys/arch/arm/broadcom/bcm2835_emmc_acpi.c Mon Dec 30 18:53:34 2019 @@ -0,0 +1,215 @@ +/* $NetBSD: bcm2835_emmc_acpi.c,v 1.1 2019/12/30 18:53:34 jmcneill Exp $ */ + +/* + * Copyright (c) 2016 Kimihiro Nonaka + * 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. The name of the author may not be used to endorse or promote products + *derived from this software without specific prior written permission. + * + * 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 +__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc_acpi.c,v 1.1 2019/12/30 18:53:34 jmcneill Exp $"); + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include +#include + +#define _COMPONENT ACPI_RESOURCE_COMPONENT +ACPI_MODULE_NAME ("bcmemmc_acpi") + +static int bcmemmc_acpi_match(device_t, cfdata_t, void *); +static void bcmemmc_acpi_attach(device_t, device_t, void *); +static void bcmemmc_acpi_attach1(device_t); + +static u_int bcmemmc_acpi_emmc_clock_rate(void); + +static const char * const compatible[] = { + "BCM2847", + NULL +}; + +static struct { + struct vcprop_buffer_hdr vb_hdr; + struct vcprop_tag_clockrate vbt_emmcclockrate; + struct vcprop_tag end; +} vb_emmc __cacheline_aligned = { + .vb_hdr = { + .vpb_len = sizeof(vb_emmc), + .vpb_rcode = VCPROP_PROCESS_REQUEST, + }, + .vbt_emmcclockrate = { + .tag = { + .vpt_tag = VCPROPTAG_GET_CLOCKRATE, + .vpt_len = VCPROPTAG_LEN(vb_emmc.vbt_emmcclockrate), + .vpt_rcode = VCPROPTAG_REQUEST + }, + .id = VCPROP_CLK_EMMC + }, + .end = { + .vpt_tag = VCPROPTAG_NULL + } +}; + +struct bcmemmc_acpi_softc { + struct sdhc_softc sc; + bus_space_tag_t sc_memt; + bus_space_handle_t sc_memh; + bus_size_t sc_memsize; + void *sc_ih; + struct sdhc_host *sc_hosts[1]; +}; + +CFATTACH_DECL_NEW(bcmemmc_acpi, sizeof(struct bcmemmc_acpi_softc), +bcmemmc_acpi_match, bcmemmc_acpi_attach, NULL, NULL); + +static int +bcmemmc_acpi_match(device_t parent, cfdata_t match, void *opaque) +{ + struct acpi_attach_args *aa = opaque; + + if (aa->aa_node->ad_type != ACPI_TYPE_DEVICE) + return 0; + + return acpi_match_hid(aa->aa_node->ad_devinfo, compatible); +} + +static void +bcmemmc_acpi_attach(device_t parent, device_t self, void *opaque) +{ + struct bcmemmc_acpi_softc *sc = device_private(self); + struct acpi_attach_args *aa = opaque; + struct acpi_resources res; +
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Mon Dec 30 18:43:38 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_mbox.c bcm2835_mbox.h files.bcm2835 Added Files: src/sys/arch/arm/broadcom: bcm2835_mbox_acpi.c bcm2835_mbox_fdt.c Log Message: Split bcm2835 mbox driver into separate fdt and acpi frontends. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/broadcom/bcm2835_mbox.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/broadcom/bcm2835_mbox.h cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/broadcom/bcm2835_mbox_acpi.c \ src/sys/arch/arm/broadcom/bcm2835_mbox_fdt.c cvs rdiff -u -r1.35 -r1.36 src/sys/arch/arm/broadcom/files.bcm2835 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/broadcom/bcm2835_mbox.c diff -u src/sys/arch/arm/broadcom/bcm2835_mbox.c:1.13 src/sys/arch/arm/broadcom/bcm2835_mbox.c:1.14 --- src/sys/arch/arm/broadcom/bcm2835_mbox.c:1.13 Sun Aug 19 09:18:48 2018 +++ src/sys/arch/arm/broadcom/bcm2835_mbox.c Mon Dec 30 18:43:38 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_mbox.c,v 1.13 2018/08/19 09:18:48 rin Exp $ */ +/* $NetBSD: bcm2835_mbox.c,v 1.14 2019/12/30 18:43:38 jmcneill Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_mbox.c,v 1.13 2018/08/19 09:18:48 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_mbox.c,v 1.14 2019/12/30 18:43:38 jmcneill Exp $"); #include #include @@ -43,103 +43,10 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_mbox #include #include #include - -#include - -struct bcm2835mbox_softc { - device_t sc_dev; - device_t sc_platdev; - - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; - bus_dma_tag_t sc_dmat; - void *sc_intrh; - - kmutex_t sc_lock; - kmutex_t sc_intr_lock; - kcondvar_t sc_chan[BCM2835_MBOX_NUMCHANNELS]; - uint32_t sc_mbox[BCM2835_MBOX_NUMCHANNELS]; -}; +#include static struct bcm2835mbox_softc *bcm2835mbox_sc; -static int bcmmbox_match(device_t, cfdata_t, void *); -static void bcmmbox_attach(device_t, device_t, void *); -static int bcmmbox_intr1(struct bcm2835mbox_softc *, int); -static int bcmmbox_intr(void *); - -CFATTACH_DECL_NEW(bcmmbox, sizeof(struct bcm2835mbox_softc), -bcmmbox_match, bcmmbox_attach, NULL, NULL); - -/* ARGSUSED */ -static int -bcmmbox_match(device_t parent, cfdata_t match, void *aux) -{ - const char * const compatible[] = { "brcm,bcm2835-mbox", NULL }; - struct fdt_attach_args * const faa = aux; - - return of_match_compatible(faa->faa_phandle, compatible); -} - -static void -bcmmbox_attach(device_t parent, device_t self, void *aux) -{ - struct bcm2835mbox_softc *sc = device_private(self); - struct fdt_attach_args * const faa = aux; - struct bcmmbox_attach_args baa; - const int phandle = faa->faa_phandle; - int i; - - aprint_naive("\n"); - aprint_normal(": VC mailbox\n"); - - sc->sc_dev = self; - sc->sc_iot = faa->faa_bst; - sc->sc_dmat = faa->faa_dmat; - mutex_init(>sc_lock, MUTEX_DEFAULT, IPL_NONE); - mutex_init(>sc_intr_lock, MUTEX_DEFAULT, IPL_VM); - for (i = 0; i < BCM2835_MBOX_NUMCHANNELS; ++i) - cv_init(>sc_chan[i], "bcmmbox"); - - bus_addr_t addr; - bus_size_t size; - - if (fdtbus_get_reg(phandle, 0, , ) != 0) { - aprint_error(": couldn't get register address\n"); - return; - } - - if (bus_space_map(faa->faa_bst, addr, size, 0, >sc_ioh) != 0) { - aprint_error_dev(sc->sc_dev, "unable to map device\n"); - return; - } - - char intrstr[128]; - if (!fdtbus_intr_str(phandle, 0, intrstr, sizeof(intrstr))) { - aprint_error(": failed to decode interrupt\n"); - return; - } - - sc->sc_intrh = fdtbus_intr_establish(phandle, 0, IPL_VM, 0, - bcmmbox_intr, sc); - if (sc->sc_intrh == NULL) { - aprint_error_dev(self, "failed to establish interrupt %s\n", - intrstr); - return; - } - aprint_normal_dev(self, "interrupting on %s\n", intrstr); - - /* enable mbox interrupt */ - bus_space_write_4(sc->sc_iot, sc->sc_ioh, BCM2835_MBOX_CFG, - BCM2835_MBOX_CFG_DATAIRQEN); - - if (bcm2835mbox_sc == NULL) - bcm2835mbox_sc = sc; - - baa.baa_dmat = sc->sc_dmat; - sc->sc_platdev = config_found_ia(self, "bcmmboxbus", , NULL); -} - static int bcmmbox_intr1(struct bcm2835mbox_softc *sc, int cv) { @@ -175,7 +82,29 @@ bcmmbox_intr1(struct bcm2835mbox_softc * return ret; } -static int +void +bcmmbox_attach(struct bcm2835mbox_softc *sc) +{ + struct bcmmbox_attach_args baa; + int i; + + if (bcm2835mbox_sc == NULL) + bcm2835mbox_sc = sc; + + mutex_init(>sc_lock, MUTEX_DEFAULT, IPL_NONE); + mutex_init(>sc_intr_lock, MUTEX_DEFAULT, IPL_VM); + for (i = 0; i < BCM2835_MBOX_NUMCHANNELS; ++i) + cv_init(>sc_chan[i], "bcmmbox"); + + /* enable mbox interrupt */ + bus_space_write_4(sc->sc_iot, sc->sc_ioh, BCM2835_MBOX_CFG, + BCM2835_MBOX_CFG_DATAIRQEN); + + baa.baa_dmat = sc->sc_dmat; + sc->sc_platdev = config_found_ia(sc->sc_dev, "bcmmboxbus", , NULL); +} + +int
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Mon Dec 30 16:41:38 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_emmc.c Log Message: Oops, don't match brcm,bcm2711-emmc2 here. Thanks to jmcneill for pointing out my mistake To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.34 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.35 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.34 Mon Dec 30 15:31:15 2019 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Mon Dec 30 16:41:38 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.34 2019/12/30 15:31:15 skrll Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.35 2019/12/30 16:41:38 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.34 2019/12/30 15:31:15 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.35 2019/12/30 16:41:38 skrll Exp $"); #include "bcmdmac.h" @@ -97,7 +97,6 @@ bcmemmc_match(device_t parent, struct cf { const char * const compatible[] = { "brcm,bcm2835-sdhci", - "brcm,bcm2711-emmc2", NULL }; struct fdt_attach_args * const faa = aux;
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Mon Dec 30 16:19:27 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835reg.h bcm283x_platform.c bcm283x_platform.h Log Message: Fix up ARM_LOCAL for 2711 so that it works now. To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/sys/arch/arm/broadcom/bcm2835reg.h cvs rdiff -u -r1.30 -r1.31 src/sys/arch/arm/broadcom/bcm283x_platform.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.28 src/sys/arch/arm/broadcom/bcm2835reg.h:1.29 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.28 Thu Dec 26 11:09:11 2019 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Mon Dec 30 16:19:27 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.28 2019/12/26 11:09:11 skrll Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.29 2019/12/30 16:19:27 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -202,8 +202,14 @@ #define BCM2835_UART0_CLK 300 +#define BCM2711_ARM_LOCAL_BASE_BUS 0x4000 #define BCM2711_ARM_LOCAL_BASE 0xff80 -#define BCM2711_ARM_LOCAL_SIZE 0x0010 /* 1MByte */ +#define BCM2711_ARM_LOCAL_SIZE 0x0010 /* 1MBytes */ + +#define BCM2711_ARM_LOCAL_PHYS_TO_BUS(a) \ +((a) - BCM2711_ARM_LOCAL_BASE + BCM2711_ARM_LOCAL_BASE_BUS) +#define BCM2711_ARM_LOCAL_BUS_TO_PHYS(a) \ +((a) - BCM2711_ARM_LOCAL_BASE_BUS + BCM2711_ARM_LOCAL_BASE) #define BCM2836_ARM_LOCAL_BASE 0x4000 #define BCM2836_ARM_LOCAL_SIZE 0x1000 /* 4KBytes */ Index: src/sys/arch/arm/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.30 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.31 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.30 Mon Dec 30 16:06:29 2019 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Mon Dec 30 16:19:27 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.30 2019/12/30 16:06:29 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.31 2019/12/30 16:19:27 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.30 2019/12/30 16:06:29 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.31 2019/12/30 16:19:27 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -187,9 +187,9 @@ bcm2711_bus_to_phys(bus_addr_t ba) ba < BCM283X_PERIPHERALS_BASE_BUS + BCM283X_PERIPHERALS_SIZE) return BCM2711_PERIPHERALS_BUS_TO_PHYS(ba); - if (ba >= BCM2711_ARM_LOCAL_BASE && - ba < BCM2711_ARM_LOCAL_BASE + BCM2711_ARM_LOCAL_SIZE) - return ba; + if (ba >= BCM2711_ARM_LOCAL_BASE_BUS && + ba < BCM2711_ARM_LOCAL_BASE_BUS + BCM2711_ARM_LOCAL_SIZE) + return BCM2711_ARM_LOCAL_BUS_TO_PHYS(ba); return ba & ~BCM2835_BUSADDR_CACHE_MASK; } @@ -333,7 +333,7 @@ bcm2711_platform_devmap(void) BCM2711_ARM_LOCAL_SIZE), #if defined(MULTIPROCESSOR) && defined(__aarch64__) /* for fdt cpu spin-table */ - DEVMAP_ENTRY(BCM2836_ARM_SMP_VBASE, BCM2836_ARM_SMP_BASE, + DEVMAP_ENTRY(BCM2711_ARM_SMP_VBASE, BCM2836_ARM_SMP_BASE, BCM2836_ARM_SMP_SIZE), #endif DEVMAP_ENTRY_END Index: src/sys/arch/arm/broadcom/bcm283x_platform.h diff -u src/sys/arch/arm/broadcom/bcm283x_platform.h:1.4 src/sys/arch/arm/broadcom/bcm283x_platform.h:1.5 --- src/sys/arch/arm/broadcom/bcm283x_platform.h:1.4 Tue Dec 24 14:10:51 2019 +++ src/sys/arch/arm/broadcom/bcm283x_platform.h Mon Dec 30 16:19:27 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.h,v 1.4 2019/12/24 14:10:51 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.h,v 1.5 2019/12/30 16:19:27 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -58,4 +58,7 @@ #define BCM2711_ARM_LOCAL_VBASE \ BCM2711_IOPHYSTOVIRT(BCM2711_ARM_LOCAL_BASE) +#define BCM2711_ARM_SMP_VBASE \ + BCM2711_IOPHYSTOVIRT(BCM2836_ARM_SMP_BASE) + #endif /* _ARM_BCM2835REG_PLATFORM_H_ */
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Mon Dec 30 16:06:29 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Invalidate the cache just before trying to read the results from the firmware as RPI4 A72s can fill the cache with speculation To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.29 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.30 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.29 Mon Dec 30 15:36:37 2019 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Mon Dec 30 16:06:29 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.29 2019/12/30 15:36:37 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.30 2019/12/30 16:06:29 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.29 2019/12/30 15:36:37 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.30 2019/12/30 16:06:29 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -744,6 +744,13 @@ bcm283x_bootparams(bus_space_tag_t iot, bcm2835_mbox_read(iot, ioh, BCMMBOX_CHANARM2VC, ); + /* + * RPI4 has Cortex A72 processors which do speculation, so + * we need to invalidate the cache for an updates done by + * the firmware + */ + cpu_dcache_inv_range((vaddr_t), sizeof(vb)); + if (!vcprop_buffer_success_p(_hdr)) { bootconfig.dramblocks = 1; bootconfig.dram[0].address = 0x0;
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Mon Dec 30 15:36:37 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_cprman.c bcm2835var.h bcm283x_platform.c Log Message: Add emmc2 clock goop from mlelstv@ To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/broadcom/bcm2835_cprman.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/broadcom/bcm2835var.h cvs rdiff -u -r1.28 -r1.29 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm2835_cprman.c diff -u src/sys/arch/arm/broadcom/bcm2835_cprman.c:1.3 src/sys/arch/arm/broadcom/bcm2835_cprman.c:1.4 --- src/sys/arch/arm/broadcom/bcm2835_cprman.c:1.3 Tue Dec 24 13:40:56 2019 +++ src/sys/arch/arm/broadcom/bcm2835_cprman.c Mon Dec 30 15:36:37 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_cprman.c,v 1.3 2019/12/24 13:40:56 skrll Exp $ */ +/* $NetBSD: bcm2835_cprman.c,v 1.4 2019/12/30 15:36:37 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_cprman.c,v 1.3 2019/12/24 13:40:56 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_cprman.c,v 1.4 2019/12/30 15:36:37 skrll Exp $"); #include #include @@ -56,6 +56,7 @@ enum { CPRMAN_CLOCK_PERIIMAGE = 29, CPRMAN_CLOCK_PWM = 30, CPRMAN_CLOCK_PCM = 31, + CPRMAN_CLOCK_EMMC2 = 51, CPRMAN_NCLOCK }; @@ -133,6 +134,8 @@ cprman_get_rate(void *priv, struct clk * return bcm283x_clk_get_rate_vpu(); case CPRMAN_CLOCK_EMMC: return bcm283x_clk_get_rate_emmc(); + case CPRMAN_CLOCK_EMMC2: + return bcm283x_clk_get_rate_emmc2(); default: panic("unsupported clock id %d\n", clk->id); } @@ -179,6 +182,7 @@ cprman_attach(device_t parent, device_t cprman_add_clock(sc, CPRMAN_CLOCK_UART, "uart"); cprman_add_clock(sc, CPRMAN_CLOCK_VPU, "vpu"); cprman_add_clock(sc, CPRMAN_CLOCK_EMMC, "emmc"); + cprman_add_clock(sc, CPRMAN_CLOCK_EMMC2, "emmc2"); aprint_naive("\n"); aprint_normal(": BCM283x Clock Controller\n"); Index: src/sys/arch/arm/broadcom/bcm2835var.h diff -u src/sys/arch/arm/broadcom/bcm2835var.h:1.4 src/sys/arch/arm/broadcom/bcm2835var.h:1.5 --- src/sys/arch/arm/broadcom/bcm2835var.h:1.4 Sun Apr 1 04:35:03 2018 +++ src/sys/arch/arm/broadcom/bcm2835var.h Mon Dec 30 15:36:37 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835var.h,v 1.4 2018/04/01 04:35:03 ryo Exp $ */ +/* $NetBSD: bcm2835var.h,v 1.5 2019/12/30 15:36:37 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -49,5 +49,6 @@ void bcm2836_cpu_hatch(struct cpu_info * u_int bcm283x_clk_get_rate_uart(void); u_int bcm283x_clk_get_rate_vpu(void); u_int bcm283x_clk_get_rate_emmc(void); +u_int bcm283x_clk_get_rate_emmc2(void); #endif /* _ARM_BROADCOM_BCM2835_VAR_H_ */ Index: src/sys/arch/arm/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.28 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.29 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.28 Tue Dec 24 14:10:51 2019 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Mon Dec 30 15:36:37 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.28 2019/12/24 14:10:51 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.29 2019/12/30 15:36:37 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.28 2019/12/24 14:10:51 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.29 2019/12/30 15:36:37 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -402,6 +402,7 @@ static struct { struct vcprop_tag_clockrate vbt_emmcclockrate; struct vcprop_tag_clockrate vbt_armclockrate; struct vcprop_tag_clockrate vbt_vpuclockrate; + struct vcprop_tag_clockrate vbt_emmc2clockrate; struct vcprop_tag end; } vb __cacheline_aligned = { .vb_hdr = { @@ -488,6 +489,14 @@ static struct { }, .id = VCPROP_CLK_CORE }, + .vbt_emmc2clockrate = { + .tag = { + .vpt_tag = VCPROPTAG_GET_CLOCKRATE, + .vpt_len = VCPROPTAG_LEN(vb.vbt_emmc2clockrate), + .vpt_rcode = VCPROPTAG_REQUEST + }, + .id = VCPROP_CLK_EMMC2 + }, .end = { .vpt_tag = VCPROPTAG_NULL } @@ -639,6 +648,17 @@ bcm283x_clk_get_rate_emmc(void) return 0; } +u_int +bcm283x_clk_get_rate_emmc2(void) +{ + + if (vcprop_tag_success_p(_emmc2clockrate.tag) && + vb.vbt_emmc2clockrate.rate > 0) { + return vb.vbt_emmc2clockrate.rate; + } + return 0; +} + static void @@ -758,6 +778,15 @@ bcm283x_bootparams(bus_space_tag_t iot, if (vcprop_tag_success_p(_armclockrate.tag)) printf("%s: arm clock%d\n", __func__, vb.vbt_armclockrate.rate); + if (vcprop_tag_success_p(_vpuclockrate.tag)) + printf("%s: vpu clock%d\n", __func__, + vb.vbt_vpuclockrate.rate); + if (vcprop_tag_success_p(_emmcclockrate.tag)) + printf("%s: emmc clock %d\n",
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Mon Dec 30 15:31:15 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_emmc.c Log Message: Match brcm,bcm2711-emmc2 To generate a diff of this commit: cvs rdiff -u -r1.33 -r1.34 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.33 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.34 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.33 Sun Aug 19 09:18:48 2018 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Mon Dec 30 15:31:15 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.33 2018/08/19 09:18:48 rin Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.34 2019/12/30 15:31:15 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.33 2018/08/19 09:18:48 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.34 2019/12/30 15:31:15 skrll Exp $"); #include "bcmdmac.h" @@ -97,6 +97,7 @@ bcmemmc_match(device_t parent, struct cf { const char * const compatible[] = { "brcm,bcm2835-sdhci", + "brcm,bcm2711-emmc2", NULL }; struct fdt_attach_args * const faa = aux;
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Thu Dec 26 11:09:11 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c bcm2835reg.h Log Message: Use PIC_IRQBASE_ALLOC for all pic_add calls and track/use each cpu irqbase To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/sys/arch/arm/broadcom/bcm2835_intr.c cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/broadcom/bcm2835reg.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.28 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.29 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.28 Wed Dec 25 10:49:29 2019 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Thu Dec 26 11:09:11 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.28 2019/12/25 10:49:29 skrll Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.29 2019/12/26 11:09:11 skrll Exp $ */ /*- * Copyright (c) 2012, 2015, 2019 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.28 2019/12/25 10:49:29 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.29 2019/12/26 11:09:11 skrll Exp $"); #define _INTR_PRIVATE @@ -99,7 +99,10 @@ static int bcm2835_icu_match(device_t, static void bcm2835_icu_attach(device_t, device_t, void *); static int bcm2835_int_base; -static int bcm2836mp_int_base; +static int bcm2836mp_int_base[BCM2836_NCPUS]; + +#define BCM2835_INT_BASE bcm2835_int_base +#define BCM2836_INT_BASECPUN(n) bcm2836mp_int_base[(n)] static void bcm2835_set_priority(struct pic_softc *pic, int ipl) @@ -710,9 +713,9 @@ bcm2836mp_pic_find_pending_irqs(struct p BCM2836_LOCAL_INTC_IRQPENDINGN(cpuid)); lpending &= ~BCM2836_INTBIT_GPUPENDING; - if (lpending & BCM2836MP_ALL_IRQS) { - ipl |= pic_mark_pending_sources(pic, 0 /* BCM2836_INT_LOCALBASE */, - lpending & BCM2836MP_ALL_IRQS); + const uint32_t allirqs = lpending & BCM2836MP_ALL_IRQS; + if (allirqs) { + ipl |= pic_mark_pending_sources(pic, 0, allirqs); } return ipl; @@ -830,11 +833,7 @@ bcm2836mp_intr_init(void *priv, struct c snprintf(suffix, sizeof(suffix), "#%lu", cpuid); strlcat(pic->pic_name, suffix, sizeof(pic->pic_name)); #endif - if (cpuid == 0) { - bcm2836mp_int_base = pic_add(pic, PIC_IRQBASE_ALLOC); - } else { - pic_add(pic, BCM2836_INT_BASECPUN(cpuid)); - } + bcm2836mp_int_base[cpuid] = pic_add(pic, PIC_IRQBASE_ALLOC); #if defined(MULTIPROCESSOR) intr_establish(BCM2836_INT_MAILBOX0_CPUN(cpuid), IPL_HIGH, Index: src/sys/arch/arm/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.27 src/sys/arch/arm/broadcom/bcm2835reg.h:1.28 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.27 Thu Dec 26 08:27:43 2019 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Thu Dec 26 11:09:11 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.27 2019/12/26 08:27:43 skrll Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.28 2019/12/26 11:09:11 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -139,14 +139,9 @@ #define BCM2835_INTC_ENABLEBASE (BCM2835_INTC_BASE + 0x10) #define BCM2835_INTC_DISABLEBASE (BCM2835_INTC_BASE + 0x1c) -#define BCM2835_INT_BASE bcm2835_int_base - #define BCM2836_NCPUS 4 #define BCM2836_NIRQPERCPU 32 -#define BCM2836_INT_LOCALBASE bcm2836mp_int_base -#define BCM2836_INT_BASECPUN(n) (BCM2836_INT_LOCALBASE + ((n) * BCM2836_NIRQPERCPU)) - #define BCM2836_INT_CNTPSIRQ 0 #define BCM2836_INT_CNTPNSIRQ 1 #define BCM2836_INT_CNTHPIRQ 2
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Thu Dec 26 08:27:43 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835reg.h Log Message: Use PIC_IRQBASE_ALLOC and allow conditional attachment of interrupt handlers (for RPI4) (missing from previous commit) To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/broadcom/bcm2835reg.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/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.26 src/sys/arch/arm/broadcom/bcm2835reg.h:1.27 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.26 Tue Dec 24 14:10:51 2019 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Thu Dec 26 08:27:43 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.26 2019/12/24 14:10:51 skrll Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.27 2019/12/26 08:27:43 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -139,18 +139,13 @@ #define BCM2835_INTC_ENABLEBASE (BCM2835_INTC_BASE + 0x10) #define BCM2835_INTC_DISABLEBASE (BCM2835_INTC_BASE + 0x1c) -#if defined(SOC_BCM2836) -#define BCM2835_INT_BASE BCM2836_NIRQ -#else -#define BCM2835_INT_BASE 0 -#endif /* !BCM2836 */ +#define BCM2835_INT_BASE bcm2835_int_base #define BCM2836_NCPUS 4 #define BCM2836_NIRQPERCPU 32 -#define BCM2836_INT_LOCALBASE 0 +#define BCM2836_INT_LOCALBASE bcm2836mp_int_base #define BCM2836_INT_BASECPUN(n) (BCM2836_INT_LOCALBASE + ((n) * BCM2836_NIRQPERCPU)) -#define BCM2836_NIRQ (BCM2836_NIRQPERCPU * BCM2836_NCPUS) #define BCM2836_INT_CNTPSIRQ 0 #define BCM2836_INT_CNTPNSIRQ 1
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Wed Dec 25 10:49:29 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c Log Message: Use PIC_IRQBASE_ALLOC and allow conditional attachment of interrupt handlers (for RPI4) To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/broadcom/bcm2835_intr.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.27 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.28 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.27 Fri Nov 29 17:44:27 2019 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Wed Dec 25 10:49:29 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.27 2019/11/29 17:44:27 thorpej Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.28 2019/12/25 10:49:29 skrll Exp $ */ /*- * Copyright (c) 2012, 2015, 2019 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.27 2019/11/29 17:44:27 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.28 2019/12/25 10:49:29 skrll Exp $"); #define _INTR_PRIVATE @@ -98,6 +98,9 @@ static bool bcm2836mp_icu_fdt_intrstr(de static int bcm2835_icu_match(device_t, cfdata_t, void *); static void bcm2835_icu_attach(device_t, device_t, void *); +static int bcm2835_int_base; +static int bcm2836mp_int_base; + static void bcm2835_set_priority(struct pic_softc *pic, int ipl) { @@ -314,7 +317,7 @@ bcm2835_icu_attach(device_t parent, devi bcmicu_sc = sc; sc->sc_ioh = ioh; sc->sc_phandle = phandle; - pic_add(_pic, BCM2835_INT_BASE); + bcm2835_int_base = pic_add(_pic, PIC_IRQBASE_ALLOC); ifuncs = _fdt_funcs; } @@ -827,7 +830,11 @@ bcm2836mp_intr_init(void *priv, struct c snprintf(suffix, sizeof(suffix), "#%lu", cpuid); strlcat(pic->pic_name, suffix, sizeof(pic->pic_name)); #endif - pic_add(pic, BCM2836_INT_BASECPUN(cpuid)); + if (cpuid == 0) { + bcm2836mp_int_base = pic_add(pic, PIC_IRQBASE_ALLOC); + } else { + pic_add(pic, BCM2836_INT_BASECPUN(cpuid)); + } #if defined(MULTIPROCESSOR) intr_establish(BCM2836_INT_MAILBOX0_CPUN(cpuid), IPL_HIGH,
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Tue Dec 24 14:10:51 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835reg.h bcm283x_platform.c bcm283x_platform.h Log Message: We follow linux mainline and they're using 2711 and not 2838 for RPI4 To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.26 src/sys/arch/arm/broadcom/bcm2835reg.h cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/broadcom/bcm283x_platform.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.25 src/sys/arch/arm/broadcom/bcm2835reg.h:1.26 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.25 Wed Sep 25 18:05:39 2019 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Tue Dec 24 14:10:51 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.25 2019/09/25 18:05:39 skrll Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.26 2019/12/24 14:10:51 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -44,16 +44,16 @@ #error Must define SOC_BCM2835 or SOC_BCM2836, and not both #endif -#define BCM2838_PERIPHERALS_BASE 0xfe00 +#define BCM2711_PERIPHERALS_BASE 0xfe00 #define BCM2836_PERIPHERALS_BASE 0x3f00 #define BCM2835_PERIPHERALS_BASE 0x2000 #define BCM283X_PERIPHERALS_SIZE 0x0100 /* 16MBytes */ #define BCM283X_PERIPHERALS_BASE_BUS 0x7e00 -#define BCM2838_PERIPHERALS_PHYS_TO_BUS(a) \ -((a) - BCM2838_PERIPHERALS_BASE + BCM283X_PERIPHERALS_BASE_BUS) -#define BCM2838_PERIPHERALS_BUS_TO_PHYS(a) \ -((a) - BCM283X_PERIPHERALS_BASE_BUS + BCM2838_PERIPHERALS_BASE) +#define BCM2711_PERIPHERALS_PHYS_TO_BUS(a) \ +((a) - BCM2711_PERIPHERALS_BASE + BCM283X_PERIPHERALS_BASE_BUS) +#define BCM2711_PERIPHERALS_BUS_TO_PHYS(a) \ +((a) - BCM283X_PERIPHERALS_BASE_BUS + BCM2711_PERIPHERALS_BASE) #define BCM2836_PERIPHERALS_PHYS_TO_BUS(a) \ ((a) - BCM2836_PERIPHERALS_BASE + BCM283X_PERIPHERALS_BASE_BUS) @@ -212,8 +212,8 @@ #define BCM2835_UART0_CLK 300 -#define BCM2838_ARM_LOCAL_BASE 0xff80 -#define BCM2838_ARM_LOCAL_SIZE 0x0010 /* 1MByte */ +#define BCM2711_ARM_LOCAL_BASE 0xff80 +#define BCM2711_ARM_LOCAL_SIZE 0x0010 /* 1MByte */ #define BCM2836_ARM_LOCAL_BASE 0x4000 #define BCM2836_ARM_LOCAL_SIZE 0x1000 /* 4KBytes */ Index: src/sys/arch/arm/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.27 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.28 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.27 Sun Dec 22 12:21:45 2019 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Tue Dec 24 14:10:51 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.27 2019/12/22 12:21:45 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.28 2019/12/24 14:10:51 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.27 2019/12/22 12:21:45 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.28 2019/12/24 14:10:51 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -113,7 +113,7 @@ __KERNEL_RCSID(0, "$NetBSD: bcm283x_plat void bcm2835_platform_early_putchar(char c); void bcm2836_platform_early_putchar(char c); void bcm2837_platform_early_putchar(char c); -void bcm2838_platform_early_putchar(char c); +void bcm2711_platform_early_putchar(char c); extern void bcmgenfb_set_console_dev(device_t dev); void bcmgenfb_set_ioctl(int(*)(void *, void *, u_long, void *, int, struct lwp *)); @@ -130,19 +130,19 @@ bs_protos(bcm2835); bs_protos(bcm2835_a4x); bs_protos(bcm2836); bs_protos(bcm2836_a4x); -bs_protos(bcm2838); -bs_protos(bcm2838_a4x); +bs_protos(bcm2711); +bs_protos(bcm2711_a4x); struct bus_space bcm2835_bs_tag; struct bus_space bcm2835_a4x_bs_tag; struct bus_space bcm2836_bs_tag; struct bus_space bcm2836_a4x_bs_tag; -struct bus_space bcm2838_bs_tag; -struct bus_space bcm2838_a4x_bs_tag; +struct bus_space bcm2711_bs_tag; +struct bus_space bcm2711_a4x_bs_tag; static paddr_t bcm2835_bus_to_phys(bus_addr_t); static paddr_t bcm2836_bus_to_phys(bus_addr_t); -static paddr_t bcm2838_bus_to_phys(bus_addr_t); +static paddr_t bcm2711_bus_to_phys(bus_addr_t); #ifdef VERBOSE_INIT_ARM #define VPRINTF(...) printf(__VA_ARGS__) @@ -179,16 +179,16 @@ bcm2836_bus_to_phys(bus_addr_t ba) } static paddr_t -bcm2838_bus_to_phys(bus_addr_t ba) +bcm2711_bus_to_phys(bus_addr_t ba) { /* Attempt to find the PA device mapping */ if (ba >= BCM283X_PERIPHERALS_BASE_BUS && ba < BCM283X_PERIPHERALS_BASE_BUS + BCM283X_PERIPHERALS_SIZE) - return BCM2838_PERIPHERALS_BUS_TO_PHYS(ba); + return BCM2711_PERIPHERALS_BUS_TO_PHYS(ba); - if (ba >= BCM2838_ARM_LOCAL_BASE && - ba < BCM2838_ARM_LOCAL_BASE + BCM2838_ARM_LOCAL_SIZE) + if (ba >=
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Tue Dec 24 13:40:56 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_cprman.c Log Message: Match brcm,bcm2711-cprman To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/broadcom/bcm2835_cprman.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/broadcom/bcm2835_cprman.c diff -u src/sys/arch/arm/broadcom/bcm2835_cprman.c:1.2 src/sys/arch/arm/broadcom/bcm2835_cprman.c:1.3 --- src/sys/arch/arm/broadcom/bcm2835_cprman.c:1.2 Sun Sep 9 07:21:17 2018 +++ src/sys/arch/arm/broadcom/bcm2835_cprman.c Tue Dec 24 13:40:56 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_cprman.c,v 1.2 2018/09/09 07:21:17 aymeric Exp $ */ +/* $NetBSD: bcm2835_cprman.c,v 1.3 2019/12/24 13:40:56 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_cprman.c,v 1.2 2018/09/09 07:21:17 aymeric Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_cprman.c,v 1.3 2019/12/24 13:40:56 skrll Exp $"); #include #include @@ -155,7 +155,10 @@ cprman_add_clock(struct cprman_softc *sc static int cprman_match(device_t parent, cfdata_t cf, void *aux) { - const char * const compatible[] = { "brcm,bcm2835-cprman", NULL }; + const char * const compatible[] = { + "brcm,bcm2835-cprman", + "brcm,bcm2711-cprman", + NULL }; const struct fdt_attach_args *faa = aux; return of_match_compatible(faa->faa_phandle, compatible);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: thorpej Date: Sun Dec 22 23:24:56 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_bsc.c Log Message: Rewrite the bcm2835 i2c driver as an interrupt-driven state machine. This improves general system responsiveness when tranferring large amounts of data on a single-core Pi board. This also includes: Cleanup i2c bus acquire / release, centralizing all of the logic into iic_acquire_bus() / iic_release_bus(). "acquire" and "release" hooks no longer need to be provided by back-end controller drivers (only if they need special handling, e.g. powering on the i2c controller). This results in the removal of a bunch of rendundant code from each back-end controller driver. Assert that we are not in hard interrupt context in iic_acquire_bus(), iic_exec(), and iic_release_bus(). To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/broadcom/bcm2835_bsc.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/broadcom/bcm2835_bsc.c diff -u src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.13 src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.14 --- src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.13 Sun Jul 1 21:23:16 2018 +++ src/sys/arch/arm/broadcom/bcm2835_bsc.c Sun Dec 22 23:24:56 2019 @@ -1,6 +1,7 @@ -/* $NetBSD: bcm2835_bsc.c,v 1.13 2018/07/01 21:23:16 jmcneill Exp $ */ +/* $NetBSD: bcm2835_bsc.c,v 1.14 2019/12/22 23:24:56 thorpej Exp $ */ /* + * Copyright (c) 2019 Jason R. Thorpe * Copyright (c) 2012 Jonathan A. Kollasch * All rights reserved. * @@ -27,11 +28,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.13 2018/07/01 21:23:16 jmcneill Exp $"); - -#if defined(_KERNEL_OPT) -#include "opt_kernhist.h" -#endif +__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.14 2019/12/22 23:24:56 thorpej Exp $"); #include #include @@ -39,7 +36,6 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc. #include #include #include -#include #include #include @@ -49,42 +45,118 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc. #include -KERNHIST_DEFINE(bsciichist); +typedef enum { + BSC_EXEC_STATE_IDLE = 0, + BSC_EXEC_STATE_SEND_ADDR = 1, + BSC_EXEC_STATE_SEND_CMD = 2, + BSC_EXEC_STATE_SEND_DATA = 3, + BSC_EXEC_STATE_RECV_DATA = 4, + BSC_EXEC_STATE_DONE = 5, + BSC_EXEC_STATE_ERROR = 6, +} bsc_exec_state_t; + +#define BSC_EXEC_STATE_SENDING(sc) \ + ((sc)->sc_exec_state >= BSC_EXEC_STATE_SEND_ADDR && \ + (sc)->sc_exec_state <= BSC_EXEC_STATE_SEND_DATA) + +#define BSC_EXEC_STATE_RECEIVING(sc) \ + ((sc)->sc_exec_state == BSC_EXEC_STATE_RECV_DATA) struct bsciic_softc { device_t sc_dev; bus_space_tag_t sc_iot; bus_space_handle_t sc_ioh; struct i2c_controller sc_i2c; - kmutex_t sc_buslock; void *sc_inth; struct clk *sc_clk; u_int sc_frequency; u_int sc_clkrate; + + kmutex_t sc_intr_lock; + kcondvar_t sc_intr_wait; + + struct { + i2c_op_t op; + i2c_addr_t addr; + const void *cmdbuf; + size_t cmdlen; + void *databuf; + size_t datalen; + int flags; + } sc_exec; + + /* + * Everything below here protected by the i2c controller lock + * /and/ sc_intr_lock (if we're using interrupts). + */ + + bsc_exec_state_t sc_exec_state; + + uint8_t *sc_buf; + size_t sc_bufpos; + size_t sc_buflen; + + uint32_t sc_c_bits; + bool sc_expecting_interrupt; +}; + +static void bsciic_exec_func_idle(struct bsciic_softc * const); +static void bsciic_exec_func_send_addr(struct bsciic_softc * const); +static void bsciic_exec_func_send_cmd(struct bsciic_softc * const); +static void bsciic_exec_func_send_data(struct bsciic_softc * const); +static void bsciic_exec_func_recv_data(struct bsciic_softc * const); +static void bsciic_exec_func_done(struct bsciic_softc * const); +static void bsciic_exec_func_error(struct bsciic_softc * const); + +const struct { + void (*func)(struct bsciic_softc * const); + uint32_t c_bits; + uint32_t s_bits; +} bsciic_exec_state_data[] = { + [BSC_EXEC_STATE_IDLE] = { + .func = bsciic_exec_func_idle, + }, + [BSC_EXEC_STATE_SEND_ADDR] = { + .func = bsciic_exec_func_send_addr, + }, + [BSC_EXEC_STATE_SEND_CMD] = { + .func = bsciic_exec_func_send_cmd, + .c_bits = BSC_C_INTT, + .s_bits = BSC_S_TXW, + }, + [BSC_EXEC_STATE_SEND_DATA] = { + .func = bsciic_exec_func_send_data, + .c_bits = BSC_C_INTT, + .s_bits = BSC_S_TXW, + }, + [BSC_EXEC_STATE_RECV_DATA] = { + .func = bsciic_exec_func_recv_data, + .c_bits = BSC_C_READ | BSC_C_INTR, + .s_bits = BSC_S_RXR, + }, + [BSC_EXEC_STATE_DONE] = { + .func = bsciic_exec_func_done, + }, + [BSC_EXEC_STATE_ERROR] = { + .func = bsciic_exec_func_error, + }, }; static int bsciic_match(device_t, cfdata_t, void *); static void bsciic_attach(device_t, device_t, void *); -void bsciic_dump_regs(struct bsciic_softc * const); - static int bsciic_acquire_bus(void *, int); static void bsciic_release_bus(void *, int); static int bsciic_exec(void *, i2c_op_t,
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Sun Dec 22 12:21:45 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Add brcm,bcm2711 as an alias for brcm,bcm2838 To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.26 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.27 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.26 Sat Sep 28 07:39:30 2019 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Sun Dec 22 12:21:45 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.26 2019/09/28 07:39:30 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.27 2019/12/22 12:21:45 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.26 2019/09/28 07:39:30 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.27 2019/12/22 12:21:45 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -1516,4 +1516,5 @@ static const struct arm_platform bcm2838 ARM_PLATFORM(bcm2836, "brcm,bcm2836", _platform); ARM_PLATFORM(bcm2837, "brcm,bcm2837", _platform); ARM_PLATFORM(bcm2838, "brcm,bcm2838", _platform); +ARM_PLATFORM(bcm2711, "brcm,bcm2711", _platform); #endif
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Fri May 10 08:28:50 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_gpio.c Log Message: Take a lead from sys/dev/gpio/gpio.c:gpio_intr_str and report edge vs level. etc interrupt type. >From yarl-baudig To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/broadcom/bcm2835_gpio.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/broadcom/bcm2835_gpio.c diff -u src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.11 src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.12 --- src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.11 Sun Mar 3 16:29:00 2019 +++ src/sys/arch/arm/broadcom/bcm2835_gpio.c Fri May 10 08:28:50 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_gpio.c,v 1.11 2019/03/03 16:29:00 skrll Exp $ */ +/* $NetBSD: bcm2835_gpio.c,v 1.12 2019/05/10 08:28:50 skrll Exp $ */ /*- * Copyright (c) 2013, 2014, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.11 2019/03/03 16:29:00 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.12 2019/05/10 08:28:50 skrll Exp $"); /* * Driver for BCM2835 GPIO @@ -671,16 +671,40 @@ bcmgpio_fdt_intrstr(device_t dev, u_int { /* 1st cell is the GPIO number */ - /* 3rd cell is flags */ + /* 2nd cell is flags */ if (!specifier) return (false); const u_int bank = be32toh(specifier[0]) / 32; const u_int pin = be32toh(specifier[0]) % 32; + const u_int type = be32toh(specifier[1]) & 0xf; + char const* typestr; if (bank >= BCMGPIO_NBANKS) return (false); + switch (type) { + case FDT_INTR_TYPE_DOUBLE_EDGE: + typestr = "double edge"; + break; + case FDT_INTR_TYPE_POS_EDGE: + typestr = "positive edge"; + break; + case FDT_INTR_TYPE_NEG_EDGE: + typestr = "negative edge"; + break; + case FDT_INTR_TYPE_HIGH_LEVEL: + typestr = "high level"; + break; + case FDT_INTR_TYPE_LOW_LEVEL: + typestr = "low level"; + break; + default: + aprint_error_dev(dev, "%s: unsupported irq type 0x%x\n", + __func__, type); + + return (false); + } - snprintf(buf, buflen, "GPIO %u", (bank * 32) + pin); + snprintf(buf, buflen, "GPIO %u (%s)", (bank * 32) + pin, typestr); return (true); }
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: isaki Date: Tue Apr 2 03:52:17 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_vcaudio.c Log Message: Fix indent. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/broadcom/bcm2835_vcaudio.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/broadcom/bcm2835_vcaudio.c diff -u src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.12 src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.13 --- src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.12 Mon Sep 3 16:29:23 2018 +++ src/sys/arch/arm/broadcom/bcm2835_vcaudio.c Tue Apr 2 03:52:17 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_vcaudio.c,v 1.12 2018/09/03 16:29:23 riastradh Exp $ */ +/* $NetBSD: bcm2835_vcaudio.c,v 1.13 2019/04/02 03:52:17 isaki Exp $ */ /*- * Copyright (c) 2013 Jared D. McNeill @@ -31,7 +31,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.12 2018/09/03 16:29:23 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.13 2019/04/02 03:52:17 isaki Exp $"); #include #include @@ -486,7 +486,7 @@ vcaudio_worker(void *priv) msg.u.write.cookie = intrarg; msg.u.write.silence = 0; - block = (uint8_t *)sc->sc_pstart + sc->sc_ppos; + block = (uint8_t *)sc->sc_pstart + sc->sc_ppos; resid = count; off = 0; @@ -521,7 +521,7 @@ vcaudio_worker(void *priv) sc->sc_ppos = 0; if (!sc->sc_started) { - ++sc->sc_pblkcnt; + ++sc->sc_pblkcnt; if (sc->sc_pblkcnt == VCAUDIO_PREFILLCOUNT) {
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: ryo Date: Wed Mar 27 05:47:50 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c Log Message: Fix to show counters of "bcm2836 pic" by "intrctl list" correctly. To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/broadcom/bcm2835_intr.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.19 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.20 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.19 Fri Mar 1 14:53:12 2019 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Wed Mar 27 05:47:50 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.19 2019/03/01 14:53:12 skrll Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.20 2019/03/27 05:47:50 ryo Exp $ */ /*- * Copyright (c) 2012, 2015 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.19 2019/03/01 14:53:12 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.20 2019/03/27 05:47:50 ryo Exp $"); #define _INTR_PRIVATE @@ -673,6 +673,14 @@ bcm2836mp_intr_init(void *priv, struct c #if defined(MULTIPROCESSOR) pic->pic_cpus = ci->ci_kcpuset; + + /* + * Append "#n" to avoid duplication of .pic_name[] + * It should be a unique id for intr_get_source() + */ + char suffix[sizeof("#0")]; + snprintf(suffix, sizeof(suffix), "#%lu", cpuid); + strlcat(pic->pic_name, suffix, sizeof(pic->pic_name)); #endif pic_add(pic, BCM2836_INT_BASECPUN(cpuid));
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Sun Mar 3 16:29:00 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_gpio.c Log Message: Trailing whitespace To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/broadcom/bcm2835_gpio.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/broadcom/bcm2835_gpio.c diff -u src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.10 src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.11 --- src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.10 Thu Feb 7 21:16:35 2019 +++ src/sys/arch/arm/broadcom/bcm2835_gpio.c Sun Mar 3 16:29:00 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_gpio.c,v 1.10 2019/02/07 21:16:35 mlelstv Exp $ */ +/* $NetBSD: bcm2835_gpio.c,v 1.11 2019/03/03 16:29:00 skrll Exp $ */ /*- * Copyright (c) 2013, 2014, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.10 2019/02/07 21:16:35 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.11 2019/03/03 16:29:00 skrll Exp $"); /* * Driver for BCM2835 GPIO @@ -414,7 +414,7 @@ bcmgpio_intr(void *arg) if (!mpsafe) KERNEL_UNLOCK_ONE(curlwp); } - + /* * Now that all of the handlers have been called, * we can clear the indicators for any level-triggered @@ -450,7 +450,7 @@ bmcgpio_intr_enable(struct bcmgpio_softc /* Can't have HIGH and LOW together. */ if (has_level == (BCMGPIO_INTR_HIGH_LEVEL|BCMGPIO_INTR_LOW_LEVEL)) return (NULL); - + /* Can't have EDGE and LEVEL together. */ if (has_edge && has_level) return (NULL);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Fri Mar 1 14:53:12 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c Log Message: Handle processor private interrupts better and add support for the PMU interrupt. Thanks to jmcneill for review and suggestions. To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 src/sys/arch/arm/broadcom/bcm2835_intr.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.18 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.19 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.18 Fri Mar 1 08:05:46 2019 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Fri Mar 1 14:53:12 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.18 2019/03/01 08:05:46 skrll Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.19 2019/03/01 14:53:12 skrll Exp $ */ /*- * Copyright (c) 2012, 2015 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.18 2019/03/01 08:05:46 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.19 2019/03/01 14:53:12 skrll Exp $"); #define _INTR_PRIVATE @@ -40,6 +40,8 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_intr #include #include #include +#include +#include #include #include @@ -146,6 +148,20 @@ static struct fdtbus_interrupt_controlle .intrstr = bcm2836mp_icu_fdt_intrstr }; +struct bcm2836mp_interrupt { + bool bi_done; + TAILQ_ENTRY(bcm2836mp_interrupt) bi_next; + int bi_irq; + int bi_ipl; + int bi_flags; + int (*bi_func)(void *); + void *bi_arg; + void *bi_ihs[BCM2836_NCPUS]; +}; + +static TAILQ_HEAD(, bcm2836mp_interrupt) bcm2836mp_interrupts = +TAILQ_HEAD_INITIALIZER(bcm2836mp_interrupts); + struct bcm2835icu_softc { device_t sc_dev; bus_space_tag_t sc_iot; @@ -450,20 +466,19 @@ bcm2835_icu_fdt_intrstr(device_t dev, u_ } #define BCM2836MP_TIMER_IRQS __BITS(3,0) -#define BCM2836MP_MAILBOX_IRQS __BITS(4,4) - -#define BCM2836MP_ALL_IRQS (BCM2836MP_TIMER_IRQS | BCM2836MP_MAILBOX_IRQS) +#define BCM2836MP_MAILBOX_IRQS __BITS(4,7) +#define BCM2836MP_GPU_IRQ __BIT(8) +#define BCM2836MP_PMU_IRQ __BIT(9) +#define BCM2836MP_ALL_IRQS (BCM2836MP_TIMER_IRQS | BCM2836MP_MAILBOX_IRQS | BCM2836MP_GPU_IRQ | BCM2836MP_PMU_IRQ) static void bcm2836mp_pic_unblock_irqs(struct pic_softc *pic, size_t irqbase, uint32_t irq_mask) { - struct cpu_info * const ci = curcpu(); - const cpuid_t cpuid = ci->ci_core_id; const bus_space_tag_t iot = bcml1icu_sc->sc_iot; const bus_space_handle_t ioh = bcml1icu_sc->sc_ioh; + const cpuid_t cpuid = pic - _pic[0]; - KASSERT(pic == _pic[cpuid]); KASSERT(irqbase == 0); if (irq_mask & BCM2836MP_TIMER_IRQS) { @@ -492,6 +507,12 @@ bcm2836mp_pic_unblock_irqs(struct pic_so BCM2836_LOCAL_MAILBOX_IRQ_CONTROL_SIZE, BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE); } + if (irq_mask & BCM2836MP_PMU_IRQ) { + bus_space_write_4(iot, ioh, BCM2836_LOCAL_PM_ROUTING_SET, + __BIT(cpuid)); + bus_space_barrier(iot, ioh, BCM2836_LOCAL_PM_ROUTING_SET, 4, + BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE); + } return; } @@ -500,12 +521,10 @@ static void bcm2836mp_pic_block_irqs(struct pic_softc *pic, size_t irqbase, uint32_t irq_mask) { - struct cpu_info * const ci = curcpu(); - const cpuid_t cpuid = ci->ci_core_id; const bus_space_tag_t iot = bcml1icu_sc->sc_iot; const bus_space_handle_t ioh = bcml1icu_sc->sc_ioh; + const cpuid_t cpuid = pic - _pic[0]; - KASSERT(pic == _pic[cpuid]); KASSERT(irqbase == 0); if (irq_mask & BCM2836MP_TIMER_IRQS) { @@ -526,6 +545,10 @@ bcm2836mp_pic_block_irqs(struct pic_soft BCM2836_LOCAL_MAILBOX_IRQ_CONTROLN(cpuid), val); } + if (irq_mask & BCM2836MP_PMU_IRQ) { + bus_space_write_4(iot, ioh, BCM2836_LOCAL_PM_ROUTING_CLR, + __BIT(cpuid)); + } bcm2835_barrier(); return; @@ -656,14 +679,18 @@ bcm2836mp_intr_init(void *priv, struct c #if defined(MULTIPROCESSOR) intr_establish(BCM2836_INT_MAILBOX0_CPUN(cpuid), IPL_HIGH, IST_LEVEL | IST_MPSAFE, bcm2836mp_ipi_handler, NULL); -#endif - /* clock interrupt will attach with gtmr */ - if (cpuid == 0) - return; -#if defined(SOC_BCM2836) - intr_establish(BCM2836_INT_CNTVIRQ_CPUN(cpuid), IPL_CLOCK, - IST_LEVEL | IST_MPSAFE, gtmr_intr, NULL); + struct bcm2836mp_interrupt *bip; + TAILQ_FOREACH(bip, _interrupts, bi_next) { + if (bip->bi_done) + continue; + + const int irq = BCM2836_INT_BASECPUN(cpuid) + bip->bi_irq; + void *ih = intr_establish(irq, bip->bi_ipl, + IST_LEVEL | bip->bi_flags, bip->bi_func, bip->bi_arg); + + bip->bi_ihs[cpuid] = ih; + } #endif } @@ -672,7 +699,7 @@ bcm2836mp_icu_fdt_decode_irq(u_int *spec { if (!specifier) return -1; - return be32toh(specifier[0]) + BCM2836_INT_LOCALBASE; + return be32toh(specifier[0]); } static void * @@ -680,19 +707,95 @@
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Fri Mar 1 08:05:46 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c Log Message: Sprinkle static To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/broadcom/bcm2835_intr.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.17 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.18 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.17 Sun Feb 10 08:39:48 2019 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Fri Mar 1 08:05:46 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.17 2019/02/10 08:39:48 skrll Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.18 2019/03/01 08:05:46 skrll Exp $ */ /*- * Copyright (c) 2012, 2015 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.17 2019/02/10 08:39:48 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.18 2019/03/01 08:05:46 skrll Exp $"); #define _INTR_PRIVATE @@ -108,7 +108,7 @@ static struct pic_ops bcm2835_picops = { .pic_set_priority = bcm2835_set_priority, }; -struct pic_softc bcm2835_pic = { +static struct pic_softc bcm2835_pic = { .pic_ops = _picops, .pic_maxsources = BCM2835_NIRQ, .pic_name = "bcm2835 pic", @@ -126,7 +126,7 @@ static struct pic_ops bcm2836mp_picops = #endif }; -struct pic_softc bcm2836mp_pic[BCM2836_NCPUS] = { +static struct pic_softc bcm2836mp_pic[BCM2836_NCPUS] = { [0 ... BCM2836_NCPUS - 1] = { .pic_ops = _picops, .pic_maxsources = BCM2836_NIRQPERCPU,
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Sun Feb 10 08:39:48 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c Log Message: Add some more interrupt source names To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/broadcom/bcm2835_intr.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.16 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.17 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.16 Thu Jan 3 10:26:41 2019 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Sun Feb 10 08:39:48 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.16 2019/01/03 10:26:41 skrll Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.17 2019/02/10 08:39:48 skrll Exp $ */ /*- * Copyright (c) 2012, 2015 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.16 2019/01/03 10:26:41 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.17 2019/02/10 08:39:48 skrll Exp $"); #define _INTR_PRIVATE @@ -192,6 +192,7 @@ static const char * const bcm2835_source static const char * const bcm2836mp_sources[BCM2836_NIRQPERCPU] = { "cntpsirq", "cntpnsirq", "cnthpirq", "cntvirq", "mailbox0", "mailbox1", "mailbox2", "mailbox3", + "gpu", "pmu" }; #define BCM2836_INTBIT_GPUPENDING __BIT(8)
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Thu Feb 7 21:16:35 UTC 2019 Modified Files: src/sys/arch/arm/broadcom: bcm2835_gpio.c Log Message: Support configuration of alternate functions. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/broadcom/bcm2835_gpio.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/broadcom/bcm2835_gpio.c diff -u src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.9 src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.10 --- src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.9 Sat Jan 26 14:38:29 2019 +++ src/sys/arch/arm/broadcom/bcm2835_gpio.c Thu Feb 7 21:16:35 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_gpio.c,v 1.9 2019/01/26 14:38:29 thorpej Exp $ */ +/* $NetBSD: bcm2835_gpio.c,v 1.10 2019/02/07 21:16:35 mlelstv Exp $ */ /*- * Copyright (c) 2013, 2014, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.9 2019/01/26 14:38:29 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.10 2019/02/07 21:16:35 mlelstv Exp $"); /* * Driver for BCM2835 GPIO @@ -288,7 +288,10 @@ bcmgpio_attach(device_t parent, device_t sc->sc_gpio_pins[pin].pin_caps = GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_PUSHPULL | GPIO_PIN_TRISTATE | -GPIO_PIN_PULLUP | GPIO_PIN_PULLDOWN; +GPIO_PIN_PULLUP | GPIO_PIN_PULLDOWN | +GPIO_PIN_ALT0 | GPIO_PIN_ALT1 | +GPIO_PIN_ALT2 | GPIO_PIN_ALT3 | +GPIO_PIN_ALT4 | GPIO_PIN_ALT5; sc->sc_gpio_pins[pin].pin_intrcaps = GPIO_INTR_POS_EDGE | GPIO_INTR_NEG_EDGE | @@ -299,11 +302,11 @@ bcmgpio_attach(device_t parent, device_t /* read initial state */ sc->sc_gpio_pins[pin].pin_state = bcm2835gpio_gpio_pin_read(sc, pin); - DPRINTF(1, ("%s: attach pin %d\n", device_xname(sc->sc_dev), pin)); + aprint_debug_dev(sc->sc_dev, "attach pin %d\n", pin); } else { sc->sc_gpio_pins[pin].pin_caps = 0; sc->sc_gpio_pins[pin].pin_state = 0; - DPRINTF(1, ("%s: skip pin %d - func = 0x%x\n", device_xname(sc->sc_dev), pin, func)); + aprint_debug_dev(sc->sc_dev, "skip pin %d - func = %x\n", pin, func); } } @@ -329,7 +332,7 @@ bcmgpio_attach(device_t parent, device_t MIN((bank * 32) + 31, BCMGPIO_MAXPINS), intrstr); } else { - aprint_normal_dev(self, + aprint_error_dev(self, "failed to establish interrupt for pins %d..%d\n", bank * 32, MIN((bank * 32) + 31, BCMGPIO_MAXPINS)); @@ -787,17 +790,49 @@ bcm2835gpio_gpio_pin_ctl(void *arg, int { struct bcmgpio_softc *sc = arg; uint32_t cmd; + uint32_t altmask = GPIO_PIN_ALT0 | GPIO_PIN_ALT1 | + GPIO_PIN_ALT2 | GPIO_PIN_ALT3 | + GPIO_PIN_ALT4 | GPIO_PIN_ALT5; DPRINTF(2, ("%s: gpio_ctl pin %d flags 0x%x\n", device_xname(sc->sc_dev), pin, flags)); mutex_enter(>sc_lock); if (flags & (GPIO_PIN_OUTPUT|GPIO_PIN_INPUT)) { - if ((flags & GPIO_PIN_INPUT) || !(flags & GPIO_PIN_OUTPUT)) { + if ((flags & GPIO_PIN_INPUT) != 0) { /* for safety INPUT will overide output */ bcm283x_pin_setfunc(sc, pin, BCM2835_GPIO_IN); } else { bcm283x_pin_setfunc(sc, pin, BCM2835_GPIO_OUT); } + } else if ((flags & altmask) != 0) { + u_int func; + + switch (flags & altmask) { + case GPIO_PIN_ALT0: + func = BCM2835_GPIO_ALT0; + break; + case GPIO_PIN_ALT1: + func = BCM2835_GPIO_ALT1; + break; + case GPIO_PIN_ALT2: + func = BCM2835_GPIO_ALT2; + break; + case GPIO_PIN_ALT3: + func = BCM2835_GPIO_ALT3; + break; + case GPIO_PIN_ALT4: + func = BCM2835_GPIO_ALT4; + break; + case GPIO_PIN_ALT5: + func = BCM2835_GPIO_ALT5; + break; + default: + /* ignored below */ + func = BCM2835_GPIO_IN; + break; + } + if (func != BCM2835_GPIO_IN) + bcm283x_pin_setfunc(sc, pin, func); } if (flags & (GPIO_PIN_PULLUP|GPIO_PIN_PULLDOWN)) {
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: ryo Date: Sat Oct 20 05:53:22 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: - fix AP spinup on bcm283x - "brcm,bcm2836-smp" is a enable-method for only 32bit bcm2836. To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.20 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.21 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.20 Thu Oct 18 09:01:52 2018 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Sat Oct 20 05:53:22 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.20 2018/10/18 09:01:52 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.21 2018/10/20 05:53:22 ryo Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.20 2018/10/18 09:01:52 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.21 2018/10/20 05:53:22 ryo Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -729,6 +729,8 @@ static void bcm2836_mpstart(void) { #ifdef MULTIPROCESSOR +#ifdef __arm__ + /* implementation dependent string "brcm,bcm2836-smp" for ARM 32-bit */ const char *method; const int cpus = OF_finddevice("/cpus"); @@ -738,7 +740,6 @@ bcm2836_mpstart(void) return; } - /* implementation dependent string "brcm,bcm2836-smp" for ARM 32-bit */ method = fdtbus_get_string(cpus, "enable-method"); if ((method != NULL) && (strcmp(method, "brcm,bcm2836-smp") == 0)) { arm_cpu_max = RPI_CPU_MAX; @@ -772,9 +773,10 @@ bcm2836_mpstart(void) } return; } +#endif /* __arm__ */ /* try enable-method each cpus */ - arm_fdt_cpu_bootstrap(); + arm_fdt_cpu_mpstart(); #endif /* MULTIPROCESSOR */ } @@ -1183,6 +1185,7 @@ bcm2836_platform_bootstrap(void) #ifdef MULTIPROCESSOR arm_cpu_max = RPI_CPU_MAX; + arm_fdt_cpu_bootstrap(); #endif } #endif
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Fri Sep 28 13:24:02 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm2835_gpio.c Log Message: Fix previous; follow the binding spec for this device when decoding interrupt specifiers. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/broadcom/bcm2835_gpio.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/broadcom/bcm2835_gpio.c diff -u src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.7 src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.8 --- src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.7 Sat May 19 14:02:10 2018 +++ src/sys/arch/arm/broadcom/bcm2835_gpio.c Fri Sep 28 13:24:02 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_gpio.c,v 1.7 2018/05/19 14:02:10 thorpej Exp $ */ +/* $NetBSD: bcm2835_gpio.c,v 1.8 2018/09/28 13:24:02 jmcneill Exp $ */ /*- * Copyright (c) 2013, 2014, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.7 2018/05/19 14:02:10 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.8 2018/09/28 13:24:02 jmcneill Exp $"); /* * Driver for BCM2835 GPIO @@ -560,12 +560,11 @@ bcmgpio_fdt_intr_establish(device_t dev, return (NULL); } - /* 1st cell is the bank */ - /* 2nd cell is the pin */ - /* 3rd cell is flags */ - const u_int bank = be32toh(specifier[0]); - const u_int pin = be32toh(specifier[1]); - const u_int type = be32toh(specifier[2]) & 0xf; + /* 1st cell is the GPIO number */ + /* 2nd cell is flags */ + const u_int bank = be32toh(specifier[0]) / 32; + const u_int pin = be32toh(specifier[0]) % 32; + const u_int type = be32toh(specifier[1]) & 0xf; switch (type) { case 0x1: @@ -668,19 +667,16 @@ static bool bcmgpio_fdt_intrstr(device_t dev, u_int *specifier, char *buf, size_t buflen) { - /* 1st cell is the bank */ - /* 2nd cell is the pin */ + /* 1st cell is the GPIO number */ /* 3rd cell is flags */ if (!specifier) return (false); - const u_int bank = be32toh(specifier[0]); - const u_int pin = be32toh(specifier[1]); + const u_int bank = be32toh(specifier[0]) / 32; + const u_int pin = be32toh(specifier[0]) % 32; if (bank >= BCMGPIO_NBANKS) return (false); - if (pin >= 32) - return (false); - + snprintf(buf, buflen, "GPIO %u", (bank * 32) + pin); return (true);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Tue Aug 28 14:57:04 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Fix arm non-MULTIPROCESSOR build for RPI2 To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.15 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.16 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.15 Sun Aug 26 18:15:49 2018 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Tue Aug 28 14:57:03 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.15 2018/08/26 18:15:49 ryo Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.16 2018/08/28 14:57:03 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.15 2018/08/26 18:15:49 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.16 2018/08/28 14:57:03 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -799,6 +799,7 @@ bcm2836_bootstrap(void) /* Wake up AP in case firmware has placed it in WFE state */ __asm __volatile("sev" ::: "memory"); +#ifdef MULTIPROCESSOR /* Wait for APs to start */ for (int loop = 0; loop < 16; loop++) { membar_consumer(); @@ -806,6 +807,7 @@ bcm2836_bootstrap(void) break; gtmr_delay(1); } +#endif } #endif
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: rin Date: Sat Aug 25 20:55:15 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Set mac-address property to mue(4). To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.13 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.14 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.13 Tue Aug 21 08:45:17 2018 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Sat Aug 25 20:55:15 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.13 2018/08/21 08:45:17 rin Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.14 2018/08/25 20:55:15 rin Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.13 2018/08/21 08:45:17 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.14 2018/08/25 20:55:15 rin Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -1317,7 +1317,7 @@ bcm283x_platform_device_register(device_ booted_device = dev; } #endif - if (device_is_a(dev, "usmsc") && + if ((device_is_a(dev, "usmsc") || device_is_a(dev, "mue")) && vcprop_tag_success_p(_macaddr.tag)) { const uint8_t enaddr[ETHER_ADDR_LEN] = { (vb.vbt_macaddr.addr >> 0) & 0xff,
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: rin Date: Tue Aug 21 08:45:17 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: Correctly report memory size, not clock rate when VERBOSE_INIT_ARM. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.12 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.13 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.12 Fri Aug 10 04:44:15 2018 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Tue Aug 21 08:45:17 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.12 2018/08/10 04:44:15 rin Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.13 2018/08/21 08:45:17 rin Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.12 2018/08/10 04:44:15 rin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.13 2018/08/21 08:45:17 rin Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -663,10 +663,9 @@ bcm283x_bootparams(bus_space_tag_t iot, curcpu()->ci_data.cpu_cc_freq = vb.vbt_armclockrate.rate; #ifdef VERBOSE_INIT_ARM - if (vcprop_tag_success_p(_memory.tag)) { - printf("%s: memory size %d\n", __func__, - vb.vbt_armclockrate.rate); - } + if (vcprop_tag_success_p(_memory.tag)) + printf("%s: memory size %zu\n", __func__, + bcm283x_memorysize); if (vcprop_tag_success_p(_armclockrate.tag)) printf("%s: arm clock%d\n", __func__, vb.vbt_armclockrate.rate);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: rin Date: Sun Aug 19 09:18:48 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm2835_emmc.c bcm2835_mbox.c Log Message: Clean up leftover when converting intr_establish() to fdtbus_intr_establish(). The latter accept only flags 0 or FDT_INTR_MPSAFE. For both cases, it add IST_LEVEL flag for underlying intr_establish() function. OK skrll To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/sys/arch/arm/broadcom/bcm2835_emmc.c cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/broadcom/bcm2835_mbox.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/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.32 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.33 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.32 Sun Dec 10 21:38:26 2017 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Sun Aug 19 09:18:48 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.32 2017/12/10 21:38:26 skrll Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.33 2018/08/19 09:18:48 rin Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.32 2017/12/10 21:38:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.33 2018/08/19 09:18:48 rin Exp $"); #include "bcmdmac.h" @@ -174,7 +174,7 @@ bcmemmc_attach(device_t parent, device_t return; } - sc->sc_ih = fdtbus_intr_establish(phandle, 0, IPL_SDMMC, IST_LEVEL, + sc->sc_ih = fdtbus_intr_establish(phandle, 0, IPL_SDMMC, 0, sdhc_intr, >sc); if (sc->sc_ih == NULL) { Index: src/sys/arch/arm/broadcom/bcm2835_mbox.c diff -u src/sys/arch/arm/broadcom/bcm2835_mbox.c:1.12 src/sys/arch/arm/broadcom/bcm2835_mbox.c:1.13 --- src/sys/arch/arm/broadcom/bcm2835_mbox.c:1.12 Sun Dec 10 21:38:26 2017 +++ src/sys/arch/arm/broadcom/bcm2835_mbox.c Sun Aug 19 09:18:48 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_mbox.c,v 1.12 2017/12/10 21:38:26 skrll Exp $ */ +/* $NetBSD: bcm2835_mbox.c,v 1.13 2018/08/19 09:18:48 rin Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_mbox.c,v 1.12 2017/12/10 21:38:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_mbox.c,v 1.13 2018/08/19 09:18:48 rin Exp $"); #include #include @@ -120,7 +120,7 @@ bcmmbox_attach(device_t parent, device_t return; } - sc->sc_intrh = fdtbus_intr_establish(phandle, 0, IPL_VM, IST_LEVEL, + sc->sc_intrh = fdtbus_intr_establish(phandle, 0, IPL_VM, 0, bcmmbox_intr, sc); if (sc->sc_intrh == NULL) { aprint_error_dev(self, "failed to establish interrupt %s\n",
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: rin Date: Fri Aug 10 04:44:16 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: * Convert bus address to physical address in xxx_bs_mmap(), as done in xxx_bs_map(). * Reuse bs_map and bs_mmap in arm_generic_bs_tag in order to - set pmap flags properly for aarch64 - dedup codes OK ryo To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.11 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.12 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.11 Sun Aug 5 14:02:35 2018 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Fri Aug 10 04:44:15 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.11 2018/08/05 14:02:35 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.12 2018/08/10 04:44:15 rin Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.11 2018/08/05 14:02:35 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.12 2018/08/10 04:44:15 rin Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -134,125 +134,83 @@ struct bus_space bcm2835_a4x_bs_tag; struct bus_space bcm2836_bs_tag; struct bus_space bcm2836_a4x_bs_tag; -int bcm283x_bs_map(void *, bus_addr_t, bus_size_t, int, bus_space_handle_t *); -paddr_t bcm283x_bs_mmap(void *, bus_addr_t, off_t, int, int); -paddr_t bcm283x_a4x_bs_mmap(void *, bus_addr_t, off_t, int, int); +static paddr_t bcm2835_bus_to_phys(bus_addr_t); +static paddr_t bcm2836_bus_to_phys(bus_addr_t); -int -bcm283x_bs_map(void *t, bus_addr_t ba, bus_size_t size, int flag, -bus_space_handle_t *bshp) +static paddr_t +bcm2835_bus_to_phys(bus_addr_t ba) { - u_long startpa, endpa, pa; - vaddr_t va; - - /* Convert BA to PA */ - pa = ba & ~BCM2835_BUSADDR_CACHE_MASK; - startpa = trunc_page(pa); - endpa = round_page(pa + size); - - /* XXX use extent manager to check duplicate mapping */ - - va = uvm_km_alloc(kernel_map, endpa - startpa, 0, - UVM_KMF_VAONLY | UVM_KMF_NOWAIT | UVM_KMF_COLORMATCH); - if (!va) - return ENOMEM; - - *bshp = (bus_space_handle_t)(va + (pa - startpa)); - - int pmapflags; - if (flag & BUS_SPACE_MAP_PREFETCHABLE) - pmapflags = PMAP_WRITE_COMBINE; - else if (flag & BUS_SPACE_MAP_CACHEABLE) - pmapflags = 0; - else - pmapflags = PMAP_NOCACHE; - for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) { - pmap_kenter_pa(va, pa, VM_PROT_READ | VM_PROT_WRITE, pmapflags); - } - pmap_update(pmap_kernel()); + /* Attempt to find the PA device mapping */ + if (ba >= BCM2835_PERIPHERALS_BASE_BUS && + ba < BCM2835_PERIPHERALS_BASE_BUS + BCM2835_PERIPHERALS_SIZE) + return BCM2835_PERIPHERALS_BUS_TO_PHYS(ba); - return 0; + return ba & ~BCM2835_BUSADDR_CACHE_MASK; } -paddr_t -bcm283x_bs_mmap(void *t, bus_addr_t bpa, off_t offset, int prot, int flags) +static paddr_t +bcm2836_bus_to_phys(bus_addr_t ba) { - /* Convert BA to PA */ - const paddr_t pa = bpa & ~BCM2835_BUSADDR_CACHE_MASK; - paddr_t bus_flags = 0; - - if (flags & BUS_SPACE_MAP_PREFETCHABLE) - bus_flags |= ARM_MMAP_WRITECOMBINE; - - return arm_btop(pa + offset) | bus_flags; -} -paddr_t -bcm283x_a4x_bs_mmap(void *t, bus_addr_t bpa, off_t offset, int prot, int flags) -{ - /* Convert BA to PA */ - const paddr_t pa = bpa & ~BCM2835_BUSADDR_CACHE_MASK; - paddr_t bus_flags = 0; + /* Attempt to find the PA device mapping */ + if (ba >= BCM2835_PERIPHERALS_BASE_BUS && + ba < BCM2835_PERIPHERALS_BASE_BUS + BCM2835_PERIPHERALS_SIZE) + return BCM2836_PERIPHERALS_BUS_TO_PHYS(ba); - if (flags & BUS_SPACE_MAP_PREFETCHABLE) - bus_flags |= ARM_MMAP_WRITECOMBINE; + if (ba >= BCM2836_ARM_LOCAL_BASE && + ba < BCM2836_ARM_LOCAL_BASE + BCM2836_ARM_LOCAL_SIZE) + return ba; - return arm_btop(pa + 4 * offset) | bus_flags; + return ba & ~BCM2835_BUSADDR_CACHE_MASK; } int bcm2835_bs_map(void *t, bus_addr_t ba, bus_size_t size, int flag, bus_space_handle_t *bshp) { - const struct pmap_devmap *pd; - bool match = false; - u_long pa; + const paddr_t pa = bcm2835_bus_to_phys(ba); - /* Attempt to find the PA device mapping */ - if (ba >= BCM2835_PERIPHERALS_BASE_BUS && - ba < BCM2835_PERIPHERALS_BASE_BUS + BCM2835_PERIPHERALS_SIZE) { - match = true; - pa = BCM2835_PERIPHERALS_BUS_TO_PHYS(ba); - } + return bus_space_map(_generic_bs_tag, pa, size, flag, bshp); +} - if (match && (pd = pmap_devmap_find_pa(pa, size)) != NULL) { - /* Device was statically mapped. */ - *bshp = pd->pd_va + (pa - pd->pd_pa); - return 0; - } +paddr_t +bcm2835_bs_mmap(void *t, bus_addr_t ba, off_t offset, int prot, int flags) +{ + const paddr_t pa = bcm2835_bus_to_phys(ba); - return bcm283x_bs_map(t,
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: ryo Date: Mon Jul 9 06:21:46 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: hatch secondary processors (aarch64) To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.6 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.7 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.6 Wed Jun 27 11:12:14 2018 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Mon Jul 9 06:21:46 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.6 2018/06/27 11:12:14 ryo Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.7 2018/07/09 06:21:46 ryo Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.6 2018/06/27 11:12:14 ryo Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.7 2018/07/09 06:21:46 ryo Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -774,18 +774,51 @@ bcm2836_bootstrap(void) { #define RPI_CPU_MAX 4 -#ifdef MULTIPROCESSOR - extern int cortex_mmuinfo; +#ifdef VERBOSE_INIT_ARM +#define DPRINTF(...) printf(__VA_ARGS__) +#else +#define DPRINTF(...) +#endif +#ifdef MULTIPROCESSOR arm_cpu_max = RPI_CPU_MAX; + DPRINTF("%s: %d cpus present\n", __func__, arm_cpu_max); +#ifdef __arm__ + extern int cortex_mmuinfo; cortex_mmuinfo = armreg_ttbr_read(); -#ifdef VERBOSE_INIT_ARM - printf("%s: %d cpus present\n", __func__, arm_cpu_max); - printf("%s: cortex_mmuinfo %x\n", __func__, cortex_mmuinfo); + DPRINTF("%s: cortex_mmuinfo %x\n", __func__, cortex_mmuinfo); #endif +#endif /* MULTIPROCESSOR */ + +#ifdef __aarch64__ + /* + * XXX: use psci_fdt_bootstrap() + */ + extern void aarch64_mpstart(void); + for (int i = 1; i < RPI_CPU_MAX; i++) { + /* + * Reference: + * armstubs/armstub8.S + * in https://github.com/raspberrypi/tools + */ + volatile uint64_t *cpu_release_addr; +#define RPI3_ARMSTUB8_SPINADDR_BASE 0x00d8 + cpu_release_addr = + AARCH64_PA_TO_KVA(RPI3_ARMSTUB8_SPINADDR_BASE + i * 8); + *cpu_release_addr = aarch64_kern_vtophys(aarch64_mpstart); + + /* need flush cache. secondary processors are cache disabled */ + cpu_dcache_wb_range(cpu_release_addr, sizeof(cpu_release_addr)); + __asm __volatile("sev" ::: "memory"); + +#if defined(VERBOSE_INIT_ARM) && defined(EARLYCONS) + /* wait secondary processor's debug output */ + gtmr_delay(10); #endif + } +#endif /* __aarch64__ */ -#ifndef __aarch64__ +#ifdef __arm__ /* * Even if no options MULTIPROCESSOR, * It is need to initialize the secondary CPU, @@ -803,6 +836,7 @@ bcm2836_bootstrap(void) (uint32_t)cortex_mpstart); } #endif + #ifdef MULTIPROCESSOR /* Wake up AP in case firmware has placed it in WFE state */ __asm __volatile("sev" ::: "memory");
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sun Jul 1 21:23:17 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm2835_bsc.c Log Message: Use fdtbus_attach_i2cbus To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/broadcom/bcm2835_bsc.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/broadcom/bcm2835_bsc.c diff -u src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.12 src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.13 --- src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.12 Thu Jun 7 05:07:28 2018 +++ src/sys/arch/arm/broadcom/bcm2835_bsc.c Sun Jul 1 21:23:16 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_bsc.c,v 1.12 2018/06/07 05:07:28 thorpej Exp $ */ +/* $NetBSD: bcm2835_bsc.c,v 1.13 2018/07/01 21:23:16 jmcneill Exp $ */ /* * Copyright (c) 2012 Jonathan A. Kollasch @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.12 2018/06/07 05:07:28 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.13 2018/07/01 21:23:16 jmcneill Exp $"); #if defined(_KERNEL_OPT) #include "opt_kernhist.h" @@ -102,9 +102,6 @@ bsciic_attach(device_t parent, device_t struct fdt_attach_args * const faa = aux; const int phandle = faa->faa_phandle; prop_dictionary_t prop = device_properties(self); - prop_dictionary_t devs; - uint32_t address_cells; - struct i2cbus_attach_args iba; bool disable = false; static ONCE_DECL(control); @@ -172,20 +169,7 @@ bsciic_attach(device_t parent, device_t sc->sc_i2c.ic_release_bus = bsciic_release_bus; sc->sc_i2c.ic_exec = bsciic_exec; - devs = prop_dictionary_create(); - if (of_getprop_uint32(phandle, "#address-cells", _cells)) - address_cells = 1; - - of_enter_i2c_devs(devs, phandle, address_cells * 4, 0); - - memset(, 0, sizeof(iba)); - iba.iba_tag = >sc_i2c; - iba.iba_child_devices = prop_dictionary_get(devs, "i2c-child-devices"); - if (iba.iba_child_devices) - prop_object_retain(iba.iba_child_devices); - prop_object_release(devs); - - config_found_ia(self, "i2cbus", , iicbus_print); + fdtbus_attach_i2cbus(self, phandle, >sc_i2c, iicbus_print); } void
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: thorpej Date: Thu Jun 7 05:07:28 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm2835_bsc.c Log Message: A minimal change to prevent the Raspberry Pi i2c driver from looping forever if the command buffer and data buffer are both NULL. XXX This driver needs an overhaul. Also, preemptively return an error if we get a 10-bit address, because we don't yet handle them correctly. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/broadcom/bcm2835_bsc.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/broadcom/bcm2835_bsc.c diff -u src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.11 src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.12 --- src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.11 Wed May 9 02:53:00 2018 +++ src/sys/arch/arm/broadcom/bcm2835_bsc.c Thu Jun 7 05:07:28 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_bsc.c,v 1.11 2018/05/09 02:53:00 thorpej Exp $ */ +/* $NetBSD: bcm2835_bsc.c,v 1.12 2018/06/07 05:07:28 thorpej Exp $ */ /* * Copyright (c) 2012 Jonathan A. Kollasch @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.11 2018/05/09 02:53:00 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.12 2018/06/07 05:07:28 thorpej Exp $"); #if defined(_KERNEL_OPT) #include "opt_kernhist.h" @@ -242,8 +242,15 @@ bsciic_exec(void *v, i2c_op_t op, i2c_ad size_t len; size_t pos; int error = 0; + int whichbuf = 0; const bool isread = I2C_OP_READ_P(op); + /* + * XXX We don't do 10-bit addressing correctly yet. + */ + if (addr > 0x7f) + return (ENOTSUP); + flags |= I2C_F_POLL; #if 0 @@ -312,10 +319,13 @@ flood_again: KERNHIST_LOG(bsciichist, "flood bot %#jx %ju", (uintptr_t)buf, len, 0, 0); - if (buf == cmdbuf && !isread) { + if (whichbuf == 0 && !isread) { + KASSERT(buf == cmdbuf); + whichbuf++; buf = databuf; len = datalen; - goto flood_again; + if (len) + goto flood_again; } do {
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: thorpej Date: Sat May 19 14:02:10 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm2835_gpio.c Log Message: Add support for interrupts on GPIO pins. We support both FDT-driven interrupt registration as well as the new GPIO interrupt interface. Based on initial work by Brad Spencer. PR kern/51676 To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/broadcom/bcm2835_gpio.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/broadcom/bcm2835_gpio.c diff -u src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.6 src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.7 --- src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.6 Sun Dec 10 21:38:26 2017 +++ src/sys/arch/arm/broadcom/bcm2835_gpio.c Sat May 19 14:02:10 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_gpio.c,v 1.6 2017/12/10 21:38:26 skrll Exp $ */ +/* $NetBSD: bcm2835_gpio.c,v 1.7 2018/05/19 14:02:10 thorpej Exp $ */ /*- * Copyright (c) 2013, 2014, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.6 2017/12/10 21:38:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.7 2018/05/19 14:02:10 thorpej Exp $"); /* * Driver for BCM2835 GPIO @@ -46,6 +46,7 @@ __KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio #include #include #include +#include #include #include @@ -66,6 +67,29 @@ int bcm2835gpiodebug = 3; #define BCMGPIO_MAXPINS 54 +struct bcmgpio_eint { + int (*eint_func)(void *); + void *eint_arg; + int eint_flags; + int eint_bank; + int eint_num; +}; + +#define BCMGPIO_INTR_POS_EDGE 0x01 +#define BCMGPIO_INTR_NEG_EDGE 0x02 +#define BCMGPIO_INTR_HIGH_LEVEL 0x04 +#define BCMGPIO_INTR_LOW_LEVEL 0x08 +#define BCMGPIO_INTR_MPSAFE 0x10 + +struct bcmgpio_softc; +struct bcmgpio_bank { + struct bcmgpio_softc *sc_bcm; + void *sc_ih; + struct bcmgpio_eint sc_eint[32]; + int sc_bankno; +}; +#define BCMGPIO_NBANKS 2 + struct bcmgpio_softc { device_t sc_dev; bus_space_tag_t sc_iot; @@ -74,6 +98,9 @@ struct bcmgpio_softc { kmutex_t sc_lock; gpio_pin_t sc_gpio_pins[BCMGPIO_MAXPINS]; + + /* For interrupt support. */ + struct bcmgpio_bank sc_banks[BCMGPIO_NBANKS]; }; struct bcmgpio_pin { @@ -90,6 +117,13 @@ static int bcm2835gpio_gpio_pin_read(voi static void bcm2835gpio_gpio_pin_write(void *, int, int); static void bcm2835gpio_gpio_pin_ctl(void *, int, int); +static void * bcmgpio_gpio_intr_establish(void *, int, int, int, + int (*)(void *), void *); +static void bcmgpio_gpio_intr_disestablish(void *, void *); +static bool bcmgpio_gpio_intrstr(void *, int, int, char *, size_t); + +static int bcmgpio_intr(void *); + u_int bcm283x_pin_getfunc(const struct bcmgpio_softc * const, u_int); void bcm283x_pin_setfunc(const struct bcmgpio_softc * const, u_int, u_int); @@ -110,6 +144,17 @@ static struct fdtbus_gpio_controller_fun .write = bcmgpio_fdt_write }; +static void * bcmgpio_fdt_intr_establish(device_t, u_int *, int, int, + int (*func)(void *), void *); +static void bcmgpio_fdt_intr_disestablish(device_t, void *); +static bool bcmgpio_fdt_intrstr(device_t, u_int *, char *, size_t); + +static struct fdtbus_interrupt_controller_func bcmgpio_fdt_intrfuncs = { + .establish = bcmgpio_fdt_intr_establish, + .disestablish = bcmgpio_fdt_intr_disestablish, + .intrstr = bcmgpio_fdt_intrstr, +}; + CFATTACH_DECL_NEW(bcmgpio, sizeof(struct bcmgpio_softc), bcmgpio_match, bcmgpio_attach, NULL, NULL); @@ -208,6 +253,7 @@ bcmgpio_attach(device_t parent, device_t u_int func; int error; int pin; + int bank; const int phandle = faa->faa_phandle; if (fdtbus_get_reg(phandle, 0, , ) != 0) { @@ -238,10 +284,18 @@ bcmgpio_attach(device_t parent, device_t if (func == BCM2835_GPIO_IN || func == BCM2835_GPIO_OUT) { + /* XXX TRISTATE? Really? */ sc->sc_gpio_pins[pin].pin_caps = GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_PUSHPULL | GPIO_PIN_TRISTATE | GPIO_PIN_PULLUP | GPIO_PIN_PULLDOWN; + sc->sc_gpio_pins[pin].pin_intrcaps = +GPIO_INTR_POS_EDGE | +GPIO_INTR_NEG_EDGE | +GPIO_INTR_DOUBLE_EDGE | +GPIO_INTR_HIGH_LEVEL | +GPIO_INTR_LOW_LEVEL | +GPIO_INTR_MPSAFE; /* read initial state */ sc->sc_gpio_pins[pin].pin_state = bcm2835gpio_gpio_pin_read(sc, pin); @@ -253,19 +307,33 @@ bcmgpio_attach(device_t parent, device_t } } - /* create controller tag */ - sc->sc_gpio_gc.gp_cookie = sc; - sc->sc_gpio_gc.gp_pin_read = bcm2835gpio_gpio_pin_read; - sc->sc_gpio_gc.gp_pin_write = bcm2835gpio_gpio_pin_write; - sc->sc_gpio_gc.gp_pin_ctl = bcm2835gpio_gpio_pin_ctl; + /* Initialize interrupts. */ + for (bank = 0; bank < BCMGPIO_NBANKS; bank++) { + char intrstr[128]; - gba.gba_gc = >sc_gpio_gc; - for (pin = 0; pin < BCMGPIO_MAXPINS;) { - const int npins = MIN(BCMGPIO_MAXPINS - pin, 32); -
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Sat Mar 3 16:03:38 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm2835_bsc.c Log Message: bcm2835_bsc: use fdt to enumerate i2c child devices >From jmcneill@ To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/broadcom/bcm2835_bsc.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/broadcom/bcm2835_bsc.c diff -u src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.9 src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.10 --- src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.9 Thu Dec 28 22:42:36 2017 +++ src/sys/arch/arm/broadcom/bcm2835_bsc.c Sat Mar 3 16:03:38 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_bsc.c,v 1.9 2017/12/28 22:42:36 christos Exp $ */ +/* $NetBSD: bcm2835_bsc.c,v 1.10 2018/03/03 16:03:38 skrll Exp $ */ /* * Copyright (c) 2012 Jonathan A. Kollasch @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.9 2017/12/28 22:42:36 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.10 2018/03/03 16:03:38 skrll Exp $"); #if defined(_KERNEL_OPT) #include "opt_kernhist.h" @@ -102,6 +102,8 @@ bsciic_attach(device_t parent, device_t struct fdt_attach_args * const faa = aux; const int phandle = faa->faa_phandle; prop_dictionary_t prop = device_properties(self); + prop_dictionary_t devs; + uint32_t address_cells; struct i2cbus_attach_args iba; bool disable = false; @@ -170,10 +172,21 @@ bsciic_attach(device_t parent, device_t sc->sc_i2c.ic_release_bus = bsciic_release_bus; sc->sc_i2c.ic_exec = bsciic_exec; - memset(, 0, sizeof(iba)); + devs = prop_dictionary_create(); + if (of_getprop_uint32(phandle, "#address-cells", _cells)) + address_cells = 1; + + of_enter_i2c_devs(devs, phandle, address_cells * 4, 0); + memset(, 0, sizeof(iba)); iba.iba_tag = >sc_i2c; - iba.iba_type = 0; + iba.iba_child_devices = prop_dictionary_get(devs, "i2c-child-devices"); + if (iba.iba_child_devices) + prop_object_retain(iba.iba_child_devices); + else + iba.iba_child_devices = prop_array_create(); + prop_object_release(devs); + config_found_ia(self, "i2cbus", , iicbus_print); }
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Mon Jan 22 13:23:56 UTC 2018 Modified Files: src/sys/arch/arm/broadcom: bcm2835_space.c Log Message: Pass PMAP_WRITE_COMBINE as appropriate in bcm283x_bs_map. RPI2 FB console now updates properly again To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/broadcom/bcm2835_space.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/broadcom/bcm2835_space.c diff -u src/sys/arch/arm/broadcom/bcm2835_space.c:1.14 src/sys/arch/arm/broadcom/bcm2835_space.c:1.15 --- src/sys/arch/arm/broadcom/bcm2835_space.c:1.14 Sun Dec 10 21:38:26 2017 +++ src/sys/arch/arm/broadcom/bcm2835_space.c Mon Jan 22 13:23:56 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_space.c,v 1.14 2017/12/10 21:38:26 skrll Exp $ */ +/* $NetBSD: bcm2835_space.c,v 1.15 2018/01/22 13:23:56 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.14 2017/12/10 21:38:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.15 2018/01/22 13:23:56 skrll Exp $"); #include #include @@ -533,6 +533,7 @@ bcm283x_bs_map(void *t, bus_addr_t ba, b bus_space_handle_t *bshp) { u_long startpa, endpa, pa; + int pmapflags; vaddr_t va; /* Convert BA to PA */ @@ -550,10 +551,13 @@ bcm283x_bs_map(void *t, bus_addr_t ba, b *bshp = (bus_space_handle_t)(va + (pa - startpa)); - const int pmapflags = - (flag & (BUS_SPACE_MAP_CACHEABLE|BUS_SPACE_MAP_PREFETCHABLE)) - ? 0 - : PMAP_NOCACHE; + if (flag & BUS_SPACE_MAP_PREFETCHABLE) + pmapflags = PMAP_WRITE_COMBINE; + else if (flag & BUS_SPACE_MAP_CACHEABLE) + pmapflags = 0; + else + pmapflags = PMAP_NOCACHE; + for (pa = startpa; pa < endpa; pa += PAGE_SIZE, va += PAGE_SIZE) { pmap_kenter_pa(va, pa, VM_PROT_READ | VM_PROT_WRITE, pmapflags); }
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: christos Date: Thu Dec 28 22:42:36 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_bsc.c Log Message: PR/52848: Brad Spencer: Comment out KASSERT, length 0 appears to be valid. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/broadcom/bcm2835_bsc.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/broadcom/bcm2835_bsc.c diff -u src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.8 src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.9 --- src/sys/arch/arm/broadcom/bcm2835_bsc.c:1.8 Sun Dec 10 16:38:26 2017 +++ src/sys/arch/arm/broadcom/bcm2835_bsc.c Thu Dec 28 17:42:36 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_bsc.c,v 1.8 2017/12/10 21:38:26 skrll Exp $ */ +/* $NetBSD: bcm2835_bsc.c,v 1.9 2017/12/28 22:42:36 christos Exp $ */ /* * Copyright (c) 2012 Jonathan A. Kollasch @@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.8 2017/12/10 21:38:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_bsc.c,v 1.9 2017/12/28 22:42:36 christos Exp $"); #if defined(_KERNEL_OPT) #include "opt_kernhist.h" @@ -331,7 +331,9 @@ only_read: dlen = datalen; dlen = __SHIFTIN(dlen, BSC_DLEN_DLEN); +#if 0 KASSERT(dlen >= 1); +#endif bus_space_write_4(sc->sc_iot, sc->sc_ioh, BSC_DLEN, dlen); bus_space_write_4(sc->sc_iot, sc->sc_ioh, BSC_A, a); bus_space_write_4(sc->sc_iot, sc->sc_ioh, BSC_C, c | BSC_C_ST);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Wed Dec 20 14:51:40 UTC 2017 Removed Files: src/sys/arch/arm/broadcom: bcm2835_pm.c bcm2835_pmvar.h Log Message: G/C To generate a diff of this commit: cvs rdiff -u -r1.4 -r0 src/sys/arch/arm/broadcom/bcm2835_pm.c cvs rdiff -u -r1.2 -r0 src/sys/arch/arm/broadcom/bcm2835_pmvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Wed Dec 20 14:35:12 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm283x_platform.c Log Message: G/C To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm283x_platform.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/broadcom/bcm283x_platform.c diff -u src/sys/arch/arm/broadcom/bcm283x_platform.c:1.1 src/sys/arch/arm/broadcom/bcm283x_platform.c:1.2 --- src/sys/arch/arm/broadcom/bcm283x_platform.c:1.1 Sun Dec 10 21:38:26 2017 +++ src/sys/arch/arm/broadcom/bcm283x_platform.c Wed Dec 20 14:35:12 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm283x_platform.c,v 1.1 2017/12/10 21:38:26 skrll Exp $ */ +/* $NetBSD: bcm283x_platform.c,v 1.2 2017/12/20 14:35:12 skrll Exp $ */ /*- * Copyright (c) 2017 Jared D. McNeill@@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.1 2017/12/10 21:38:26 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm283x_platform.c,v 1.2 2017/12/20 14:35:12 skrll Exp $"); #include "opt_arm_debug.h" #include "opt_bcm283x.h" @@ -130,14 +130,6 @@ bs_protos(generic_armv4); bs_protos(a4x); bs_protos(bs_notimpl); -#if 0 -#if __ARMEB__ -#define NSWAP(n) n ## _swap -#else -#define NSWAP(n) n -#endif -#endif - struct arm32_dma_range bcm2835_dma_ranges[] = { [0] = { .dr_sysbase = 0,
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Tue Nov 28 08:39:31 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_space.c Log Message: Sync with armv7_generic_space.c - BE support (probably not needed) - a4x subreagion/mmap support - fix some a4x stream methods - add UVM_KMF_COLORMATCH in bs_map when allocating KVA - support BUS_SPACE_MAP_PREFETCHABLE To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/broadcom/bcm2835_space.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/broadcom/bcm2835_space.c diff -u src/sys/arch/arm/broadcom/bcm2835_space.c:1.12 src/sys/arch/arm/broadcom/bcm2835_space.c:1.13 --- src/sys/arch/arm/broadcom/bcm2835_space.c:1.12 Mon Nov 27 17:27:37 2017 +++ src/sys/arch/arm/broadcom/bcm2835_space.c Tue Nov 28 08:39:31 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_space.c,v 1.12 2017/11/27 17:27:37 skrll Exp $ */ +/* $NetBSD: bcm2835_space.c,v 1.13 2017/11/28 08:39:31 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.12 2017/11/27 17:27:37 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.13 2017/11/28 08:39:31 skrll Exp $"); #include #include @@ -51,6 +51,12 @@ bs_protos(generic_armv4); bs_protos(a4x); bs_protos(bs_notimpl); +#if __ARMEB__ +#define NSWAP(n) n ## _swap +#else +#define NSWAP(n) n +#endif + struct bus_space bcm2835_bs_tag = { /* cookie */ (void *) 0, @@ -75,38 +81,38 @@ struct bus_space bcm2835_bs_tag = { /* read (single) */ generic_bs_r_1, - generic_armv4_bs_r_2, - generic_bs_r_4, + NSWAP(generic_armv4_bs_r_2), + NSWAP(generic_bs_r_4), bs_notimpl_bs_r_8, /* read multiple */ generic_bs_rm_1, - generic_armv4_bs_rm_2, - generic_bs_rm_4, + NSWAP(generic_armv4_bs_rm_2), + NSWAP(generic_bs_rm_4), bs_notimpl_bs_rm_8, /* read region */ generic_bs_rr_1, - generic_armv4_bs_rr_2, - generic_bs_rr_4, + NSWAP(generic_armv4_bs_rr_2), + NSWAP(generic_bs_rr_4), bs_notimpl_bs_rr_8, /* write (single) */ generic_bs_w_1, - generic_armv4_bs_w_2, - generic_bs_w_4, + NSWAP(generic_armv4_bs_w_2), + NSWAP(generic_bs_w_4), bs_notimpl_bs_w_8, /* write multiple */ generic_bs_wm_1, - generic_armv4_bs_wm_2, - generic_bs_wm_4, + NSWAP(generic_armv4_bs_wm_2), + NSWAP(generic_bs_wm_4), bs_notimpl_bs_wm_8, /* write region */ generic_bs_wr_1, - generic_armv4_bs_wr_2, - generic_bs_wr_4, + NSWAP(generic_armv4_bs_wr_2), + NSWAP(generic_bs_wr_4), bs_notimpl_bs_wr_8, /* set multiple */ @@ -117,8 +123,8 @@ struct bus_space bcm2835_bs_tag = { /* set region */ generic_bs_sr_1, - generic_armv4_bs_sr_2, - bs_notimpl_bs_sr_4, + NSWAP(generic_armv4_bs_sr_2), + NSWAP(generic_bs_sr_4), bs_notimpl_bs_sr_8, /* copy */ @@ -130,38 +136,38 @@ struct bus_space bcm2835_bs_tag = { #ifdef __BUS_SPACE_HAS_STREAM_METHODS /* read (single) */ generic_bs_r_1, - generic_armv4_bs_r_2, - generic_bs_r_4, + NSWAP(generic_armv4_bs_r_2), + NSWAP(generic_bs_r_4), bs_notimpl_bs_r_8, /* read multiple */ generic_bs_rm_1, - generic_armv4_bs_rm_2, - generic_bs_rm_4, + NSWAP(generic_armv4_bs_rm_2), + NSWAP(generic_bs_rm_4), bs_notimpl_bs_rm_8, /* read region */ generic_bs_rr_1, - generic_armv4_bs_rr_2, - generic_bs_rr_4, + NSWAP(generic_armv4_bs_rr_2), + NSWAP(generic_bs_rr_4), bs_notimpl_bs_rr_8, /* write (single) */ generic_bs_w_1, - generic_armv4_bs_w_2, - generic_bs_w_4, + NSWAP(generic_armv4_bs_w_2), + NSWAP(generic_bs_w_4), bs_notimpl_bs_w_8, /* write multiple */ generic_bs_wm_1, - generic_armv4_bs_wm_2, - generic_bs_wm_4, + NSWAP(generic_armv4_bs_wm_2), + NSWAP(generic_bs_wm_4), bs_notimpl_bs_wm_8, /* write region */ generic_bs_wr_1, - generic_armv4_bs_wr_2, - generic_bs_wr_4, + NSWAP(generic_armv4_bs_wr_2), + NSWAP(generic_bs_wr_4), bs_notimpl_bs_wr_8, #endif }; @@ -173,7 +179,7 @@ struct bus_space bcm2835_a4x_bs_tag = { /* mapping/unmapping */ bcm2835_bs_map, bcm2835_bs_unmap, - bcm2835_bs_subregion, + bcm2835_a4x_bs_subregion, /* allocation/deallocation */ bcm2835_bs_alloc, /* not implemented */ @@ -183,21 +189,21 @@ struct bus_space bcm2835_a4x_bs_tag = { bcm2835_bs_vaddr, /* mmap */ - bs_notimpl_bs_mmap, + bcm2835_a4x_bs_mmap, /* barrier */ bcm2835_bs_barrier, /* read (single) */ a4x_bs_r_1, - a4x_bs_r_2, - a4x_bs_r_4, + NSWAP(a4x_bs_r_2), + NSWAP(a4x_bs_r_4), bs_notimpl_bs_r_8, /* read multiple */ a4x_bs_rm_1, - a4x_bs_rm_2, - a4x_bs_rm_4, + NSWAP(a4x_bs_rm_2), + NSWAP(a4x_bs_rm_4), bs_notimpl_bs_rm_8, /* read region */ @@ -208,15 +214,16 @@ struct bus_space bcm2835_a4x_bs_tag = { /* write (single) */ a4x_bs_w_1, - a4x_bs_w_2, - a4x_bs_w_4, + NSWAP(a4x_bs_w_2), + NSWAP(a4x_bs_w_4), bs_notimpl_bs_w_8, /* write multiple */ a4x_bs_wm_1, - a4x_bs_wm_2, - a4x_bs_wm_4, +
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Mon Nov 27 17:27:37 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_space.c Log Message: KNF To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/broadcom/bcm2835_space.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/broadcom/bcm2835_space.c diff -u src/sys/arch/arm/broadcom/bcm2835_space.c:1.11 src/sys/arch/arm/broadcom/bcm2835_space.c:1.12 --- src/sys/arch/arm/broadcom/bcm2835_space.c:1.11 Thu Nov 9 21:37:52 2017 +++ src/sys/arch/arm/broadcom/bcm2835_space.c Mon Nov 27 17:27:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_space.c,v 1.11 2017/11/09 21:37:52 skrll Exp $ */ +/* $NetBSD: bcm2835_space.c,v 1.12 2017/11/27 17:27:37 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.11 2017/11/09 21:37:52 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.12 2017/11/27 17:27:37 skrll Exp $"); #include #include @@ -364,7 +364,7 @@ bcm2835_bs_subregion(void *t, bus_space_ { *nbshp = bsh + offset; - return (0); + return 0; } void @@ -393,7 +393,7 @@ bcm2835_bs_mmap(void *t, bus_addr_t ba, if (flags & BUS_SPACE_MAP_PREFETCHABLE) bus_flags |= ARM32_MMAP_WRITECOMBINE; - return (arm_btop(pa + offset) | bus_flags); + return arm_btop(pa + offset) | bus_flags; } int
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Thu Nov 9 21:37:52 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_gpio.c bcm2835_space.c Log Message: Trailing whitespace To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/broadcom/bcm2835_gpio.c cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/broadcom/bcm2835_space.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/broadcom/bcm2835_gpio.c diff -u src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.4 src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.5 --- src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.4 Thu Sep 21 19:28:14 2017 +++ src/sys/arch/arm/broadcom/bcm2835_gpio.c Thu Nov 9 21:37:52 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_gpio.c,v 1.4 2017/09/21 19:28:14 skrll Exp $ */ +/* $NetBSD: bcm2835_gpio.c,v 1.5 2017/11/09 21:37:52 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.4 2017/09/21 19:28:14 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.5 2017/11/09 21:37:52 skrll Exp $"); /* * Driver for BCM2835 GPIO @@ -107,12 +107,12 @@ bcmgpio_attach(device_t parent, device_t u_int func; int error; #endif - + sc->sc_dev = self; - + #if NGPIO > 0 if (device_unit(sc->sc_dev) > 1) { - aprint_naive(" NO GPIO\n"); + aprint_naive(" NO GPIO\n"); aprint_normal(": NO GPIO\n"); return; } else if (device_unit(sc->sc_dev) == 1) { @@ -122,8 +122,8 @@ bcmgpio_attach(device_t parent, device_t maxpin = 31; minpin = 0; } - - aprint_naive("\n"); + + aprint_naive("\n"); aprint_normal(": GPIO [%d...%d]\n", minpin, maxpin); sc->sc_iot = aaa->aaa_iot; @@ -137,13 +137,13 @@ bcmgpio_attach(device_t parent, device_t for (pin = minpin; pin <= maxpin; pin++) { int epin = pin - minpin; - + sc->sc_gpio_pins[epin].pin_num = epin; /* * find out pins still available for GPIO */ func = bcm2835gpio_function_read(pin); - + if (func == BCM2835_GPIO_IN || func == BCM2835_GPIO_OUT) { sc->sc_gpio_pins[epin].pin_caps = GPIO_PIN_INPUT | @@ -160,13 +160,13 @@ bcmgpio_attach(device_t parent, device_t DPRINTF(1, ("%s: skip pin %d - func = 0x%x\n", device_xname(sc->sc_dev), pin, func)); } } - + /* create controller tag */ sc->sc_gpio_gc.gp_cookie = sc; sc->sc_gpio_gc.gp_pin_read = bcm2835gpio_gpio_pin_read; sc->sc_gpio_gc.gp_pin_write = bcm2835gpio_gpio_pin_write; sc->sc_gpio_gc.gp_pin_ctl = bcm2835gpio_gpio_pin_ctl; - + gba.gba_gc = >sc_gpio_gc; gba.gba_pins = sc->sc_gpio_pins; gba.gba_npins = maxpin - minpin + 1; @@ -190,7 +190,7 @@ bcm2835gpio_gpio_pin_read(void *arg, int if (device_unit(sc->sc_dev) > 1) { return 0; } - + val = bus_space_read_4(sc->sc_iot, sc->sc_ioh, BCM2835_GPIO_GPLEV(epin / BCM2835_GPIO_GPLEV_PINS_PER_REGISTER)); @@ -198,7 +198,7 @@ bcm2835gpio_gpio_pin_read(void *arg, int GPIO_PIN_HIGH : GPIO_PIN_LOW; DPRINTF(2, ("%s: gpio_read pin %d->%d\n", device_xname(sc->sc_dev), epin, (res == GPIO_PIN_HIGH))); - + return res; } @@ -208,17 +208,17 @@ bcm2835gpio_gpio_pin_write(void *arg, in struct bcmgpio_softc *sc = arg; int epin = pin + device_unit(sc->sc_dev) * 32; bus_size_t reg; - + if (device_unit(sc->sc_dev) > 1) { return; } - + if (value == GPIO_PIN_HIGH) { reg = BCM2835_GPIO_GPSET(epin / BCM2835_GPIO_GPSET_PINS_PER_REGISTER); } else { reg = BCM2835_GPIO_GPCLR(epin / BCM2835_GPIO_GPCLR_PINS_PER_REGISTER); } - + bus_space_write_4(sc->sc_iot, sc->sc_ioh, reg, 1 << (epin % BCM2835_GPIO_GPSET_PINS_PER_REGISTER)); DPRINTF(2, ("%s: gpio_write pin %d<-%d\n", device_xname(sc->sc_dev), epin, (value == GPIO_PIN_HIGH))); @@ -230,11 +230,11 @@ bcm2835gpio_gpio_pin_ctl(void *arg, int struct bcmgpio_softc *sc = arg; uint32_t cmd; int epin = pin + device_unit(sc->sc_dev) * 32; - + if (device_unit(sc->sc_dev) > 1) { return; } - + DPRINTF(2, ("%s: gpio_ctl pin %d flags 0x%x\n", device_xname(sc->sc_dev), epin, flags)); if (flags & (GPIO_PIN_OUTPUT|GPIO_PIN_INPUT)) { @@ -264,7 +264,7 @@ bcm2835gpio_gpio_pin_ctl(void *arg, int delay(1); /* wait 150 cycles */ /* reset control signal and clock */ bus_space_write_4(sc->sc_iot, sc->sc_ioh, - BCM2835_GPIO_GPPUD, BCM2835_GPIO_GPPUD_PULLOFF); + BCM2835_GPIO_GPPUD, BCM2835_GPIO_GPPUD_PULLOFF); bus_space_write_4(sc->sc_iot, sc->sc_ioh, BCM2835_GPIO_GPPUDCLK(device_unit(sc->sc_dev)), 0); Index: src/sys/arch/arm/broadcom/bcm2835_space.c diff -u src/sys/arch/arm/broadcom/bcm2835_space.c:1.10 src/sys/arch/arm/broadcom/bcm2835_space.c:1.11 --- src/sys/arch/arm/broadcom/bcm2835_space.c:1.10 Tue Feb 2 13:55:50 2016 +++ src/sys/arch/arm/broadcom/bcm2835_space.c Thu Nov 9 21:37:52 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_space.c,v 1.10 2016/02/02 13:55:50 skrll
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: msaitoh Date: Mon Oct 23 09:23:25 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm53xx_eth.c Log Message: If error occured in bcmeth_ccb_attach(), free resources and return. To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sys/arch/arm/broadcom/bcm53xx_eth.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/broadcom/bcm53xx_eth.c diff -u src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.29 src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.30 --- src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.29 Thu Dec 15 09:28:02 2016 +++ src/sys/arch/arm/broadcom/bcm53xx_eth.c Mon Oct 23 09:23:25 2017 @@ -35,7 +35,7 @@ #include -__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.29 2016/12/15 09:28:02 ozaki-r Exp $"); +__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.30 2017/10/23 09:23:25 msaitoh Exp $"); #include #include @@ -321,45 +321,52 @@ bcmeth_ccb_attach(device_t parent, devic error = bcmeth_rxq_attach(sc, >sc_rxq, 0); if (error) { aprint_error(": failed to init rxq: %d\n", error); - return; + goto fail_1; } error = bcmeth_txq_attach(sc, >sc_txq, 0); if (error) { aprint_error(": failed to init txq: %d\n", error); - return; + goto fail_1; } error = bcmeth_mapcache_create(sc, >sc_rx_mapcache, BCMETH_MAXRXMBUFS, MCLBYTES, BCMETH_NRXSEGS); if (error) { aprint_error(": failed to allocate rx dmamaps: %d\n", error); - return; + goto fail_1; } error = bcmeth_mapcache_create(sc, >sc_tx_mapcache, BCMETH_MAXTXMBUFS, MCLBYTES, BCMETH_NTXSEGS); if (error) { aprint_error(": failed to allocate tx dmamaps: %d\n", error); - return; + goto fail_1; } error = workqueue_create(>sc_workq, xname, bcmeth_worker, sc, (PRI_USER + MAXPRI_USER) / 2, IPL_NET, WQ_MPSAFE|WQ_PERCPU); if (error) { aprint_error(": failed to create workqueue: %d\n", error); - return; + goto fail_2; } sc->sc_soft_ih = softint_establish(SOFTINT_MPSAFE | SOFTINT_NET, bcmeth_soft_intr, sc); + if (sc->sc_ih == NULL) { + aprint_error_dev(self, "failed to establish interrupt %d\n", + loc->loc_intrs[0]); + goto fail_3; + } + sc->sc_ih = intr_establish(loc->loc_intrs[0], IPL_VM, IST_LEVEL, bcmeth_intr, sc); if (sc->sc_ih == NULL) { aprint_error_dev(self, "failed to establish interrupt %d\n", loc->loc_intrs[0]); + goto fail_4; } else { aprint_normal_dev(self, "interrupting on irq %d\n", loc->loc_intrs[0]); @@ -401,7 +408,12 @@ bcmeth_ccb_attach(device_t parent, devic /* * Attach the interface. */ - if_initialize(ifp); + error = if_initialize(ifp); + if (error != 0) { + aprint_error_dev(sc->sc_dev, "if_initialize failed(%d)\n", + error); + goto fail_5; + } ether_ifattach(ifp, sc->sc_enaddr); if_register(ifp); @@ -419,6 +431,20 @@ bcmeth_ccb_attach(device_t parent, devic evcnt_attach_dynamic(>sc_ev_rx_badmagic_hi, EVCNT_TYPE_MISC, NULL, xname, "rx badmagic hi"); #endif + + return; + +fail_5: + ifmedia_removeall(>sc_media); +fail_4: + intr_disestablish(sc->sc_ih); +fail_3: + softint_disestablish(sc->sc_soft_ih); +fail_2: + workqueue_destroy(sc->sc_workq); +fail_1: + mutex_obj_free(sc->sc_lock); + mutex_obj_free(sc->sc_hwlock); } static int
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Thu Oct 19 05:45:37 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_cm.h bcm2835_pwm.h Log Message: Fix RCSIds To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2835_cm.h \ src/sys/arch/arm/broadcom/bcm2835_pwm.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/broadcom/bcm2835_cm.h diff -u src/sys/arch/arm/broadcom/bcm2835_cm.h:1.1 src/sys/arch/arm/broadcom/bcm2835_cm.h:1.2 --- src/sys/arch/arm/broadcom/bcm2835_cm.h:1.1 Sat Nov 21 07:41:29 2015 +++ src/sys/arch/arm/broadcom/bcm2835_cm.h Thu Oct 19 05:45:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: */ +/* $NetBSD: bcm2835_cm.h,v 1.2 2017/10/19 05:45:37 skrll Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. Index: src/sys/arch/arm/broadcom/bcm2835_pwm.h diff -u src/sys/arch/arm/broadcom/bcm2835_pwm.h:1.1 src/sys/arch/arm/broadcom/bcm2835_pwm.h:1.2 --- src/sys/arch/arm/broadcom/bcm2835_pwm.h:1.1 Sat Nov 21 07:41:29 2015 +++ src/sys/arch/arm/broadcom/bcm2835_pwm.h Thu Oct 19 05:45:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: */ +/* $NetBSD: bcm2835_pwm.h,v 1.2 2017/10/19 05:45:37 skrll Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc.
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Sun Oct 15 09:33:25 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c Log Message: Simplify array initialisation To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/broadcom/bcm2835_intr.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.12 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.13 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.12 Sun Jul 30 16:54:36 2017 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Sun Oct 15 09:33:25 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.12 2017/07/30 16:54:36 jmcneill Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.13 2017/10/15 09:33:25 skrll Exp $ */ /*- * Copyright (c) 2012, 2015 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.12 2017/07/30 16:54:36 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.13 2017/10/15 09:33:25 skrll Exp $"); #define _INTR_PRIVATE @@ -105,26 +105,11 @@ static struct pic_ops bcm2836mp_picops = }; struct pic_softc bcm2836mp_pic[BCM2836_NCPUS] = { - [0] = { + [0 ... BCM2836_NCPUS - 1] = { .pic_ops = _picops, .pic_maxsources = BCM2836_NIRQPERCPU, .pic_name = "bcm2836 pic", - }, - [1] = { - .pic_ops = _picops, - .pic_maxsources = BCM2836_NIRQPERCPU, - .pic_name = "bcm2836 pic", - }, - [2] = { - .pic_ops = _picops, - .pic_maxsources = BCM2836_NIRQPERCPU, - .pic_name = "bcm2836 pic", - }, - [3] = { - .pic_ops = _picops, - .pic_maxsources = BCM2836_NIRQPERCPU, - .pic_name = "bcm2836 pic", - }, + } }; #endif @@ -293,7 +278,6 @@ bcm2835_pic_find_pending_irqs(struct pic if (armirq) { ipl |= pic_mark_pending_sources(pic, BCM2835_INT_BASICBASE - BCM2835_INT_BASE, armirq); - } if (gpu0irq || (bpending & BCM2835_INTBIT_PENDING1)) {
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Thu Sep 21 19:28:14 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_gpio.c bcm2835_tmr.c Log Message: spaces to tabs To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/broadcom/bcm2835_gpio.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/broadcom/bcm2835_tmr.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/broadcom/bcm2835_gpio.c diff -u src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.3 src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.4 --- src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.3 Tue Feb 2 13:55:50 2016 +++ src/sys/arch/arm/broadcom/bcm2835_gpio.c Thu Sep 21 19:28:14 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_gpio.c,v 1.3 2016/02/02 13:55:50 skrll Exp $ */ +/* $NetBSD: bcm2835_gpio.c,v 1.4 2017/09/21 19:28:14 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.3 2016/02/02 13:55:50 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.4 2017/09/21 19:28:14 skrll Exp $"); /* * Driver for BCM2835 GPIO @@ -154,12 +154,12 @@ bcmgpio_attach(device_t parent, device_t sc->sc_gpio_pins[epin].pin_state = bcm2835gpio_gpio_pin_read(sc, epin); DPRINTF(1, ("%s: attach pin %d\n", device_xname(sc->sc_dev), pin)); -} else { + } else { sc->sc_gpio_pins[epin].pin_caps = 0; sc->sc_gpio_pins[epin].pin_state = 0; DPRINTF(1, ("%s: skip pin %d - func = 0x%x\n", device_xname(sc->sc_dev), pin, func)); -} -} + } + } /* create controller tag */ sc->sc_gpio_gc.gp_cookie = sc; @@ -241,7 +241,7 @@ bcm2835gpio_gpio_pin_ctl(void *arg, int if ((flags & GPIO_PIN_INPUT) || !(flags & GPIO_PIN_OUTPUT)) { /* for safety INPUT will overide output */ bcm2835gpio_function_select(epin, BCM2835_GPIO_IN); -} else { + } else { bcm2835gpio_function_select(epin, BCM2835_GPIO_OUT); } } Index: src/sys/arch/arm/broadcom/bcm2835_tmr.c diff -u src/sys/arch/arm/broadcom/bcm2835_tmr.c:1.7 src/sys/arch/arm/broadcom/bcm2835_tmr.c:1.8 --- src/sys/arch/arm/broadcom/bcm2835_tmr.c:1.7 Wed Jul 29 14:22:49 2015 +++ src/sys/arch/arm/broadcom/bcm2835_tmr.c Thu Sep 21 19:28:14 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_tmr.c,v 1.7 2015/07/29 14:22:49 skrll Exp $ */ +/* $NetBSD: bcm2835_tmr.c,v 1.8 2017/09/21 19:28:14 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_tmr.c,v 1.7 2015/07/29 14:22:49 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_tmr.c,v 1.8 2017/09/21 19:28:14 skrll Exp $"); #include #include @@ -105,7 +105,7 @@ bcmtmr_match(device_t parent, cfdata_t m static void bcmtmr_attach(device_t parent, device_t self, void *aux) { -struct bcm2835tmr_softc *sc = device_private(self); + struct bcm2835tmr_softc *sc = device_private(self); struct amba_attach_args *aaa = aux; aprint_naive("\n");
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Mon Jul 31 23:54:19 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_com.c Log Message: mark ISR as mpsafe, detect when this is the console To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/broadcom/bcm2835_com.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/broadcom/bcm2835_com.c diff -u src/sys/arch/arm/broadcom/bcm2835_com.c:1.2 src/sys/arch/arm/broadcom/bcm2835_com.c:1.3 --- src/sys/arch/arm/broadcom/bcm2835_com.c:1.2 Mon Jul 31 00:51:20 2017 +++ src/sys/arch/arm/broadcom/bcm2835_com.c Mon Jul 31 23:54:19 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_com.c,v 1.2 2017/07/31 00:51:20 jmcneill Exp $ */ +/* $NetBSD: bcm2835_com.c,v 1.3 2017/07/31 23:54:19 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared McNeill@@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_com.c,v 1.2 2017/07/31 00:51:20 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_com.c,v 1.3 2017/07/31 23:54:19 jmcneill Exp $"); #include #include @@ -77,7 +77,8 @@ bcm_com_attach(device_t parent, device_t } sc->sc_frequency *= 2; - if (bus_space_map(bst, aaa->aaa_addr, aaa->aaa_size, 0, ) != 0) { + if (com_is_console(bst, aaa->aaa_addr, ) == 0 && + bus_space_map(bst, aaa->aaa_addr, aaa->aaa_size, 0, ) != 0) { aprint_error(": can't map device\n"); return; } @@ -87,7 +88,8 @@ bcm_com_attach(device_t parent, device_t com_attach_subr(sc); aprint_naive("\n"); - ih = intr_establish(aaa->aaa_intr, IPL_SERIAL, IST_LEVEL, comintr, sc); + ih = intr_establish(aaa->aaa_intr, IPL_SERIAL, IST_LEVEL | IST_MPSAFE, + comintr, sc); if (ih == NULL) { aprint_error_dev(self, "failed to establish interrupt %d\n", aaa->aaa_intr);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Mon Jul 31 00:51:20 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_com.c Log Message: Set the correct com type To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2835_com.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/broadcom/bcm2835_com.c diff -u src/sys/arch/arm/broadcom/bcm2835_com.c:1.1 src/sys/arch/arm/broadcom/bcm2835_com.c:1.2 --- src/sys/arch/arm/broadcom/bcm2835_com.c:1.1 Sun Jul 30 23:48:32 2017 +++ src/sys/arch/arm/broadcom/bcm2835_com.c Mon Jul 31 00:51:20 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_com.c,v 1.1 2017/07/30 23:48:32 jmcneill Exp $ */ +/* $NetBSD: bcm2835_com.c,v 1.2 2017/07/31 00:51:20 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared McNeill@@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_com.c,v 1.1 2017/07/30 23:48:32 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_com.c,v 1.2 2017/07/31 00:51:20 jmcneill Exp $"); #include #include @@ -68,7 +68,7 @@ bcm_com_attach(device_t parent, device_t void *ih; sc->sc_dev = self; - sc->sc_type = COM_TYPE_NORMAL; + sc->sc_type = COM_TYPE_BCMAUXUART; prop_dictionary_get_uint32(dict, "frequency", >sc_frequency); if (sc->sc_frequency == 0) {
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sun Jul 30 23:47:58 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_sdhost.c Log Message: Cleanup debug messages To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/broadcom/bcm2835_sdhost.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/broadcom/bcm2835_sdhost.c diff -u src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.1 src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.2 --- src/sys/arch/arm/broadcom/bcm2835_sdhost.c:1.1 Sun Jul 30 16:54:36 2017 +++ src/sys/arch/arm/broadcom/bcm2835_sdhost.c Sun Jul 30 23:47:58 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_sdhost.c,v 1.1 2017/07/30 16:54:36 jmcneill Exp $ */ +/* $NetBSD: bcm2835_sdhost.c,v 1.2 2017/07/30 23:47:58 jmcneill Exp $ */ /*- * Copyright (c) 2017 Jared McNeill@@ -27,7 +27,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.1 2017/07/30 16:54:36 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_sdhost.c,v 1.2 2017/07/30 23:47:58 jmcneill Exp $"); #include #include @@ -114,8 +114,6 @@ static void sdhost_exec_command(sdmmc_ch static void sdhost_card_enable_intr(sdmmc_chipset_handle_t, int); static void sdhost_card_intr_ack(sdmmc_chipset_handle_t); -void sdhost_dump_regs(void); - static struct sdmmc_chip_functions sdhost_chip_functions = { .host_reset = sdhost_host_reset, .host_ocr = sdhost_host_ocr, @@ -203,15 +201,13 @@ sdhost_attach(device_t parent, device_t aprint_naive("\n"); aprint_normal(": SD HOST controller\n"); -sdhost_dump_regs(); - prop_dictionary_get_uint32(dict, "frequency", >sc_rate); if (sc->sc_rate == 0) { aprint_error_dev(self, "couldn't get clock frequency\n"); return; } - aprint_normal_dev(self, "ref freq %u Hz\n", sc->sc_rate); + aprint_debug_dev(self, "ref freq %u Hz\n", sc->sc_rate); if (sdhost_dma_setup(sc) != 0) { aprint_error_dev(self, "failed to setup DMA\n"); @@ -705,28 +701,3 @@ static void sdhost_card_intr_ack(sdmmc_chipset_handle_t sch) { } - -void -sdhost_dump_regs(void) -{ - device_t dev = device_find_by_driver_unit("sdhost", 0); - if (dev == NULL) - return; - struct sdhost_softc * const sc = device_private(dev); - - device_printf(dev, "SDCMD = %08x\n", SDHOST_READ(sc, SDCMD)); - device_printf(dev, "SDARG = %08x\n", SDHOST_READ(sc, SDARG)); - device_printf(dev, "SDTOUT = %08x\n", SDHOST_READ(sc, SDTOUT)); - device_printf(dev, "SDCDIV = %08x\n", SDHOST_READ(sc, SDCDIV)); - device_printf(dev, "SDRSP0 = %08x\n", SDHOST_READ(sc, SDRSP0)); - device_printf(dev, "SDRSP1 = %08x\n", SDHOST_READ(sc, SDRSP1)); - device_printf(dev, "SDRSP2 = %08x\n", SDHOST_READ(sc, SDRSP2)); - device_printf(dev, "SDRSP3 = %08x\n", SDHOST_READ(sc, SDRSP3)); - device_printf(dev, "SDHSTS = %08x\n", SDHOST_READ(sc, SDHSTS)); - device_printf(dev, "SDVDD = %08x\n", SDHOST_READ(sc, SDVDD)); - device_printf(dev, "SDEDM = %08x\n", SDHOST_READ(sc, SDEDM)); - device_printf(dev, "SDHCFG = %08x\n", SDHOST_READ(sc, SDHCFG)); - device_printf(dev, "SDHBCT = %08x\n", SDHOST_READ(sc, SDHBCT)); - device_printf(dev, "SDDATA = \n"); - device_printf(dev, "SDHBLC = %08x\n", SDHOST_READ(sc, SDHBLC)); -}
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Thu Jun 22 13:13:51 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm2835_emmc.c Log Message: Disable SDR50 support, it is not reliable on these boards. To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.29 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.30 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.29 Tue Feb 2 13:55:50 2016 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Thu Jun 22 13:13:51 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.29 2016/02/02 13:55:50 skrll Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.30 2017/06/22 13:13:51 jmcneill Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.29 2016/02/02 13:55:50 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_emmc.c,v 1.30 2017/06/22 13:13:51 jmcneill Exp $"); #include "bcmdmac.h" @@ -117,7 +117,6 @@ bcmemmc_attach(device_t parent, device_t sc->sc.sc_flags |= SDHC_FLAG_NO_HS_BIT; sc->sc.sc_caps = SDHC_VOLTAGE_SUPP_3_3V | SDHC_HIGH_SPEED_SUPP | (SDHC_MAX_BLK_LEN_1024 << SDHC_MAX_BLK_LEN_SHIFT); - sc->sc.sc_caps2 = SDHC_SDR50_SUPP; sc->sc.sc_host = sc->sc_hosts; sc->sc.sc_clkbase = 5; /* Default to 50MHz */
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: christos Date: Sun Jan 8 05:05:27 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm53xx_rng.c Log Message: fix typo To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/broadcom/bcm53xx_rng.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/broadcom/bcm53xx_rng.c diff -u src/sys/arch/arm/broadcom/bcm53xx_rng.c:1.9 src/sys/arch/arm/broadcom/bcm53xx_rng.c:1.10 --- src/sys/arch/arm/broadcom/bcm53xx_rng.c:1.9 Sun Jan 8 00:04:45 2017 +++ src/sys/arch/arm/broadcom/bcm53xx_rng.c Sun Jan 8 00:05:27 2017 @@ -33,7 +33,7 @@ #include -__KERNEL_RCSID(1, "$NetBSD: bcm53xx_rng.c,v 1.9 2017/01/08 05:04:45 christos Exp $"); +__KERNEL_RCSID(1, "$NetBSD: bcm53xx_rng.c,v 1.10 2017/01/08 05:05:27 christos Exp $"); #include #include @@ -170,7 +170,7 @@ bcmrng_empty(struct bcmrng_softc *sc) return 0; } if (nwords > __arraycount(data)) - nords = __arraycount(data); + nwords = __arraycount(data); bcmrng_read_multi_4(sc, RNG_DATA, data, nwords);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: christos Date: Sun Jan 8 05:04:45 UTC 2017 Modified Files: src/sys/arch/arm/broadcom: bcm53xx_rng.c Log Message: Limit number of words we read.. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/broadcom/bcm53xx_rng.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/broadcom/bcm53xx_rng.c diff -u src/sys/arch/arm/broadcom/bcm53xx_rng.c:1.8 src/sys/arch/arm/broadcom/bcm53xx_rng.c:1.9 --- src/sys/arch/arm/broadcom/bcm53xx_rng.c:1.8 Mon Apr 13 17:18:40 2015 +++ src/sys/arch/arm/broadcom/bcm53xx_rng.c Sun Jan 8 00:04:45 2017 @@ -33,7 +33,7 @@ #include -__KERNEL_RCSID(1, "$NetBSD: bcm53xx_rng.c,v 1.8 2015/04/13 21:18:40 riastradh Exp $"); +__KERNEL_RCSID(1, "$NetBSD: bcm53xx_rng.c,v 1.9 2017/01/08 05:04:45 christos Exp $"); #include #include @@ -163,13 +163,14 @@ size_t bcmrng_empty(struct bcmrng_softc *sc) { mutex_enter(sc->sc_lock); + uint32_t data[128]; size_t nwords = __SHIFTOUT(bcmrng_read_4(sc, RNG_STATUS), RNG_VAL); if (nwords == 0) { mutex_exit(sc->sc_lock); return 0; } - - uint32_t data[nwords]; + if (nwords > __arraycount(data)) + nords = __arraycount(data); bcmrng_read_multi_4(sc, RNG_DATA, data, nwords);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: nat Date: Fri Oct 14 20:29:45 UTC 2016 Modified Files: src/sys/arch/arm/broadcom: bcm2835_vcaudio.c Log Message: Only run interrupt during playback. OK skrll@ To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/broadcom/bcm2835_vcaudio.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/broadcom/bcm2835_vcaudio.c diff -u src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.10 src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.11 --- src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.10 Tue Jul 28 21:24:43 2015 +++ src/sys/arch/arm/broadcom/bcm2835_vcaudio.c Fri Oct 14 20:29:45 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_vcaudio.c,v 1.10 2015/07/28 21:24:43 skrll Exp $ */ +/* $NetBSD: bcm2835_vcaudio.c,v 1.11 2016/10/14 20:29:45 nat Exp $ */ /*- * Copyright (c) 2013 Jared D. McNeill@@ -31,7 +31,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.10 2015/07/28 21:24:43 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_vcaudio.c,v 1.11 2016/10/14 20:29:45 nat Exp $"); #include #include @@ -436,7 +436,7 @@ vcaudio_service_callback(void *priv, con sched = true; } - if (sched) { + if (sched && sc->sc_pint) { intr(intrarg); sc->sc_abytes += sc->sc_pblksize; cv_signal(>sc_datacv);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Sat Dec 19 08:27:01 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_space.c Log Message: Fix up bus_space_map for latest RPI firmware which now passes the FB address in the mailbox properties as a bus address. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/broadcom/bcm2835_space.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/broadcom/bcm2835_space.c diff -u src/sys/arch/arm/broadcom/bcm2835_space.c:1.8 src/sys/arch/arm/broadcom/bcm2835_space.c:1.9 --- src/sys/arch/arm/broadcom/bcm2835_space.c:1.8 Sat Feb 28 09:34:34 2015 +++ src/sys/arch/arm/broadcom/bcm2835_space.c Sat Dec 19 08:27:01 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_space.c,v 1.8 2015/02/28 09:34:34 skrll Exp $ */ +/* $NetBSD: bcm2835_space.c,v 1.9 2015/12/19 08:27:01 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.8 2015/02/28 09:34:34 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_space.c,v 1.9 2015/12/19 08:27:01 skrll Exp $"); #include #include @@ -292,18 +292,17 @@ bcm2835_bs_map(void *t, bus_addr_t ba, b int pmap_flags; -#if defined(BCM2836) + /* Attempt to find the PA device mapping */ pa = ba; -#else - pa = ba & ~BCM2835_BUSADDR_CACHE_MASK; -#endif - /* this does device addresses */ - if ((pd = pmap_devmap_find_pa(pa, size)) != NULL) { + if ((pd = pmap_devmap_find_pa(ba, size)) != NULL) { /* Device was statically mapped. */ *bshp = pd->pd_va + (pa - pd->pd_pa); return 0; } + /* Now assume bus address so convert to PA */ + pa = ba & ~BCM2835_BUSADDR_CACHE_MASK; + startpa = trunc_page(pa); endpa = round_page(pa + size);
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Thu Dec 17 08:31:50 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835reg.h Log Message: Provide all the BCM2836_INT_CNT*_CPUN helper macros No functional change. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/broadcom/bcm2835reg.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/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.16 src/sys/arch/arm/broadcom/bcm2835reg.h:1.17 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.16 Sat Nov 21 07:41:29 2015 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Thu Dec 17 08:31:50 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.16 2015/11/21 07:41:29 mlelstv Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.17 2015/12/17 08:31:50 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -155,7 +155,10 @@ #define BCM2836_INT_TIMER 11 #define BCM2836_INT_NLOCAL 12 +#define BCM2836_INT_CNTPSIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTPSIRQ) +#define BCM2836_INT_CNTPNSIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTPNSIRQ) #define BCM2836_INT_CNTVIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTVIRQ) +#define BCM2836_INT_CNTHPIRQ_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_CNTHPIRQ) #define BCM2836_INT_MAILBOX0_CPUN(n) (BCM2836_INT_BASECPUN(n) + BCM2836_INT_MAILBOX0) #else #define BCM2835_INT_BASE 0
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Sat Nov 21 07:41:29 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_obio.c bcm2835reg.h files.bcm2835 Added Files: src/sys/arch/arm/broadcom: bcm2835_cm.c bcm2835_cm.h bcm2835_pwm.c bcm2835_pwm.h Log Message: Add drivers to access the clock manager and pulse width modulator. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/broadcom/bcm2835_cm.c \ src/sys/arch/arm/broadcom/bcm2835_cm.h \ src/sys/arch/arm/broadcom/bcm2835_pwm.c \ src/sys/arch/arm/broadcom/bcm2835_pwm.h cvs rdiff -u -r1.25 -r1.26 src/sys/arch/arm/broadcom/bcm2835_obio.c \ src/sys/arch/arm/broadcom/files.bcm2835 cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/broadcom/bcm2835reg.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/broadcom/bcm2835_obio.c diff -u src/sys/arch/arm/broadcom/bcm2835_obio.c:1.25 src/sys/arch/arm/broadcom/bcm2835_obio.c:1.26 --- src/sys/arch/arm/broadcom/bcm2835_obio.c:1.25 Sun Apr 12 17:32:39 2015 +++ src/sys/arch/arm/broadcom/bcm2835_obio.c Sat Nov 21 07:41:29 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_obio.c,v 1.25 2015/04/12 17:32:39 skrll Exp $ */ +/* $NetBSD: bcm2835_obio.c,v 1.26 2015/11/21 07:41:29 mlelstv Exp $ */ /*- * Copyright (c) 2012, 2014 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: bcm2835_obio.c,v 1.25 2015/04/12 17:32:39 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_obio.c,v 1.26 2015/11/21 07:41:29 mlelstv Exp $"); #include "locators.h" #include "obio.h" @@ -194,6 +194,20 @@ static const struct ambadev_locators bcm .ad_intr = -1, }, { + /* Clock Manager */ + .ad_name = "bcmcm", + .ad_addr = BCM2835_CM_BASE, + .ad_size = BCM2835_CM_SIZE, + .ad_intr = -1, + }, + { + /* PWM Controller */ + .ad_name = "bcmpwm", + .ad_addr = BCM2835_PWM_BASE, + .ad_size = BCM2835_PWM_SIZE, + .ad_intr = -1, + }, + { /* Terminator */ .ad_name = NULL, } Index: src/sys/arch/arm/broadcom/files.bcm2835 diff -u src/sys/arch/arm/broadcom/files.bcm2835:1.25 src/sys/arch/arm/broadcom/files.bcm2835:1.26 --- src/sys/arch/arm/broadcom/files.bcm2835:1.25 Fri Mar 13 22:48:41 2015 +++ src/sys/arch/arm/broadcom/files.bcm2835 Sat Nov 21 07:41:29 2015 @@ -1,4 +1,4 @@ -# $NetBSD: files.bcm2835,v 1.25 2015/03/13 22:48:41 jmcneill Exp $ +# $NetBSD: files.bcm2835,v 1.26 2015/11/21 07:41:29 mlelstv Exp $ # # Configuration info for Broadcom BCM2835 ARM Peripherals # @@ -100,3 +100,14 @@ file arch/arm/broadcom/bcm2835_vcaudio.c device bcmgpio: gpiobus attach bcmgpio at obio file arch/arm/broadcom/bcm2835_gpio.c + +# Clock Manager (BCM2835_CM_BASE) +device bcmcm +attach bcmcm at obio with bcmcm_amba +file arch/arm/broadcom/bcm2835_cm.c bcmcm needs-flag + +# PWM Controller (BCM2835_PWM_BASE) +device bcmpwm +attach bcmpwm at obio with bcmpwm_amba +file arch/arm/broadcom/bcm2835_pwm.c bcmpwm needs-flag + Index: src/sys/arch/arm/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.15 src/sys/arch/arm/broadcom/bcm2835reg.h:1.16 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.15 Sun Apr 12 17:32:39 2015 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Sat Nov 21 07:41:29 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.15 2015/04/12 17:32:39 skrll Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.16 2015/11/21 07:41:29 mlelstv Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -54,12 +54,14 @@ #define BCM2835_DMA0_BASE (BCM2835_PERIPHERALS_BASE + 0x7000) #define BCM2835_ARM_BASE (BCM2835_PERIPHERALS_BASE + 0xB000) #define BCM2835_PM_BASE (BCM2835_PERIPHERALS_BASE + 0x0010) +#define BCM2835_CM_BASE (BCM2835_PERIPHERALS_BASE + 0x00101000) #define BCM2835_RNG_BASE (BCM2835_PERIPHERALS_BASE + 0x00104000) #define BCM2835_GPIO_BASE (BCM2835_PERIPHERALS_BASE + 0x0020) #define BCM2835_UART0_BASE (BCM2835_PERIPHERALS_BASE + 0x00201000) #define BCM2835_PCM_BASE (BCM2835_PERIPHERALS_BASE + 0x00203000) #define BCM2835_SPI0_BASE (BCM2835_PERIPHERALS_BASE + 0x00204000) #define BCM2835_BSC0_BASE (BCM2835_PERIPHERALS_BASE + 0x00205000) +#define BCM2835_PWM_BASE (BCM2835_PERIPHERALS_BASE + 0x0020C000) #define BCM2835_BSCSPISLV_BASE (BCM2835_PERIPHERALS_BASE + 0x00214000) #define BCM2835_AUX_BASE (BCM2835_PERIPHERALS_BASE + 0x00215000) #define BCM2835_EMMC_BASE (BCM2835_PERIPHERALS_BASE + 0x0030) @@ -72,12 +74,14 @@ #define BCM2835_DMA0_SIZE 0x1000 #define BCM2835_ARM_SIZE 0x1000 #define BCM2835_PM_SIZE 0x1000 +#define BCM2835_CM_SIZE 0xa8 #define BCM2835_RNG_SIZE 0x1000 #define BCM2835_GPIO_SIZE 0x1000 #define BCM2835_UART0_SIZE 0x90 #define BCM2835_PCM_SIZE 0x1000 #define BCM2835_SPI0_SIZE 0x1000 #define BCM2835_BSC_SIZE 0x1000 +#define BCM2835_PWM_SIZE 0x28 #define BCM2835_AUX_SIZE 0x1000 #define BCM2835_EMMC_SIZE 0x1000 #define BCM2835_USB_SIZE 0x2 Added
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Sun Aug 9 13:07:47 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_dmac.c Log Message: Make the DMA halt procedure follow better the documentation. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/broadcom/bcm2835_dmac.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/broadcom/bcm2835_dmac.c diff -u src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.13 src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.14 --- src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.13 Sun Aug 9 13:06:44 2015 +++ src/sys/arch/arm/broadcom/bcm2835_dmac.c Sun Aug 9 13:07:47 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_dmac.c,v 1.13 2015/08/09 13:06:44 mlelstv Exp $ */ +/* $NetBSD: bcm2835_dmac.c,v 1.14 2015/08/09 13:07:47 mlelstv Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include opt_ddb.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bcm2835_dmac.c,v 1.13 2015/08/09 13:06:44 mlelstv Exp $); +__KERNEL_RCSID(0, $NetBSD: bcm2835_dmac.c,v 1.14 2015/08/09 13:07:47 mlelstv Exp $); #include sys/param.h #include sys/bus.h @@ -237,9 +237,9 @@ bcm_dmac_free(struct bcm_dmac_channel *c bcm_dmac_halt(ch); + /* reset chip */ val = DMAC_READ(sc, DMAC_CS(ch-ch_index)); val |= DMAC_CS_RESET; - val |= DMAC_CS_ABORT; val = ~DMAC_CS_ACTIVE; DMAC_WRITE(sc, DMAC_CS(ch-ch_index), val); @@ -279,9 +279,21 @@ void bcm_dmac_halt(struct bcm_dmac_channel *ch) { struct bcm_dmac_softc *sc = ch-ch_sc; + uint32_t val; + + /* pause DMA */ + val = DMAC_READ(sc, DMAC_CS(ch-ch_index)); + val = ~DMAC_CS_ACTIVE; + DMAC_WRITE(sc, DMAC_CS(ch-ch_index), val); + + /* wait for paused state ? */ - DMAC_WRITE(sc, DMAC_CS(ch-ch_index), DMAC_CS_RESET|DMAC_CS_ABORT); - bcm_dmac_set_conblk_addr(ch, 0); + /* end descriptor chain */ + DMAC_WRITE(sc, DMAC_NEXTCONBK(ch-ch_index), 0); + + /* resume DMA that then stops */ + val |= DMAC_CS_ACTIVE | DMAC_CS_ABORT; + DMAC_WRITE(sc, DMAC_CS(ch-ch_index), val); } #if defined(DDB)
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Sun Aug 9 13:06:44 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_dmac.c bcm2835_dmac.h bcm2835_emmc.c Log Message: Invoke callback routine for all DMA interrupts. Pass status and error bits to callback instead of filtering them early. Adjust the current only callback routine in the EMMC driver. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/broadcom/bcm2835_dmac.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/broadcom/bcm2835_dmac.h cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_dmac.c diff -u src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.12 src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.13 --- src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.12 Sun Aug 2 16:46:12 2015 +++ src/sys/arch/arm/broadcom/bcm2835_dmac.c Sun Aug 9 13:06:44 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_dmac.c,v 1.12 2015/08/02 16:46:12 jmcneill Exp $ */ +/* $NetBSD: bcm2835_dmac.c,v 1.13 2015/08/09 13:06:44 mlelstv Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include opt_ddb.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bcm2835_dmac.c,v 1.12 2015/08/02 16:46:12 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: bcm2835_dmac.c,v 1.13 2015/08/09 13:06:44 mlelstv Exp $); #include sys/param.h #include sys/bus.h @@ -53,7 +53,7 @@ struct bcm_dmac_channel { struct bcm_dmac_softc *ch_sc; void *ch_ih; uint8_t ch_index; - void (*ch_callback)(void *); + void (*ch_callback)(uint32_t, uint32_t, void *); void *ch_callbackarg; uint32_t ch_debug; }; @@ -165,23 +165,26 @@ bcm_dmac_intr(void *priv) { struct bcm_dmac_channel *ch = priv; struct bcm_dmac_softc *sc = ch-ch_sc; - uint32_t cs; + uint32_t cs, ce; cs = DMAC_READ(sc, DMAC_CS(ch-ch_index)); - if (!(cs DMAC_CS_INTMASK)) - return 0; - DMAC_WRITE(sc, DMAC_CS(ch-ch_index), cs); + cs = DMAC_CS_INT | DMAC_CS_END | DMAC_CS_ERROR; + + ce = DMAC_READ(sc, DMAC_DEBUG(ch-ch_index)); + ce = DMAC_DEBUG_READ_ERROR | DMAC_DEBUG_FIFO_ERROR + | DMAC_DEBUG_READ_LAST_NOT_SET_ERROR; + DMAC_WRITE(sc, DMAC_DEBUG(ch-ch_index), ce); if (ch-ch_callback) - ch-ch_callback(ch-ch_callbackarg); + ch-ch_callback(cs, ce, ch-ch_callbackarg); return 1; } struct bcm_dmac_channel * -bcm_dmac_alloc(enum bcm_dmac_type type, int ipl, void (*cb)(void *), -void *cbarg) +bcm_dmac_alloc(enum bcm_dmac_type type, int ipl, +void (*cb)(uint32_t, uint32_t, void *), void *cbarg) { struct bcm_dmac_softc *sc; struct bcm_dmac_channel *ch = NULL; Index: src/sys/arch/arm/broadcom/bcm2835_dmac.h diff -u src/sys/arch/arm/broadcom/bcm2835_dmac.h:1.3 src/sys/arch/arm/broadcom/bcm2835_dmac.h:1.4 --- src/sys/arch/arm/broadcom/bcm2835_dmac.h:1.3 Fri Sep 12 19:33:45 2014 +++ src/sys/arch/arm/broadcom/bcm2835_dmac.h Sun Aug 9 13:06:44 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_dmac.h,v 1.3 2014/09/12 19:33:45 jakllsch Exp $ */ +/* $NetBSD: bcm2835_dmac.h,v 1.4 2015/08/09 13:06:44 mlelstv Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill jmcne...@invisible.ca @@ -102,7 +102,7 @@ enum bcm_dmac_type { struct bcm_dmac_channel; struct bcm_dmac_channel *bcm_dmac_alloc(enum bcm_dmac_type, int, - void (*)(void *), void *); +void (*)(uint32_t, uint32_t, void *), void *); void bcm_dmac_free(struct bcm_dmac_channel *); void bcm_dmac_set_conblk_addr(struct bcm_dmac_channel *, bus_addr_t); int bcm_dmac_transfer(struct bcm_dmac_channel *); Index: src/sys/arch/arm/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.27 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.28 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.27 Sun Aug 9 13:03:10 2015 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Sun Aug 9 13:06:44 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.27 2015/08/09 13:03:10 mlelstv Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.28 2015/08/09 13:06:44 mlelstv Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bcm2835_emmc.c,v 1.27 2015/08/09 13:03:10 mlelstv Exp $); +__KERNEL_RCSID(0, $NetBSD: bcm2835_emmc.c,v 1.28 2015/08/09 13:06:44 mlelstv Exp $); #include bcmdmac.h @@ -82,7 +82,7 @@ static void bcmemmc_attach(device_t, dev static void bcmemmc_attach_i(device_t); #if NBCMDMAC 0 static int bcmemmc_xfer_data_dma(struct sdhc_softc *, struct sdmmc_command *); -static void bcmemmc_dma_done(void *); +static void bcmemmc_dma_done(uint32_t, uint32_t, void *); #endif CFATTACH_DECL_NEW(bcmemmc, sizeof(struct bcmemmc_softc), @@ -331,14 +331,19 @@ bcmemmc_xfer_data_dma(struct sdhc_softc } static void -bcmemmc_dma_done(void *arg) +bcmemmc_dma_done(uint32_t status, uint32_t error, void *arg) { struct bcmemmc_softc * const sc = arg;
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: mlelstv Date: Sun Aug 9 13:03:11 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_emmc.c Log Message: Handle error when setting DMA transfer. To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.26 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.27 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.26 Mon Aug 3 10:27:32 2015 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Sun Aug 9 13:03:10 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.26 2015/08/03 10:27:32 jmcneill Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.27 2015/08/09 13:03:10 mlelstv Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bcm2835_emmc.c,v 1.26 2015/08/03 10:27:32 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: bcm2835_emmc.c,v 1.27 2015/08/09 13:03:10 mlelstv Exp $); #include bcmdmac.h @@ -309,7 +309,10 @@ bcmemmc_xfer_data_dma(struct sdhc_softc sc-sc_state = EMMC_DMA_STATE_BUSY; bcm_dmac_set_conblk_addr(sc-sc_dmac, sc-sc_dmamap-dm_segs[0].ds_addr); - bcm_dmac_transfer(sc-sc_dmac); + error = bcm_dmac_transfer(sc-sc_dmac); + if (error) + return error; + while (sc-sc_state == EMMC_DMA_STATE_BUSY) { error = cv_timedwait(sc-sc_cv, plock, hz * 10); if (error == EWOULDBLOCK) {
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Mon Aug 3 10:27:32 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_emmc.c Log Message: DDR50 and SDR104 don't seem to be stable here, so disable them To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.26 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.25 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.26 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.25 Sun Aug 2 22:09:43 2015 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Mon Aug 3 10:27:32 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.25 2015/08/02 22:09:43 jmcneill Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.26 2015/08/03 10:27:32 jmcneill Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bcm2835_emmc.c,v 1.25 2015/08/02 22:09:43 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: bcm2835_emmc.c,v 1.26 2015/08/03 10:27:32 jmcneill Exp $); #include bcmdmac.h @@ -116,10 +116,9 @@ bcmemmc_attach(device_t parent, device_t sc-sc.sc_flags |= SDHC_FLAG_32BIT_ACCESS; sc-sc.sc_flags |= SDHC_FLAG_HOSTCAPS; sc-sc.sc_flags |= SDHC_FLAG_NO_HS_BIT; - sc-sc.sc_caps = SDHC_VOLTAGE_SUPP_3_3V | SDHC_VOLTAGE_SUPP_1_8V | - SDHC_HIGH_SPEED_SUPP | + sc-sc.sc_caps = SDHC_VOLTAGE_SUPP_3_3V | SDHC_HIGH_SPEED_SUPP | (SDHC_MAX_BLK_LEN_1024 SDHC_MAX_BLK_LEN_SHIFT); - sc-sc.sc_caps2 = SDHC_SDR50_SUPP | SDHC_SDR104_SUPP | SDHC_DDR50_SUPP; + sc-sc.sc_caps2 = SDHC_SDR50_SUPP; sc-sc.sc_host = sc-sc_hosts; sc-sc.sc_clkbase = 5; /* Default to 50MHz */
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sun Aug 2 16:46:12 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_dmac.c Log Message: When halting a channel, abort the current DMA CB and reset the channel before stopping DMA. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/broadcom/bcm2835_dmac.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/broadcom/bcm2835_dmac.c diff -u src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.11 src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.12 --- src/sys/arch/arm/broadcom/bcm2835_dmac.c:1.11 Wed Jul 29 14:22:49 2015 +++ src/sys/arch/arm/broadcom/bcm2835_dmac.c Sun Aug 2 16:46:12 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_dmac.c,v 1.11 2015/07/29 14:22:49 skrll Exp $ */ +/* $NetBSD: bcm2835_dmac.c,v 1.12 2015/08/02 16:46:12 jmcneill Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill jmcne...@invisible.ca @@ -29,7 +29,7 @@ #include opt_ddb.h #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bcm2835_dmac.c,v 1.11 2015/07/29 14:22:49 skrll Exp $); +__KERNEL_RCSID(0, $NetBSD: bcm2835_dmac.c,v 1.12 2015/08/02 16:46:12 jmcneill Exp $); #include sys/param.h #include sys/bus.h @@ -275,6 +275,9 @@ bcm_dmac_transfer(struct bcm_dmac_channe void bcm_dmac_halt(struct bcm_dmac_channel *ch) { + struct bcm_dmac_softc *sc = ch-ch_sc; + + DMAC_WRITE(sc, DMAC_CS(ch-ch_index), DMAC_CS_RESET|DMAC_CS_ABORT); bcm_dmac_set_conblk_addr(ch, 0); }
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: jmcneill Date: Sun Aug 2 22:09:43 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_emmc.c Log Message: enable UHS support To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/broadcom/bcm2835_emmc.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/broadcom/bcm2835_emmc.c diff -u src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.24 src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.25 --- src/sys/arch/arm/broadcom/bcm2835_emmc.c:1.24 Fri Jul 31 15:00:07 2015 +++ src/sys/arch/arm/broadcom/bcm2835_emmc.c Sun Aug 2 22:09:43 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_emmc.c,v 1.24 2015/07/31 15:00:07 jmcneill Exp $ */ +/* $NetBSD: bcm2835_emmc.c,v 1.25 2015/08/02 22:09:43 jmcneill Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bcm2835_emmc.c,v 1.24 2015/07/31 15:00:07 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: bcm2835_emmc.c,v 1.25 2015/08/02 22:09:43 jmcneill Exp $); #include bcmdmac.h @@ -116,8 +116,10 @@ bcmemmc_attach(device_t parent, device_t sc-sc.sc_flags |= SDHC_FLAG_32BIT_ACCESS; sc-sc.sc_flags |= SDHC_FLAG_HOSTCAPS; sc-sc.sc_flags |= SDHC_FLAG_NO_HS_BIT; - sc-sc.sc_caps = SDHC_VOLTAGE_SUPP_3_3V | SDHC_HIGH_SPEED_SUPP | + sc-sc.sc_caps = SDHC_VOLTAGE_SUPP_3_3V | SDHC_VOLTAGE_SUPP_1_8V | + SDHC_HIGH_SPEED_SUPP | (SDHC_MAX_BLK_LEN_1024 SDHC_MAX_BLK_LEN_SHIFT); + sc-sc.sc_caps2 = SDHC_SDR50_SUPP | SDHC_SDR104_SUPP | SDHC_DDR50_SUPP; sc-sc.sc_host = sc-sc_hosts; sc-sc.sc_clkbase = 5; /* Default to 50MHz */
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Sat Aug 1 14:18:00 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c Log Message: Call the correct ipi handlers for IPI_AST and IPI_KPREEMPT To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/broadcom/bcm2835_intr.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/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.10 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.11 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.10 Sat Jul 25 08:43:41 2015 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Sat Aug 1 14:18:00 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.10 2015/07/25 08:43:41 skrll Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.11 2015/08/01 14:18:00 skrll Exp $ */ /*- * Copyright (c) 2012, 2015 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bcm2835_intr.c,v 1.10 2015/07/25 08:43:41 skrll Exp $); +__KERNEL_RCSID(0, $NetBSD: bcm2835_intr.c,v 1.11 2015/08/01 14:18:00 skrll Exp $); #define _INTR_PRIVATE @@ -492,12 +492,16 @@ bcm2836mp_ipi_handler(void *priv) const u_int ipi = bit - 1; switch (ipi) { case IPI_AST: + pic_ipi_ast(priv); + break; case IPI_NOP: + pic_ipi_nop(priv); + break; #ifdef __HAVE_PREEMPTION case IPI_KPREEMPT: -#endif - pic_ipi_nop(priv); + pic_ipi_kpreempt(priv); break; +#endif case IPI_XCALL: pic_ipi_xcall(priv); break;
CVS commit: src/sys/arch/arm/broadcom
Module Name:src Committed By: skrll Date: Tue Jul 28 21:24:43 UTC 2015 Modified Files: src/sys/arch/arm/broadcom: bcm2835_vcaudio.c Log Message: Reduce latency a bit. From nat@ To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/broadcom/bcm2835_vcaudio.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/broadcom/bcm2835_vcaudio.c diff -u src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.9 src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.10 --- src/sys/arch/arm/broadcom/bcm2835_vcaudio.c:1.9 Sun Mar 15 18:31:29 2015 +++ src/sys/arch/arm/broadcom/bcm2835_vcaudio.c Tue Jul 28 21:24:43 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_vcaudio.c,v 1.9 2015/03/15 18:31:29 jmcneill Exp $ */ +/* $NetBSD: bcm2835_vcaudio.c,v 1.10 2015/07/28 21:24:43 skrll Exp $ */ /*- * Copyright (c) 2013 Jared D. McNeill jmcne...@invisible.ca @@ -31,7 +31,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bcm2835_vcaudio.c,v 1.9 2015/03/15 18:31:29 jmcneill Exp $); +__KERNEL_RCSID(0, $NetBSD: bcm2835_vcaudio.c,v 1.10 2015/07/28 21:24:43 skrll Exp $); #include sys/param.h #include sys/types.h @@ -81,20 +81,22 @@ enum vcaudio_dest { VCAUDIO_DEST_HDMI = 2, }; - /* - * Standard message size is 4000 bytes and VCHIQ can accept 16 messages. + * Maximum message size is 4000 bytes and VCHIQ can accept 16 messages. * * 4000 bytes of 16bit 48kHz stereo is approximately 21ms. * * We get complete messages at ~10ms intervals. * - * Setting blocksize to 2 x 4000 means that we send approx 42ms of audio. We - * prefill by two blocks before starting audio meaning we have 83ms of latency. + * Setting blocksize to 4 x 1600 means that we send approx 33ms of audio. We + * prefill by two blocks before starting audio meaning we have 50ms of latency. + * + * Six messages of 1600 bytes was chosen working back from a desired latency of + * 50ms. */ -#define VCAUDIO_MSGSIZE 4000 -#define VCAUDIO_NUMMSGS 2 +#define VCAUDIO_MSGSIZE 1600 +#define VCAUDIO_NUMMSGS 4 #define VCAUDIO_BLOCKSIZE (VCAUDIO_MSGSIZE * VCAUDIO_NUMMSGS) #define VCAUDIO_BUFFERSIZE 128000 #define VCAUDIO_PREFILLCOUNT 2