svn commit: r227924 - in head/sys: conf mips/atheros
Adrian Chadd
adrian at FreeBSD.org
Thu Nov 24 07:32:53 UTC 2011
Author: adrian
Date: Thu Nov 24 07:32:52 2011
New Revision: 227924
URL: http://svn.freebsd.org/changeset/base/227924
Log:
Introduce a new (global, sorry!) option which controls whether
the ar71xx platform code should assume a uboot or redboot environment.
The current code gets very confused (and just crashes) on a uboot
environment, where each attribute=value pair is in a single entry.
Redboot on the other hand stores it as "attribute", "value", "attribute",
"value", ...
This allows the kernel to boot on a TP-LINK TL-WR1043ND from flash,
where the uboot environment gets setup. This didn't show up during a netboot
as "tftpboot" and "go" don't setup the uboot environment variables.
Modified:
head/sys/conf/options
head/sys/mips/atheros/ar71xx_machdep.c
Modified: head/sys/conf/options
==============================================================================
--- head/sys/conf/options Thu Nov 24 07:25:43 2011 (r227923)
+++ head/sys/conf/options Thu Nov 24 07:32:52 2011 (r227924)
@@ -899,4 +899,5 @@ RCTL opt_global.h
# that "lies" about the amount of RAM it has. Until a cleaner method is
# defined, this option will suffice in overriding what Redboot says.
AR71XX_REALMEM opt_global.h
-
+AR71XX_ENV_UBOOT opt_global.h
+AR71XX_ENV_REDBOOT opt_global.h
Modified: head/sys/mips/atheros/ar71xx_machdep.c
==============================================================================
--- head/sys/mips/atheros/ar71xx_machdep.c Thu Nov 24 07:25:43 2011 (r227923)
+++ head/sys/mips/atheros/ar71xx_machdep.c Thu Nov 24 07:32:52 2011 (r227924)
@@ -168,8 +168,8 @@ platform_start(__register_t a0 __unused,
__register_t a2 __unused, __register_t a3 __unused)
{
uint64_t platform_counter_freq;
- int argc, i;
- char **argv, **envp;
+ int argc = 0, i;
+ char **argv = NULL, **envp = NULL;
vm_offset_t kernend;
/*
@@ -184,9 +184,18 @@ platform_start(__register_t a0 __unused,
/* Initialize pcpu stuff */
mips_pcpu0_init();
+ /*
+ * Until some more sensible abstractions for uboot/redboot
+ * environment handling, we have to make this a compile-time
+ * hack. The existing code handles the uboot environment
+ * very incorrectly so we should just ignore initialising
+ * the relevant pointers.
+ */
+#ifndef AR71XX_ENV_UBOOT
argc = a0;
argv = (char**)a1;
envp = (char**)a2;
+#endif
/*
* Protect ourselves from garbage in registers
*/
@@ -255,6 +264,9 @@ platform_start(__register_t a0 __unused,
printf(" a2 = %08x\n", a2);
printf(" a3 = %08x\n", a3);
+ /*
+ * XXX this code is very redboot specific.
+ */
printf("Cmd line:");
if (MIPS_IS_VALID_PTR(argv)) {
for (i = 0; i < argc; i++) {
More information about the svn-src-head
mailing list