Module Name: src Committed By: kiyohara Date: Sun Mar 7 09:18:51 UTC 2010
Modified Files: src/sys/arch/evbarm/conf: GUMSTIX files.gumstix src/sys/arch/evbarm/gumstix: gumstix_machdep.c Log Message: Add options GUMSTIX_NETBSD_ARGS_CONSOLE and GUMSTIX_NETBSD_ARGS_BUSHEADER. Can specify arg 'console='(*new*) and 'busheader=' from u-boot. These args use dynamically configuration. Also change function name. s/_line/_liner/. To generate a diff of this commit: cvs rdiff -u -r1.44 -r1.45 src/sys/arch/evbarm/conf/GUMSTIX cvs rdiff -u -r1.14 -r1.15 src/sys/arch/evbarm/conf/files.gumstix cvs rdiff -u -r1.24 -r1.25 src/sys/arch/evbarm/gumstix/gumstix_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/conf/GUMSTIX diff -u src/sys/arch/evbarm/conf/GUMSTIX:1.44 src/sys/arch/evbarm/conf/GUMSTIX:1.45 --- src/sys/arch/evbarm/conf/GUMSTIX:1.44 Sun Mar 7 07:33:29 2010 +++ src/sys/arch/evbarm/conf/GUMSTIX Sun Mar 7 09:18:51 2010 @@ -1,4 +1,4 @@ -# $NetBSD: GUMSTIX,v 1.44 2010/03/07 07:33:29 kiyohara Exp $ +# $NetBSD: GUMSTIX,v 1.45 2010/03/07 09:18:51 kiyohara Exp $ # # GUMSTIX -- Gumstix. Inc. gumstix platforms kernel # @@ -22,6 +22,12 @@ #options XSCALE_CACHE_WRITE_THROUGH options XSCALE_CACHE_READ_WRITE_ALLOCATE +# Gumstix options +# if not specfied 'busheader=' in args from u-boot, use GXIO_DEFAULT_EXPANSION. +options GUMSTIX_NETBSD_ARGS_BUSHEADER +options GUMSTIX_NETBSD_ARGS_CONSOLE # dynamically configure console + # 'console=lcd' or ffuart,stuart + # Standard system options options RTC_OFFSET=0 # hardware clock is this many mins. west of GMT Index: src/sys/arch/evbarm/conf/files.gumstix diff -u src/sys/arch/evbarm/conf/files.gumstix:1.14 src/sys/arch/evbarm/conf/files.gumstix:1.15 --- src/sys/arch/evbarm/conf/files.gumstix:1.14 Sun Aug 9 07:10:13 2009 +++ src/sys/arch/evbarm/conf/files.gumstix Sun Mar 7 09:18:51 2010 @@ -1,9 +1,11 @@ -# $NetBSD: files.gumstix,v 1.14 2009/08/09 07:10:13 kiyohara Exp $ +# $NetBSD: files.gumstix,v 1.15 2010/03/07 09:18:51 kiyohara Exp $ # # Gumstix. Inc. Gumstix boards configuration info # file arch/evbarm/gumstix/gumstix_machdep.c +defflag opt_gumstix.h GUMSTIX_NETBSD_ARGS_BUSHEADER + GUMSTIX_NETBSD_ARGS_CONSOLE # CPU support and integrated peripherals include "arch/arm/xscale/files.pxa2x0" Index: src/sys/arch/evbarm/gumstix/gumstix_machdep.c diff -u src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.24 src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.25 --- src/sys/arch/evbarm/gumstix/gumstix_machdep.c:1.24 Sun Jan 24 03:46:48 2010 +++ src/sys/arch/evbarm/gumstix/gumstix_machdep.c Sun Mar 7 09:18:51 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: gumstix_machdep.c,v 1.24 2010/01/24 03:46:48 kiyohara Exp $ */ +/* $NetBSD: gumstix_machdep.c,v 1.25 2010/03/07 09:18:51 kiyohara Exp $ */ /* * Copyright (C) 2005, 2006, 2007 WIDE Project and SOUM Corporation. * All rights reserved. @@ -137,6 +137,7 @@ * boards using RedBoot firmware. */ +#include "opt_gumstix.h" #include "opt_ddb.h" #include "opt_kgdb.h" #include "opt_pmap_debug.h" @@ -257,7 +258,7 @@ /* Prototypes */ static void read_system_serial(void); static void process_kernel_args(int, char *[]); -static void process_kernel_args_line(char *); +static void process_kernel_args_liner(char *); #ifdef KGDB static void kgdb_port_init(void); #endif @@ -282,6 +283,10 @@ int comcnspeed = CONSPEED; int comcnmode = CONMODE; +#ifdef GUMSTIX_NETBSD_ARGS_CONSOLE +static char console[16]; +#endif + extern void gxio_config_pin(void); extern void gxio_config_expansion(char *); @@ -351,8 +356,7 @@ /*NOTREACHED*/ } -static inline -pd_entry_t * +static inline pd_entry_t * read_ttb(void) { long ttb; @@ -501,17 +505,13 @@ pxa2x0_clkman_bootstrap(GUMSTIX_CLKMAN_VBASE); +#ifndef GUMSTIX_NETBSD_ARGS_CONSOLE consinit(); +#endif #ifdef KGDB kgdb_port_init(); #endif - /* Talk to the user */ - printf("\nNetBSD/evbarm (gumstix) booting ...\n"); - - /* Read system serial */ - read_system_serial(); - /* * Examine the boot args string for options we need to know about * now. @@ -526,7 +526,16 @@ * Maybe r3 is 'boot args string' of 'bootm'. This string is * linely. */ - process_kernel_args_line((char *)u_boot_args[r3]); + process_kernel_args_liner((char *)u_boot_args[r3]); +#ifdef GUMSTIX_NETBSD_ARGS_CONSOLE + consinit(); +#endif + + /* Talk to the user */ + printf("\nNetBSD/evbarm (gumstix) booting ...\n"); + + /* Read system serial */ + read_system_serial(); memstart = SDRAM_START; memsize = ram_size; @@ -939,7 +948,12 @@ printf("\n"); } +#ifdef GUMSTIX_NETBSD_ARGS_BUSHEADER static const char busheader_name[] = "busheader="; +#endif +#ifdef GUMSTIX_NETBSD_ARGS_CONSOLE +static const char console_name[] = "console="; +#endif static void process_kernel_args(int argc, char *argv[]) { @@ -948,12 +962,21 @@ boothowto = 0; for (i = 1, j = 0; i < argc; i++) { +#ifdef GUMSTIX_NETBSD_ARGS_BUSHEADER if (!strncmp(argv[i], busheader_name, strlen(busheader_name))) { /* configure for GPIOs of busheader side */ gxio_config_expansion(argv[i] + strlen(busheader_name)); gxio_configured = 1; continue; } +#endif +#ifdef GUMSTIX_NETBSD_ARGS_CONSOLE + if (!strncmp(argv[i], console_name, strlen(console_name))) { + strncpy(console, argv[i] + strlen(console_name), + sizeof(console)); + consinit(); + } +#endif if (j == MAX_BOOT_STRING) { *(bootargs + j) = '\0'; continue; @@ -972,28 +995,49 @@ } static void -process_kernel_args_line(char *args) +process_kernel_args_liner(char *args) { int i; - char expansion[256], *p, c; + char *p = NULL; boothowto = 0; strncpy(bootargs, args, sizeof(bootargs)); +#ifdef GUMSTIX_NETBSD_ARGS_BUSHEADER p = strstr(bootargs, busheader_name); - if (p == NULL) - gxio_config_expansion(NULL); - else { + if (p) { + char expansion[256], c; + i = 0; do { c = *(p + strlen(busheader_name) + i); if (c == ' ') c = '\0'; expansion[i++] = c; - } while (c != '\0'); + } while (c != '\0' && i < sizeof(expansion)); gxio_config_expansion(expansion); strcpy(p, p + i); } +#endif + if (p == NULL) { + gxio_config_expansion(NULL); + } +#ifdef GUMSTIX_NETBSD_ARGS_CONSOLE + p = strstr(bootargs, console_name); + if (p != NULL) { + char c; + + i = 0; + do { + c = *(p + strlen(console_name) + i); + if (c == ' ') + c = '\0'; + console[i++] = c; + } while (c != '\0' && i < sizeof(console)); + consinit(); + strcpy(p, p + i); + } +#endif boot_args = bootargs; parse_mi_bootargs(boot_args); @@ -1024,6 +1068,7 @@ consinit(void) { static int consinit_called = 0; + int rv; if (consinit_called != 0) return; @@ -1034,13 +1079,17 @@ #ifdef FFUARTCONSOLE #ifdef KGDB - if (0 == strcmp(kgdb_devname, "ffuart")){ + if (strcmp(kgdb_devname, "ffuart") == 0){ /* port is reserved for kgdb */ } else #endif +#if defined(GUMSTIX_NETBSD_ARGS_CONSOLE) + if (console[0] == '\0' || strcasecmp(console, "ffuart") == 0) +#endif { - if (0 == comcnattach(&pxa2x0_a4x_bs_tag, PXA2X0_FFUART_BASE, - comcnspeed, PXA2X0_COM_FREQ, COM_TYPE_PXA2x0, comcnmode)) { + rv = comcnattach(&pxa2x0_a4x_bs_tag, PXA2X0_FFUART_BASE, + comcnspeed, PXA2X0_COM_FREQ, COM_TYPE_PXA2x0, comcnmode); + if (rv == 0) { pxa2x0_clkman_config(CKEN_FFUART, 1); return; } @@ -1049,13 +1098,17 @@ #ifdef STUARTCONSOLE #ifdef KGDB - if (0 == strcmp(kgdb_devname, "stuart")) { + if (strcmp(kgdb_devname, "stuart") == 0) { /* port is reserved for kgdb */ } else #endif +#if defined(GUMSTIX_NETBSD_ARGS_CONSOLE) + if (console[0] == '\0' || strcasecmp(console, "stuart") == 0) +#endif { - if (0 == comcnattach(&pxa2x0_a4x_bs_tag, PXA2X0_STUART_BASE, - comcnspeed, PXA2X0_COM_FREQ, COM_TYPE_PXA2x0, comcnmode)) { + rv = comcnattach(&pxa2x0_a4x_bs_tag, PXA2X0_STUART_BASE, + comcnspeed, PXA2X0_COM_FREQ, COM_TYPE_PXA2x0, comcnmode); + if (rv == 0) { pxa2x0_clkman_config(CKEN_STUART, 1); return; } @@ -1064,13 +1117,17 @@ #ifdef BTUARTCONSOLE #ifdef KGDB - if (0 == strcmp(kgdb_devname, "btuart")) { + if (strcmp(kgdb_devname, "btuart") == 0) { /* port is reserved for kgdb */ } else #endif +#if defined(GUMSTIX_NETBSD_ARGS_CONSOLE) + if (console[0] == '\0' || strcasecmp(console, "btuart") == 0) +#endif { - if (0 == comcnattach(&pxa2x0_a4x_bs_tag, PXA2X0_BTUART_BASE, - comcnspeed, PXA2X0_COM_FREQ, COM_TYPE_PXA2x0, comcnmode)) { + rv = comcnattach(&pxa2x0_a4x_bs_tag, PXA2X0_BTUART_BASE, + comcnspeed, PXA2X0_COM_FREQ, COM_TYPE_PXA2x0, comcnmode); + if (rv == 0) { pxa2x0_clkman_config(CKEN_BTUART, 1); return; } @@ -1079,13 +1136,17 @@ #ifdef HWUARTCONSOLE #ifdef KGDB - if (0 == strcmp(kgdb_devname, "hwuart")) { + if (strcmp(kgdb_devname, "hwuart") == 0) { /* port is reserved for kgdb */ } else #endif +#if defined(GUMSTIX_NETBSD_ARGS_CONSOLE) + if (console[0] == '\0' || strcasecmp(console, "hwuart") == 0) +#endif { - if (0 == comcnattach(&pxa2x0_a4x_bs_tag, PXA2X0_HWUART_BASE, - comcnspeed, PXA2X0_COM_FREQ, COM_TYPE_PXA2x0, comcnmode)) { + rv = comcnattach(&pxa2x0_a4x_bs_tag, PXA2X0_HWUART_BASE, + comcnspeed, PXA2X0_COM_FREQ, COM_TYPE_PXA2x0, comcnmode); + if (rv == 0) { pxa2x0_clkman_config(CKEN_HWUART, 1); return; } @@ -1095,7 +1156,12 @@ #endif /* NCOM */ #if NLCD > 0 - gxlcd_cnattach(); +#if defined(GUMSTIX_NETBSD_ARGS_CONSOLE) + if (console[0] == '\0' || strcasecmp(console, "lcd") == 0) +#endif + { + gxlcd_cnattach(); + } #endif }