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 MFC after: 1 week
This commit is contained in:
parent
517f4fff73
commit
80c803a4fc
@ -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, __register_t a1, __register_t a2,
|
||||
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, __register_t a1, __register_t a2,
|
||||
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
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user