diff mbox

[U-Boot,v3,6/6] x86: Add support for specifying an initrd with the zboot command

Message ID 1323122967-18033-7-git-send-email-gabeblack@chromium.org
State Awaiting Upstream
Delegated to: Graeme Russ
Headers show

Commit Message

Gabe Black Dec. 5, 2011, 10:09 p.m. UTC
This change finishes plumbing the initrd support built into the zboot
mechanism out to the command interface.

It also fixes a bug in the command declaration where the kernel size could
be passed as an optional second parameter but not enough arguments were
allowed.

Signed-off-by: Gabe Black <gabeblack@chromium.org>
---
Changes in v2:
- Add a help message to the zboot command.

 arch/x86/lib/zimage.c |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)

Comments

Graeme Russ Dec. 6, 2011, 10:38 a.m. UTC | #1
Hi Gabe,

On 06/12/11 09:09, Gabe Black wrote:
> This change finishes plumbing the initrd support built into the zboot
> mechanism out to the command interface.
> 
> It also fixes a bug in the command declaration where the kernel size could
> be passed as an optional second parameter but not enough arguments were
> allowed.
> 
> Signed-off-by: Gabe Black <gabeblack@chromium.org>
> ---
> Changes in v2:
> - Add a help message to the zboot command.
> 
>  arch/x86/lib/zimage.c |   23 +++++++++++++++++++----
>  1 files changed, 19 insertions(+), 4 deletions(-)

Applied to u-boot-x86/next

Regards,

Graeme
diff mbox

Patch

diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
index 0cbb571..bb40517 100644
--- a/arch/x86/lib/zimage.c
+++ b/arch/x86/lib/zimage.c
@@ -321,6 +321,8 @@  int do_zboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 	void *load_address;
 	char *s;
 	ulong bzImage_size = 0;
+	ulong initrd_addr = 0;
+	ulong initrd_size = 0;
 
 	disable_interrupts();
 
@@ -337,9 +339,15 @@  int do_zboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 	if (s)
 		bzImage_addr = (void *)simple_strtoul(s, NULL, 16);
 
-	if (argc >= 3)
+	if (argc >= 3) {
 		/* argv[2] holds the size of the bzImage */
 		bzImage_size = simple_strtoul(argv[2], NULL, 16);
+	}
+
+	if (argc >= 4)
+		initrd_addr = simple_strtoul(argv[3], NULL, 16);
+	if (argc >= 5)
+		initrd_size = simple_strtoul(argv[4], NULL, 16);
 
 	/* Lets look for */
 	base_ptr = load_zimage(bzImage_addr, bzImage_size, &load_address);
@@ -349,7 +357,7 @@  int do_zboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 		return -1;
 	}
 	if (setup_zimage(base_ptr, (char *)base_ptr + COMMAND_LINE_OFFSET,
-			0, 0, 0)) {
+			0, initrd_addr, initrd_size)) {
 		printf("Setting up boot parameters failed ...\n");
 		return -1;
 	}
@@ -366,7 +374,14 @@  int do_zboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 }
 
 U_BOOT_CMD(
-	zboot, 2, 0,	do_zboot,
+	zboot, 5, 0,	do_zboot,
 	"Boot bzImage",
-	""
+	"[addr] [size] [initrd addr] [initrd size]\n"
+	"      addr -        The optional starting address of the bzimage.\n"
+	"                    If not set it defaults to the environment\n"
+	"                    variable \"fileaddr\".\n"
+	"      size -        The optional size of the bzimage. Defaults to\n"
+	"                    zero.\n"
+	"      initrd addr - The address of the initrd image to use, if any.\n"
+	"      initrd size - The size of the initrd image to use, if any.\n"
 );