[PATCH] bootstrap: Boot barebox with kernel calling convention

Trent Piepho tpiepho at kymetacorp.com
Thu Dec 10 12:00:50 PST 2015


In commit 8e3ddc13eb8239177ed20f119e3a3d02518b941d the bootm code was
changed to boot barebox using the same calling convention as the
kernel.  Which on ARM is to pass three arguments which are zero, an
architecture code, and a params pointer.

A 2nd stage barebox can be booted using lib/bootstrap, which is
different code from bootm.  This code just leaves garbage in the first
three parameters and so doesn't follow the convention.

Change it to be compatible with the ARM kernel booting convention.
This just sends a zero for the architecture, since the code for
architectures depends on boot[zmu] and something using bootstrap
wouldn't have those too.  And it just passes NULL for the params since
we don't have a way to pass a device tree from the preloader.

All users of bootstrap are ARM based, but the code is in lib so a
non-ARM board might someday make use of it.  If the current code would
work for them, then the change here will be ok too.

Signed-off-by: Trent Piepho <tpiepho at kymetacorp.com>
---
 include/bootstrap.h    | 3 ++-
 lib/bootstrap/common.c | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/include/bootstrap.h b/include/bootstrap.h
index 28852c0..9863ff4 100644
--- a/include/bootstrap.h
+++ b/include/bootstrap.h
@@ -11,7 +11,8 @@
 
 #define bootstrap_err(fmt, arg...) printf(fmt, ##arg)
 
-void bootstrap_boot(int (*func)(void), bool barebox);
+typedef void (*kernel_entry_func)(int zero, int arch, void *params);
+void bootstrap_boot(kernel_entry_func func, bool barebox);
 
 #ifdef CONFIG_BOOTSTRAP_DEVFS
 void* bootstrap_read_devfs(char *devname, bool use_bb, int offset,
diff --git a/lib/bootstrap/common.c b/lib/bootstrap/common.c
index 38ec272..4a61992 100644
--- a/lib/bootstrap/common.c
+++ b/lib/bootstrap/common.c
@@ -9,7 +9,7 @@
 #include <bootstrap.h>
 #include <filetype.h>
 
-void bootstrap_boot(int (*func)(void), bool barebox)
+void bootstrap_boot(kernel_entry_func func, bool barebox)
 {
 	if (!func)
 		return;
@@ -18,7 +18,7 @@ void bootstrap_boot(int (*func)(void), bool barebox)
 		return;
 
 	shutdown_barebox();
-	func();
+	func(0, 0, NULL);
 
 	while (1);
 }
-- 
1.8.3.1




More information about the barebox mailing list