x86: zboot update
authorGraeme Russ <graeme.russ@gmail.com>
Thu, 7 Oct 2010 09:03:19 +0000 (20:03 +1100)
committerGraeme Russ <graeme.russ@gmail.com>
Thu, 7 Oct 2010 09:03:19 +0000 (20:03 +1100)
The header of recent Linux Kernels includes the size of the image, and
therefore is not needed to be passed to zboot. Still process the third
parameter (size of image) in the event that an older kernel is being loaded

arch/i386/lib/zimage.c

index 89fe015e6eccf92483f20a8e3e353b380f39e9e9..0c420726912c120b5a263b7e3b3c165d5af601e6 100644 (file)
@@ -248,7 +248,8 @@ void boot_zimage(void *setup_base)
 int do_zboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        void *base_ptr;
-       void *bzImage_addr;
+       void *bzImage_addr = NULL;
+       char *s;
        ulong bzImage_size = 0;
 
        disable_interrupts();
@@ -256,10 +257,17 @@ int do_zboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        /* Setup board for maximum PC/AT Compatibility */
        setup_pcat_compatibility();
 
-       /* argv[1] holds the address of the bzImage */
-       bzImage_addr = (void *)simple_strtoul(argv[1], NULL, 16);
+       if (argc >= 2)
+               /* argv[1] holds the address of the bzImage */
+               s = argv[1];
+       else
+               s = getenv("fileaddr");
+
+       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);
 
        /* Lets look for*/
@@ -282,7 +290,7 @@ int do_zboot (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 }
 
 U_BOOT_CMD(
-       zboot, 3, 0,    do_zboot,
+       zboot, 2, 0,    do_zboot,
        "Boot bzImage",
        ""
 );