Module Name: src
Committed By: matt
Date: Wed Feb 26 00:20:59 UTC 2014
Modified Files:
src/sys/arch/evbarm/cubie: cubie_machdep.c
Log Message:
Deal with cubietruck GPIO differences.
Use its 2GB of RAM to distinguish it.
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/evbarm/cubie/cubie_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/cubie/cubie_machdep.c
diff -u src/sys/arch/evbarm/cubie/cubie_machdep.c:1.11 src/sys/arch/evbarm/cubie/cubie_machdep.c:1.12
--- src/sys/arch/evbarm/cubie/cubie_machdep.c:1.11 Wed Feb 26 00:12:21 2014
+++ src/sys/arch/evbarm/cubie/cubie_machdep.c Wed Feb 26 00:20:59 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: cubie_machdep.c,v 1.11 2014/02/26 00:12:21 jmcneill Exp $ */
+/* $NetBSD: cubie_machdep.c,v 1.12 2014/02/26 00:20:59 matt Exp $ */
/*
* Machine dependent functions for kernel setup for TI OSK5912 board.
@@ -125,7 +125,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cubie_machdep.c,v 1.11 2014/02/26 00:12:21 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cubie_machdep.c,v 1.12 2014/02/26 00:20:59 matt Exp $");
#include "opt_machdep.h"
#include "opt_ddb.h"
@@ -191,6 +191,7 @@ static char bootargs[MAX_BOOT_STRING];
char *boot_args = NULL;
char *boot_file = NULL;
+bool cubietruck_p;
/*
* uboot_args are filled in by cubie_start.S and must be in .data
* and not .bbs since .bss is cleared after uboot_args are filled in.
@@ -202,6 +203,10 @@ uintptr_t uboot_args[4] = { 0 };
extern char KERNEL_BASE_phys[]; /* physical start of kernel */
extern char _end[]; /* physical end of kernel */
+#ifdef MULTIPROCESSOR
+extern uintptr_t cortex_mpfault[4];
+#endif
+
#if NAWIN_FB > 0
#if NCOM > 0
int use_fb_console = false;
@@ -307,6 +312,11 @@ initarm(void *arg)
#ifdef VERBOSE_INIT_ARM
printf("\nuboot arg = %#"PRIxPTR", %#"PRIxPTR", %#"PRIxPTR", %#"PRIxPTR"\n",
uboot_args[0], uboot_args[1], uboot_args[2], uboot_args[3]);
+#ifdef MULTIPROCESSOR
+ printf("mpfault = %#"PRIxPTR", %#"PRIxPTR", %#"PRIxPTR", %#"PRIxPTR"\n",
+ cortex_mpfault[0], cortex_mpfault[1], cortex_mpfault[2],
+ cortex_mpfault[3]);
+#endif
#endif
#ifdef KGDB
@@ -339,6 +349,9 @@ initarm(void *arg)
*/
psize_t ram_size = awin_memprobe();
+ /* the cubietruck has 2GB whereas the cubieboards only has 1GB */
+ cubietruck_p = (ram_size == 0x80000000);
+
/*
* If MEMSIZE specified less than what we really have, limit ourselves
* to that.
@@ -350,6 +363,11 @@ initarm(void *arg)
KASSERTMSG(ram_size > 0, "RAM size unknown and MEMSIZE undefined");
#endif
+ /*
+ * Configure DMA tags
+ */
+ awin_dma_bootstrap(ram_size);
+
/* Fake bootconfig structure for the benefit of pmap.c. */
bootconfig.dramblocks = 1;
bootconfig.dram[0].address = AWIN_SDRAM_PBASE;
@@ -412,7 +430,7 @@ initarm(void *arg)
#define CONSPEED 115200
#endif
#ifndef CONMODE
-#define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB)) | CS8) /* 8N1 */
+#define CONMODE ((TTYDEF_CFLAG & ~(CSIZE | CSTOPB | PARENB | HUPCL)) | CS8) /* 8N1 */
#endif
__CTASSERT(AWIN_CORE_PBASE + AWIN_UART0_OFFSET <= CONADDR);
@@ -529,7 +547,11 @@ cubie_device_register(device_t self, voi
#endif
if (device_is_a(self, "awinio")) {
- prop_dictionary_set_bool(dict, "no-awge", true);
+ if (cubietruck_p) {
+ prop_dictionary_set_bool(dict, "no-awe", true);
+ } else {
+ prop_dictionary_set_bool(dict, "no-awge", true);
+ }
return;
}
@@ -537,16 +559,25 @@ cubie_device_register(device_t self, voi
/*
* These are GPIOs being used for various functions.
*/
- prop_dictionary_set_cstring(dict, "satapwren", ">PB8");
- prop_dictionary_set_cstring(dict, "usb0drv", ">PB9");
+ prop_dictionary_set_cstring(dict, "satapwren",
+ (cubietruck_p ? ">PH12" : ">PB8"));
+ prop_dictionary_set_cstring(dict, "usb0drv",
+ (cubietruck_p ? ">PH17" : ">PB2"));
prop_dictionary_set_cstring(dict, "usb2drv", ">PH3");
- prop_dictionary_set_cstring(dict, "usb0iddet", "<PH4");
- prop_dictionary_set_cstring(dict, "usb0vbusdet", "<PH5");
+ prop_dictionary_set_cstring(dict, "usb0iddet",
+ (cubietruck_p ? "<PH19" : "<PH4"));
+ prop_dictionary_set_cstring(dict, "usb0vbusdet",
+ (cubietruck_p ? "<PH22" : "<PH5"));
prop_dictionary_set_cstring(dict, "usb1drv", ">PH6");
- prop_dictionary_set_cstring(dict, "hdd5ven", ">PH17");
- prop_dictionary_set_cstring(dict, "emacpwren", ">PH19");
prop_dictionary_set_cstring(dict, "status-led1", ">PH21");
prop_dictionary_set_cstring(dict, "status-led2", ">PH20");
+ if (cubietruck_p) {
+ prop_dictionary_set_cstring(dict, "status-led3", ">PH11");
+ prop_dictionary_set_cstring(dict, "status-led4", ">PH7");
+ } else {
+ prop_dictionary_set_cstring(dict, "hdd5ven", ">PH17");
+ prop_dictionary_set_cstring(dict, "emacpwren", ">PH19");
+ }
/*
* These pins have no connections.
@@ -563,7 +594,7 @@ cubie_device_register(device_t self, voi
}
if (device_is_a(self, "ahcisata")) {
- /* PIO PB<8> output */
+ /* PIO PB<8> / PIO PH<12> output */
prop_dictionary_set_cstring(dict, "power-gpio", "satapwren");
return;
}