Module Name: src Committed By: marty Date: Mon Dec 14 22:06:57 UTC 2015
Modified Files: src/sys/arch/arm/samsung: files.exynos src/sys/arch/evbarm/conf: ODROID-XU4 files.exynos src/sys/arch/evbarm/exynos: exynos_machdep.c Log Message: XU4 FDT Enable the minimum device tree This enables the use of FDT on the XU4 but doesn't add any drivers. However, with this check in, XU4 becomes useless without a device tree blob from the Linux tree, which isn't checked in anywhere. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/samsung/files.exynos cvs rdiff -u -r1.4 -r1.5 src/sys/arch/evbarm/conf/ODROID-XU4 cvs rdiff -u -r1.1 -r1.2 src/sys/arch/evbarm/conf/files.exynos cvs rdiff -u -r1.3 -r1.4 src/sys/arch/evbarm/exynos/exynos_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/samsung/files.exynos diff -u src/sys/arch/arm/samsung/files.exynos:1.10 src/sys/arch/arm/samsung/files.exynos:1.11 --- src/sys/arch/arm/samsung/files.exynos:1.10 Sat Dec 12 21:56:54 2015 +++ src/sys/arch/arm/samsung/files.exynos Mon Dec 14 22:06:57 2015 @@ -1,4 +1,4 @@ -# $NetBSD: files.exynos,v 1.10 2015/12/12 21:56:54 marty Exp $ +# $NetBSD: files.exynos,v 1.11 2015/12/14 22:06:57 marty Exp $ # # Configuration info for Samsung Exynos SoC ARM Peripherals # @@ -44,6 +44,11 @@ defflag opt_exynos.h EXYNOS5420: EXYN defflag opt_exynos.h EXYNOS5440: EXYNOS5 defflag opt_exynos.h EXYNOS5422: EXYNOS5 +# On-board I/O +device exynosfdt : bus_space_generic, fdtbus +attach exynosfdt at mainbus with exynos_fdt +file arch/arm/samsung/exynos_fdt.c exynos_fdt + # SoC I/O attach point device exyo { [port=-1], [intr=-1] } : bus_space_generic attach exyo at mainbus with exyo_io Index: src/sys/arch/evbarm/conf/ODROID-XU4 diff -u src/sys/arch/evbarm/conf/ODROID-XU4:1.4 src/sys/arch/evbarm/conf/ODROID-XU4:1.5 --- src/sys/arch/evbarm/conf/ODROID-XU4:1.4 Mon Dec 14 00:00:22 2015 +++ src/sys/arch/evbarm/conf/ODROID-XU4 Mon Dec 14 22:06:57 2015 @@ -1,5 +1,5 @@ # -# $NetBSD: ODROID-XU4,v 1.4 2015/12/14 00:00:22 marty Exp $ +# $NetBSD: ODROID-XU4,v 1.5 2015/12/14 22:06:57 marty Exp $ # # ODROID-XU -- ODROID-XU4 Exynos5422 based kernel # @@ -33,6 +33,11 @@ options CPU_CORTEXA15 options EXYNOS5422 #options MULTIPROCESSOR +options FDT # not really but soon +pseudo-device openfirm # jmcneill: oops, fdtbus should depend on + # openfirm. don't let me forget. + + options PMAPCOUNTERS options BUSDMA_COUNTERS options EXYNOS_CONSOLE_EARLY @@ -196,6 +201,14 @@ armperiph0 at mainbus? armgic0 at armperiph? # Interrupt Controller armgtmr0 at armperiph? # Generic Timer +# On-board I/O +exynosfdt0 at mainbus? +fdt0 at exynosfdt0 +simplebus* at fdt? +fdt* at simplebus? + +fregulator* at fdt? + # Exynos SoC exyo0 at mainbus? Index: src/sys/arch/evbarm/conf/files.exynos diff -u src/sys/arch/evbarm/conf/files.exynos:1.1 src/sys/arch/evbarm/conf/files.exynos:1.2 --- src/sys/arch/evbarm/conf/files.exynos:1.1 Sun Dec 6 00:31:24 2015 +++ src/sys/arch/evbarm/conf/files.exynos Mon Dec 14 22:06:57 2015 @@ -1,4 +1,4 @@ -# $NetBSD: files.exynos,v 1.1 2015/12/06 00:31:24 marty Exp $ +# $NetBSD: files.exynos,v 1.2 2015/12/14 22:06:57 marty Exp $ # # EXYNOS 5422 board configuration info # @@ -8,5 +8,11 @@ file arch/evbarm/exynos/exynos_machdep.c # Kernel boot arguments defparam opt_machdep.h BOOT_ARGS +# FDT + +include "dev/ofw/files.ofw" +include "dev/fdt/files.fdt" +include "arch/arm/fdt/files.fdt" + # Pull in Exynos SoC default include "arch/arm/samsung/files.exynos" Index: src/sys/arch/evbarm/exynos/exynos_machdep.c diff -u src/sys/arch/evbarm/exynos/exynos_machdep.c:1.3 src/sys/arch/evbarm/exynos/exynos_machdep.c:1.4 --- src/sys/arch/evbarm/exynos/exynos_machdep.c:1.3 Sun Dec 13 22:28:09 2015 +++ src/sys/arch/evbarm/exynos/exynos_machdep.c Mon Dec 14 22:06:57 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: exynos_machdep.c,v 1.3 2015/12/13 22:28:09 marty Exp $ */ +/* $NetBSD: exynos_machdep.c,v 1.4 2015/12/14 22:06:57 marty Exp $ */ /* * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: exynos_machdep.c,v 1.3 2015/12/13 22:28:09 marty Exp $"); +__KERNEL_RCSID(0, "$NetBSD: exynos_machdep.c,v 1.4 2015/12/14 22:06:57 marty Exp $"); #include "opt_evbarm_boardtype.h" #include "opt_exynos.h" @@ -101,6 +101,16 @@ __KERNEL_RCSID(0, "$NetBSD: exynos_machd #include <arm/samsung/sscom_var.h> #include <arm/samsung/sscom_reg.h> +/* so we can load the device tree. NOTE: This requires the kernel to be + * made into a linux (not netbsd) uboot image. + */ +#include <libfdt.h> +#include <dev/fdt/fdt_openfirm.h> +#include <dev/ofw/openfirm.h> +#include <dev/fdt/fdtvar.h> +#define FDT_BUF_SIZE (128*1024) +static uint8_t fdt_data[FDT_BUF_SIZE]; + extern const int num_exynos_uarts_entries; extern const struct sscom_uart_info exynos_uarts[]; @@ -368,6 +378,7 @@ initarm(void *arg) char mi_bootargs[] = BOOT_ARGS; parse_mi_bootargs(mi_bootargs); #endif + boot_args = bootargs; parse_mi_bootargs(boot_args); exynos_extract_mac_adress(); @@ -390,6 +401,22 @@ initarm(void *arg) const bool mapallmem_p = false; #endif + /* Load the dtb */ + const uint8_t *fdt_addr_r = (const uint8_t *)uboot_args[2]; + printf("fdt addr 0x%08x\n", (uint)fdt_addr_r); + int error = fdt_check_header(fdt_addr_r); + printf("fdt check header returns %d\n", error); + if (error == 0) { + error = fdt_move(fdt_addr_r, fdt_data, sizeof(fdt_data)); + printf("fdt move returns %d\n", error); + if (error != 0) { + panic("fdt_move failed: %s", fdt_strerror(error)); + } + fdt_openfirm_set_data(fdt_data); + } else { + panic("fdt_check_header failed: %s", fdt_strerror(error)); + } + /* Fake bootconfig structure for the benefit of pmap.c. */ bootconfig.dramblocks = 1; bootconfig.dram[0].address = rambase;