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