From owner-svn-src-projects@FreeBSD.ORG Thu Aug 7 07:41:58 2014 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 6E8D1B7E for ; Thu, 7 Aug 2014 07:41:58 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4FE1F2FB3 for ; Thu, 7 Aug 2014 07:41:58 +0000 (UTC) Received: from andrew (uid 1231) (envelope-from andrew@FreeBSD.org) id 5f6a by svn.freebsd.org (DragonFly Mail Agent v0.9+); Thu, 07 Aug 2014 07:41:57 +0000 From: Andrew Turner Date: Thu, 7 Aug 2014 07:41:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r269658 - in projects/arm64/sys: arm64/arm64 arm64/conf conf dev/uart X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Message-Id: <53e32dc6.5f6a.6b2a0642@svn.freebsd.org> X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Aug 2014 07:41:58 -0000 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 __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 #include -#include +//#include #include #include @@ -51,6 +51,8 @@ __FBSDID("$FreeBSD$"); #include #include +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));