svn commit: r269658 - in projects/arm64/sys: arm64/arm64 arm64/conf conf dev/uart

Andrew Turner andrew at FreeBSD.org
Thu Aug 7 07:41:58 UTC 2014


Author: andrew
Date: Thu Aug  7 07:41:56 2014
New Revision: 269658
URL: http://svnweb.freebsd.org/changeset/base/269658

Log:
  Add support for the pl011 uart on the foundation model

Modified:
  projects/arm64/sys/arm64/arm64/bus_machdep.c
  projects/arm64/sys/arm64/arm64/trap.c
  projects/arm64/sys/arm64/conf/GENERIC
  projects/arm64/sys/conf/files.arm64
  projects/arm64/sys/dev/uart/uart_bus_fdt.c
  projects/arm64/sys/dev/uart/uart_cpu_fdt.c

Modified: projects/arm64/sys/arm64/arm64/bus_machdep.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/bus_machdep.c	Thu Aug  7 07:41:51 2014	(r269657)
+++ projects/arm64/sys/arm64/arm64/bus_machdep.c	Thu Aug  7 07:41:56 2014	(r269658)
@@ -25,6 +25,8 @@
  *
  */
 
+#include "opt_platform.h"
+
 #include <sys/param.h>
 __FBSDID("$FreeBSD$");
 
@@ -163,3 +165,7 @@ struct bus_space memmap_bus = {
 	.bs_wr_4_s = NULL,
 	.bs_wr_8_s = NULL,
 };
+
+#ifdef FDT
+bus_space_tag_t fdtbus_bs_tag = &memmap_bus;
+#endif

Modified: projects/arm64/sys/arm64/arm64/trap.c
==============================================================================
--- projects/arm64/sys/arm64/arm64/trap.c	Thu Aug  7 07:41:51 2014	(r269657)
+++ projects/arm64/sys/arm64/arm64/trap.c	Thu Aug  7 07:41:56 2014	(r269658)
@@ -46,6 +46,7 @@ void do_el1h_sync(struct trapframe *fram
 {
 	uint32_t exception;
 	uint64_t esr;
+	u_int reg;
 
 	/* Read the esr register to get the exception details */
 	__asm __volatile("mrs %x0, esr_el1" : "=&r"(esr));
@@ -55,7 +56,14 @@ void do_el1h_sync(struct trapframe *fram
 	exception = (esr >> 26) & 0x3f;
 
 	printf("In do_el1h_sync %llx %llx %x\n", frame->tf_elr, esr, exception);
+
+	for (reg = 0; reg < 31; reg++) {
+		printf("x%d: %llx\n", reg, frame->tf_x[reg]);
+	}
 	switch(exception) {
+	case 0x25:
+		panic("Data abort at %#llx", frame->tf_elr);
+		break;
 	case 0x3c:
 		printf("Breakpoint %u\n", (uint32_t)(esr & 0xffffff));
 		break;

Modified: projects/arm64/sys/arm64/conf/GENERIC
==============================================================================
--- projects/arm64/sys/arm64/conf/GENERIC	Thu Aug  7 07:41:51 2014	(r269657)
+++ projects/arm64/sys/arm64/conf/GENERIC	Thu Aug  7 07:41:56 2014	(r269658)
@@ -82,7 +82,8 @@ options 	MALLOC_DEBUG_MAXZONES=8	# Separ
 options 	EARLY_PRINTF
 
 # Serial (COM) ports
-#device		uart		# Generic UART driver
+device		uart		# Generic UART driver
+device		pl011
 
 # Pseudo devices.
 device		loop		# Network loopback

Modified: projects/arm64/sys/conf/files.arm64
==============================================================================
--- projects/arm64/sys/conf/files.arm64	Thu Aug  7 07:41:51 2014	(r269657)
+++ projects/arm64/sys/conf/files.arm64	Thu Aug  7 07:41:56 2014	(r269658)
@@ -29,6 +29,9 @@ arm64/arm64/trap.c		standard
 arm64/arm64/uio_machdep.c	standard
 arm64/arm64/vm_machdep.c	standard
 dev/fdt/fdt_arm64.c		optional	fdt
+dev/uart/uart_bus_fdt.c		optional	uart fdt
+dev/uart/uart_cpu_fdt.c		optional	uart fdt
+dev/uart/uart_dev_pl011.c	optional	uart pl011
 kern/kern_clocksource.c		standard
 kern/subr_dummy_vdso_tc.c	standard
 libkern/bcmp.c			standard

Modified: projects/arm64/sys/dev/uart/uart_bus_fdt.c
==============================================================================
--- projects/arm64/sys/dev/uart/uart_bus_fdt.c	Thu Aug  7 07:41:51 2014	(r269657)
+++ projects/arm64/sys/dev/uart/uart_bus_fdt.c	Thu Aug  7 07:41:56 2014	(r269658)
@@ -120,9 +120,11 @@ uart_fdt_get_shift(phandle_t node, pcell
 {
 	pcell_t shift;
 
+	/* TODO: Not all uart bindings need reg-shift */
 	if ((OF_getprop(node, "reg-shift", &shift, sizeof(shift))) <= 0)
-		shift = 0;
-	*cell = fdt32_to_cpu(shift);
+		*cell = 2;
+	else
+		*cell = fdt32_to_cpu(shift);
 	return (0);
 }
 

Modified: projects/arm64/sys/dev/uart/uart_cpu_fdt.c
==============================================================================
--- projects/arm64/sys/dev/uart/uart_cpu_fdt.c	Thu Aug  7 07:41:51 2014	(r269657)
+++ projects/arm64/sys/dev/uart/uart_cpu_fdt.c	Thu Aug  7 07:41:56 2014	(r269658)
@@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$");
 #include <vm/pmap.h>
 
 #include <machine/bus.h>
-#include <machine/fdt.h>
+//#include <machine/fdt.h>
 
 #include <dev/fdt/fdt_common.h>
 #include <dev/ofw/ofw_bus.h>
@@ -51,6 +51,8 @@ __FBSDID("$FreeBSD$");
 #include <dev/uart/uart_bus.h>
 #include <dev/uart/uart_cpu.h>
 
+extern bus_space_tag_t fdtbus_bs_tag;
+
 /*
  * UART console routines.
  */
@@ -83,9 +85,11 @@ uart_fdt_get_shift(phandle_t node, pcell
 {
 	pcell_t shift;
 
+	/* TODO: Not all uart bindings need reg-shift */
 	if ((OF_getprop(node, "reg-shift", &shift, sizeof(shift))) <= 0)
-		shift = 0;
-	*cell = fdt32_to_cpu(shift);
+		*cell = 2;
+	else
+		*cell = fdt32_to_cpu(shift);
 	return (0);
 }
 
@@ -195,6 +199,8 @@ uart_cpu_getdev(int devtype, struct uart
 	if (err)
 		pbase = 0;
 
+	/* TODO: fdt_get_range to work with the Foundation Models dts */
+	pbase = 0x1c000000;
 	start += pbase;
 
 	return (bus_space_map(di->bas.bst, start, size, 0, &di->bas.bsh));


More information about the svn-src-projects mailing list