CVS commit: [netbsd-8] src/sys/arch/evbarm/rpi

2018-04-08 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Sun Apr  8 06:12:53 UTC 2018

Modified Files:
src/sys/arch/evbarm/rpi [netbsd-8]: rpi_machdep.c

Log Message:
Pull up following revision(s) (requested by mlelstv in ticket #704):
sys/arch/evbarm/rpi/rpi_machdep.c: 1.81
Firmware after May 8, 2017 places APs in WFE state at boot. Add a "sev"
after writing the start vector, otherwise secondary CPUs will not boot.


To generate a diff of this commit:
cvs rdiff -u -r1.70.8.2 -r1.70.8.3 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/evbarm/rpi/rpi_machdep.c
diff -u src/sys/arch/evbarm/rpi/rpi_machdep.c:1.70.8.2 src/sys/arch/evbarm/rpi/rpi_machdep.c:1.70.8.3
--- src/sys/arch/evbarm/rpi/rpi_machdep.c:1.70.8.2	Wed Jun 21 17:50:08 2017
+++ src/sys/arch/evbarm/rpi/rpi_machdep.c	Sun Apr  8 06:12:53 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: rpi_machdep.c,v 1.70.8.2 2017/06/21 17:50:08 snj Exp $	*/
+/*	$NetBSD: rpi_machdep.c,v 1.70.8.3 2018/04/08 06:12:53 snj Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.70.8.2 2017/06/21 17:50:08 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.70.8.3 2018/04/08 06:12:53 snj Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_bcm283x.h"
@@ -578,6 +578,9 @@ rpi_bootstrap(void)
 		}
 	}
 
+	/* Wake up APs in case firmware has placed them in WFE state */
+	__asm __volatile("sev");
+
 	for (int loop = 0; loop < 16; loop++) {
 		if (arm_cpu_hatched == __BITS(arm_cpu_max - 1, 1))
 			break;



CVS commit: [netbsd-8] src/sys/arch/evbarm/rpi

2017-06-21 Thread Soren Jacobsen
Module Name:src
Committed By:   snj
Date:   Wed Jun 21 17:50:08 UTC 2017

Modified Files:
src/sys/arch/evbarm/rpi [netbsd-8]: rpi_machdep.c

Log Message:
Pull up following revision(s) (requested by jmcneill in ticket #46):
sys/arch/evbarm/rpi/rpi_machdep.c: revision 1.72
Enable UART0 (PL011) on GPIO header for Raspberry Pi 3 / Zero W


To generate a diff of this commit:
cvs rdiff -u -r1.70.8.1 -r1.70.8.2 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/evbarm/rpi/rpi_machdep.c
diff -u src/sys/arch/evbarm/rpi/rpi_machdep.c:1.70.8.1 src/sys/arch/evbarm/rpi/rpi_machdep.c:1.70.8.2
--- src/sys/arch/evbarm/rpi/rpi_machdep.c:1.70.8.1	Wed Jun 21 17:43:33 2017
+++ src/sys/arch/evbarm/rpi/rpi_machdep.c	Wed Jun 21 17:50:08 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: rpi_machdep.c,v 1.70.8.1 2017/06/21 17:43:33 snj Exp $	*/
+/*	$NetBSD: rpi_machdep.c,v 1.70.8.2 2017/06/21 17:50:08 snj Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.70.8.1 2017/06/21 17:43:33 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rpi_machdep.c,v 1.70.8.2 2017/06/21 17:50:08 snj Exp $");
 
 #include "opt_arm_debug.h"
 #include "opt_bcm283x.h"
@@ -74,6 +74,7 @@ __KERNEL_RCSID(0, "$NetBSD: rpi_machdep.
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include 
@@ -180,6 +181,7 @@ static struct plcom_instance rpi_pi = {
 static struct __aligned(16) {
 	struct vcprop_buffer_hdr	vb_hdr;
 	struct vcprop_tag_clockrate	vbt_uartclockrate;
+	struct vcprop_tag_boardrev	vbt_boardrev;
 	struct vcprop_tag end;
 } vb_uart = {
 	.vb_hdr = {
@@ -194,6 +196,13 @@ static struct __aligned(16) {
 		},
 		.id = VCPROP_CLK_UART
 	},
+	.vbt_boardrev = {
+		.tag = {
+			.vpt_tag = VCPROPTAG_GET_BOARDREVISION,
+			.vpt_len = VCPROPTAG_LEN(vb_uart.vbt_boardrev),
+			.vpt_rcode = VCPROPTAG_REQUEST
+		},
+	},
 	.end = {
 		.vpt_tag = VCPROPTAG_NULL
 	}
@@ -426,7 +435,20 @@ rpi_uartinit(void)
 
 	bcm2835_mbox_read(iot, ioh, BCMMBOX_CHANARM2VC, );
 
-	cpu_dcache_inv_range((vaddr_t), sizeof(vb));
+	cpu_dcache_inv_range((vaddr_t)_uart, sizeof(vb_uart));
+
+	if (vcprop_tag_success_p(_uart.vbt_boardrev.tag) &&
+	(vb_uart.vbt_boardrev.rev & VCPROP_REV_ENCFLAG) != 0) {
+		const uint32_t rev = vb_uart.vbt_boardrev.rev;
+		switch (__SHIFTOUT(rev, VCPROP_REV_MODEL)) {
+		case RPI_MODEL_B_PI3:
+		case RPI_MODEL_ZERO_W:
+			/* Enable UART0 (PL011) on GPIO header */
+			bcm2835gpio_function_select(14, BCM2835_GPIO_ALT0);
+			bcm2835gpio_function_select(15, BCM2835_GPIO_ALT0);
+			break;
+		}
+	}
 
 	if (vcprop_tag_success_p(_uart.vbt_uartclockrate.tag))
 		uart_clk = vb_uart.vbt_uartclockrate.rate;