[U-Boot] [PATCH 2/2] Re-add support for image type 'Standalone Program'

Detlev Zundel dzu at denx.de
Mon Jul 13 16:01:19 CEST 2009


Support for this type was lost during the bootm refactoring.

Signed-off-by: Detlev Zundel <dzu at denx.de>
---
 common/cmd_bootm.c |   33 +++++++++++++++++++++++++++++++++
 1 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index d0a6bf7..e9389b7 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -418,6 +418,24 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress)
 	return 0;
 }
 
+static int bootm_start_standalone(ulong iflag, int argc, char *argv[])
+{
+	char  *s;
+	int   (*appl)(int, char *[]);
+
+	/* Don't start if "autostart" is set to "no" */
+	if (((s = getenv("autostart")) != NULL) && (strcmp(s, "no") == 0)) {
+		char buf[32];
+		sprintf(buf, "%lX", images.os.image_len);
+		setenv("filesize", buf);
+		return 0;
+	}
+	appl = (int (*)(int, char *[]))ntohl(images.ep);
+	(*appl)(argc-1, &argv[1]);
+
+	return 0;
+}
+
 /* we overload the cmd field with our state machine info instead of a
  * function pointer */
 cmd_tbl_t cmd_bootm_sub[] = {
@@ -630,6 +648,14 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 	lmb_reserve(&images.lmb, images.os.load, (load_end - images.os.load));
 
+	if (images.os.type == IH_TYPE_STANDALONE) {
+		if (iflag)
+			enable_interrupts();
+		/* This may return when 'autostart' is 'no' */
+		bootm_start_standalone(iflag, argc, argv);
+		return 0;
+	}
+
 	show_boot_progress (8);
 
 #ifdef CONFIG_SILENT_CONSOLE
@@ -829,6 +855,13 @@ static void *boot_get_kernel (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]
 		case IH_TYPE_MULTI:
 			image_multi_getimg (hdr, 0, os_data, os_len);
 			break;
+		case IH_TYPE_STANDALONE:
+			if (argc >2) {
+				hdr->ih_load = htonl(simple_strtoul(argv[2], NULL, 16));
+			}
+			*os_data = image_get_data (hdr);
+			*os_len = image_get_data_size (hdr);
+			break;
 		default:
 			printf ("Wrong Image Type for %s command\n", cmdtp->name);
 			show_boot_progress (-5);
-- 
1.6.0.6



More information about the U-Boot mailing list