svn commit: r270058 - stable/10/sys/mips/beri
Bjoern A. Zeeb
bz at FreeBSD.org
Sat Aug 16 14:14:30 UTC 2014
Author: bz
Date: Sat Aug 16 14:14:29 2014
New Revision: 270058
URL: http://svnweb.freebsd.org/changeset/base/270058
Log:
MFC r264605:
Based on xlp_machdep.c and completed the list of options based on
boot/mips/beri/loader/metadata.c allow FDT configuration to set
command line options.
This leads to an interesting quesiton of future interactions with loader.
However for configurations without loader this allows bootverbose or boot
single user to be set by compiling a new kernel, which is good enough for
testing and debugging.
Reviewed by: rwatson
Sponsored by: DARPA/AFRL
Modified:
stable/10/sys/mips/beri/beri_machdep.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/mips/beri/beri_machdep.c
==============================================================================
--- stable/10/sys/mips/beri/beri_machdep.c Sat Aug 16 14:09:26 2014 (r270057)
+++ stable/10/sys/mips/beri/beri_machdep.c Sat Aug 16 14:14:29 2014 (r270058)
@@ -131,6 +131,46 @@ platform_reset(void)
__asm__ __volatile("wait");
}
+#ifdef FDT
+/* Parse cmd line args as env - copied from xlp_machdep. */
+/* XXX-BZ this should really be centrally provided for all (boot) code. */
+static void
+_parse_bootargs(char *cmdline)
+{
+ char *n, *v;
+
+ while ((v = strsep(&cmdline, " \n")) != NULL) {
+ if (*v == '\0')
+ continue;
+ if (*v == '-') {
+ while (*v != '\0') {
+ v++;
+ switch (*v) {
+ case 'a': boothowto |= RB_ASKNAME; break;
+ /* Someone should simulate that ;-) */
+ case 'C': boothowto |= RB_CDROM; break;
+ case 'd': boothowto |= RB_KDB; break;
+ case 'D': boothowto |= RB_MULTIPLE; break;
+ case 'm': boothowto |= RB_MUTE; break;
+ case 'g': boothowto |= RB_GDB; break;
+ case 'h': boothowto |= RB_SERIAL; break;
+ case 'p': boothowto |= RB_PAUSE; break;
+ case 'r': boothowto |= RB_DFLTROOT; break;
+ case 's': boothowto |= RB_SINGLE; break;
+ case 'v': boothowto |= RB_VERBOSE; break;
+ }
+ }
+ } else {
+ n = strsep(&v, "=");
+ if (v == NULL)
+ setenv(n, "1");
+ else
+ setenv(n, v);
+ }
+ }
+}
+#endif
+
void
platform_start(__register_t a0, __register_t a1, __register_t a2,
__register_t a3)
@@ -142,7 +182,9 @@ platform_start(__register_t a0, __regist
char **envp = (char **)a2;
unsigned int memsize = a3;
#ifdef FDT
+ char buf[2048]; /* early stack supposedly big enough */
vm_offset_t dtbp;
+ phandle_t chosen;
void *kmdp;
#endif
int i;
@@ -180,6 +222,13 @@ platform_start(__register_t a0, __regist
while (1);
if (OF_init((void *)dtbp) != 0)
while (1);
+
+ /*
+ * Get bootargs from FDT if specified.
+ */
+ chosen = OF_finddevice("/chosen");
+ if (OF_getprop(chosen, "bootargs", buf, sizeof(buf)) != -1)
+ _parse_bootargs(buf);
#endif
/*
More information about the svn-src-all
mailing list