Module Name: src
Committed By: jmcneill
Date: Sun Jul 30 23:48:32 UTC 2017
Modified Files:
src/sys/arch/arm/broadcom: bcm2835_obio.c bcm2835reg.h files.bcm2835
src/sys/arch/evbarm/conf: RPI
src/sys/arch/evbarm/rpi: rpi_machdep.c
Added Files:
src/sys/arch/arm/broadcom: bcm2835_com.c
Log Message:
Add support for BCM2835 AUX UART.
To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/broadcom/bcm2835_com.c
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/broadcom/bcm2835_obio.c \
src/sys/arch/arm/broadcom/files.bcm2835
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/broadcom/bcm2835reg.h
cvs rdiff -u -r1.73 -r1.74 src/sys/arch/evbarm/conf/RPI
cvs rdiff -u -r1.74 -r1.75 src/sys/arch/evbarm/rpi/rpi_machdep.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_obio.c
diff -u src/sys/arch/arm/broadcom/bcm2835_obio.c:1.27 src/sys/arch/arm/broadcom/bcm2835_obio.c:1.28
--- src/sys/arch/arm/broadcom/bcm2835_obio.c:1.27 Sun Jul 30 16:54:36 2017
+++ src/sys/arch/arm/broadcom/bcm2835_obio.c Sun Jul 30 23:48:32 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm2835_obio.c,v 1.27 2017/07/30 16:54:36 jmcneill Exp $ */
+/* $NetBSD: bcm2835_obio.c,v 1.28 2017/07/30 23:48:32 jmcneill Exp $ */
/*-
* Copyright (c) 2012, 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bcm2835_obio.c,v 1.27 2017/07/30 16:54:36 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_obio.c,v 1.28 2017/07/30 23:48:32 jmcneill Exp $");
#include "locators.h"
#include "obio.h"
@@ -141,6 +141,13 @@ static const struct ambadev_locators bcm
.ad_intr = BCM2835_INT_UART0,
},
{
+ /* AUX UART */
+ .ad_name = "com",
+ .ad_addr = BCM2835_AUX_UART_BASE,
+ .ad_size = BCM2835_AUX_UART_SIZE,
+ .ad_intr = BCM2835_INT_AUX,
+ },
+ {
/* Framebuffer */
.ad_name = "fb",
.ad_addr = 0,
Index: src/sys/arch/arm/broadcom/files.bcm2835
diff -u src/sys/arch/arm/broadcom/files.bcm2835:1.27 src/sys/arch/arm/broadcom/files.bcm2835:1.28
--- src/sys/arch/arm/broadcom/files.bcm2835:1.27 Sun Jul 30 16:54:36 2017
+++ src/sys/arch/arm/broadcom/files.bcm2835 Sun Jul 30 23:48:32 2017
@@ -1,4 +1,4 @@
-# $NetBSD: files.bcm2835,v 1.27 2017/07/30 16:54:36 jmcneill Exp $
+# $NetBSD: files.bcm2835,v 1.28 2017/07/30 23:48:32 jmcneill Exp $
#
# Configuration info for Broadcom BCM2835 ARM Peripherals
#
@@ -57,6 +57,10 @@ file arch/arm/broadcom/bcm2835_rng.c bc
attach plcom at obio with bcmplcom
file arch/arm/broadcom/bcm2835_plcom.c bcmplcom
+# AUX UART (BCM2835_AUX_UART_BASE)
+attach com at obio with bcmcom
+file arch/arm/broadcom/bcm2835_com.c bcmcom
+
# External Mass Media Controller (BCM2835_EMMC_BASE)
attach sdhc at obio with bcmemmc
file arch/arm/broadcom/bcm2835_emmc.c bcmemmc
Index: src/sys/arch/arm/broadcom/bcm2835reg.h
diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.19 src/sys/arch/arm/broadcom/bcm2835reg.h:1.20
--- src/sys/arch/arm/broadcom/bcm2835reg.h:1.19 Sun Jul 30 16:54:36 2017
+++ src/sys/arch/arm/broadcom/bcm2835reg.h Sun Jul 30 23:48:32 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: bcm2835reg.h,v 1.19 2017/07/30 16:54:36 jmcneill Exp $ */
+/* $NetBSD: bcm2835reg.h,v 1.20 2017/07/30 23:48:32 jmcneill Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -68,6 +68,7 @@
#define BCM2835_PWM_BASE (BCM2835_PERIPHERALS_BASE_BUS + 0x0020C000)
#define BCM2835_BSCSPISLV_BASE (BCM2835_PERIPHERALS_BASE_BUS + 0x00214000)
#define BCM2835_AUX_BASE (BCM2835_PERIPHERALS_BASE_BUS + 0x00215000)
+#define BCM2835_AUX_UART_BASE (BCM2835_PERIPHERALS_BASE_BUS + 0x00215040)
#define BCM2835_EMMC_BASE (BCM2835_PERIPHERALS_BASE_BUS + 0x00300000)
#define BCM2835_BSC1_BASE (BCM2835_PERIPHERALS_BASE_BUS + 0x00804000)
#define BCM2835_BSC2_BASE (BCM2835_PERIPHERALS_BASE_BUS + 0x00805000)
@@ -86,7 +87,8 @@
#define BCM2835_SPI0_SIZE 0x1000
#define BCM2835_BSC_SIZE 0x1000
#define BCM2835_PWM_SIZE 0x28
-#define BCM2835_AUX_SIZE 0x1000
+#define BCM2835_AUX_SIZE 0x8
+#define BCM2835_AUX_UART_SIZE 0x40
#define BCM2835_SDHOST_SIZE 0x1000
#define BCM2835_EMMC_SIZE 0x1000
#define BCM2835_USB_SIZE 0x20000
Index: src/sys/arch/evbarm/conf/RPI
diff -u src/sys/arch/evbarm/conf/RPI:1.73 src/sys/arch/evbarm/conf/RPI:1.74
--- src/sys/arch/evbarm/conf/RPI:1.73 Sun Jul 30 17:01:27 2017
+++ src/sys/arch/evbarm/conf/RPI Sun Jul 30 23:48:32 2017
@@ -1,5 +1,5 @@
#
-# $NetBSD: RPI,v 1.73 2017/07/30 17:01:27 jmcneill Exp $
+# $NetBSD: RPI,v 1.74 2017/07/30 23:48:32 jmcneill Exp $
#
# RPi -- Raspberry Pi
#
@@ -73,6 +73,9 @@ spkr* at audio? # PC speaker (synthesi
# PL011 uart
plcom0 at obio?
+# AUX UART
+com0 at obio?
+
# Framebuffer console
genfb0 at obio?
wsdisplay* at genfb?
Index: src/sys/arch/evbarm/rpi/rpi_machdep.c
diff -u src/sys/arch/evbarm/rpi/rpi_machdep.c:1.74 src/sys/arch/evbarm/rpi/rpi_machdep.c:1.75
--- src/sys/arch/evbarm/rpi/rpi_machdep.c:1.74 Sun Jul 30 17:32:59 2017
+++ src/sys/arch/evbarm/rpi/rpi_machdep.c Sun Jul 30 23:48:32 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: rpi_machdep.c,v 1.74 2017/07/30 17:32:59 jmcneill Exp $ */
+/* $NetBSD: rpi_machdep.c,v 1.75 2017/07/30 23:48:32 jmcneill Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.74 2017/07/30 17:32:59 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.75 2017/07/30 23:48:32 jmcneill Exp $");
#include "opt_arm_debug.h"
#include "opt_bcm283x.h"
@@ -1206,6 +1206,12 @@ rpi_device_register(device_t dev, void *
prop_dictionary_set_uint32(dict,
"frequency", vb_uart.vbt_uartclockrate.rate);
}
+ if (device_is_a(dev, "com") &&
+ vcprop_tag_success_p(&vb.vbt_coreclockrate.tag) &&
+ vb.vbt_coreclockrate.rate > 0) {
+ prop_dictionary_set_uint32(dict,
+ "frequency", vb.vbt_coreclockrate.rate);
+ }
if (device_is_a(dev, "bcmdmac") &&
vcprop_tag_success_p(&vb.vbt_dmachan.tag)) {
prop_dictionary_set_uint32(dict,
Added files:
Index: src/sys/arch/arm/broadcom/bcm2835_com.c
diff -u /dev/null src/sys/arch/arm/broadcom/bcm2835_com.c:1.1
--- /dev/null Sun Jul 30 23:48:32 2017
+++ src/sys/arch/arm/broadcom/bcm2835_com.c Sun Jul 30 23:48:32 2017
@@ -0,0 +1,97 @@
+/* $NetBSD: bcm2835_com.c,v 1.1 2017/07/30 23:48:32 jmcneill Exp $ */
+
+/*-
+ * Copyright (c) 2017 Jared McNeill <[email protected]>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: bcm2835_com.c,v 1.1 2017/07/30 23:48:32 jmcneill Exp $");
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/device.h>
+#include <sys/intr.h>
+#include <sys/systm.h>
+#include <sys/termios.h>
+
+#include <arm/broadcom/bcm_amba.h>
+#include <arm/broadcom/bcm2835reg.h>
+#include <arm/broadcom/bcm2835var.h>
+#include <arm/broadcom/bcm2835_intr.h>
+
+#include <dev/ic/comvar.h>
+
+static int bcm_com_match(device_t, cfdata_t, void *);
+static void bcm_com_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(bcmcom, sizeof(struct com_softc),
+ bcm_com_match, bcm_com_attach, NULL, NULL);
+
+static int
+bcm_com_match(device_t parent, cfdata_t cf, void *aux)
+{
+ struct amba_attach_args *aaa = aux;
+
+ return strcmp(aaa->aaa_name, "com") == 0;
+}
+
+static void
+bcm_com_attach(device_t parent, device_t self, void *aux)
+{
+ struct com_softc * const sc = device_private(self);
+ struct amba_attach_args * const aaa = aux;
+ const prop_dictionary_t dict = device_properties(self);
+ bus_space_tag_t bst = &bcm2835_a4x_bs_tag;
+ bus_space_handle_t bsh;
+ void *ih;
+
+ sc->sc_dev = self;
+ sc->sc_type = COM_TYPE_NORMAL;
+
+ prop_dictionary_get_uint32(dict, "frequency", &sc->sc_frequency);
+ if (sc->sc_frequency == 0) {
+ aprint_error(": couldn't get frequency\n");
+ return;
+ }
+ sc->sc_frequency *= 2;
+
+ if (bus_space_map(bst, aaa->aaa_addr, aaa->aaa_size, 0, &bsh) != 0) {
+ aprint_error(": can't map device\n");
+ return;
+ }
+
+ COM_INIT_REGS(sc->sc_regs, bst, bsh, aaa->aaa_addr);
+
+ com_attach_subr(sc);
+ aprint_naive("\n");
+
+ ih = intr_establish(aaa->aaa_intr, IPL_SERIAL, IST_LEVEL, comintr, sc);
+ if (ih == NULL) {
+ aprint_error_dev(self, "failed to establish interrupt %d\n",
+ aaa->aaa_intr);
+ return;
+ }
+ aprint_normal_dev(self, "interrupting on intr %d\n", aaa->aaa_intr);
+}