diff options
author | Brian Swetland <swetland@google.com> | 2011-01-31 01:11:58 -0800 |
---|---|---|
committer | Vikram Pandita <vikram.pandita@ti.com> | 2011-01-31 09:57:05 -0800 |
commit | 9661a5172098ebb5253cf243434d528c2046eaf7 (patch) | |
tree | 4013e3d93d16fc6e94b5331a1c9dce75d4012d7a | |
parent | 06412edffa3bd5941888f07fa7b6505e1a3db908 (diff) | |
download | u-boot-pandroid-9661a5172098ebb5253cf243434d528c2046eaf7.tar.gz |
further booti cleanup
- print kernel/ramdisk addresses before booting
- deal with no-ramdisk case correctly
Signed-off-by: Brian Swetland <swetland@google.com>
-rw-r--r-- | common/cmd_bootm.c | 23 | ||||
-rw-r--r-- | lib_arm/armlinux.c | 18 |
2 files changed, 19 insertions, 22 deletions
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index fe794817..8cf22c68 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -1483,6 +1483,8 @@ int do_booti (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return -1; #endif } else { + unsigned kaddr, raddr; + /* set this aside somewhere safe */ memcpy(hdr, (void*) addr, sizeof(*hdr)); @@ -1491,18 +1493,19 @@ int do_booti (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return do_fastboot(NULL, 0, 0, NULL); } - memmove((void*) hdr->kernel_addr, - (void*) (addr + hdr->page_size), - hdr->kernel_size); - memmove((void*) hdr->ramdisk_addr, - (void*) (addr + hdr->page_size + - ALIGN(hdr->kernel_size, hdr->page_size)), - hdr->ramdisk_size); - } + bootimg_print_image_hdr(hdr); + kaddr = addr + hdr->page_size; + raddr = kaddr + ALIGN(hdr->kernel_size, hdr->page_size); + + memmove((void*) hdr->kernel_addr, kaddr, hdr->kernel_size); + memmove((void*) hdr->ramdisk_addr, raddr, hdr->ramdisk_size); + } - bootimg_print_image_hdr(hdr); - do_booti_linux(hdr->ramdisk_addr, hdr); + printf("kernel @ %08x (%d)\n", hdr->kernel_addr, hdr->kernel_size); + printf("ramdisk @ %08x (%d)\n", hdr->ramdisk_addr, hdr->ramdisk_size); + + do_booti_linux(hdr); puts ("booti: Control returned to monitor - resetting...\n"); do_reset (cmdtp, flag, argc, argv); diff --git a/lib_arm/armlinux.c b/lib_arm/armlinux.c index cde82f0f..06573729 100644 --- a/lib_arm/armlinux.c +++ b/lib_arm/armlinux.c @@ -272,7 +272,7 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], } -void do_booti_linux (ulong initrd_start_addr, boot_img_hdr *bootimg_header_data) +void do_booti_linux (boot_img_hdr *hdr) { ulong initrd_start, initrd_end; void (*theKernel)(int zero, int arch, uint params); @@ -281,18 +281,12 @@ void do_booti_linux (ulong initrd_start_addr, boot_img_hdr *bootimg_header_data) char *commandline = getenv ("bootargs"); #endif - theKernel = (void (*)(int, int, uint))(bootimg_header_data->kernel_addr); + theKernel = (void (*)(int, int, uint))(hdr->kernel_addr); - initrd_start = initrd_start_addr;; - initrd_end = initrd_start + bootimg_header_data->ramdisk_size; + initrd_start = hdr->ramdisk_addr; + initrd_end = initrd_start + hdr->ramdisk_size; -#if defined (CONFIG_SETUP_MEMORY_TAGS) || \ - defined (CONFIG_CMDLINE_TAG) || \ - defined (CONFIG_INITRD_TAG) || \ - defined (CONFIG_SERIAL_TAG) || \ - defined (CONFIG_REVISION_TAG) || \ - defined (CONFIG_LCD) || \ - defined (CONFIG_VFD) +#if defined (CONFIG_SETUP_MEMORY_TAGS) setup_start_tag (bd); #ifdef CONFIG_SERIAL_TAG setup_serial_tag (¶ms); @@ -307,7 +301,7 @@ void do_booti_linux (ulong initrd_start_addr, boot_img_hdr *bootimg_header_data) setup_commandline_tag (bd, commandline); #endif #ifdef CONFIG_INITRD_TAG - if (initrd_start && initrd_end) + if (hdr->ramdisk_size) setup_initrd_tag (bd, initrd_start, initrd_end); #endif #if defined (CONFIG_VFD) || defined (CONFIG_LCD) |