X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=lib_arm%2Fbootm.c;h=7dbde7df5cebef36dc349d4d3189d111bd940cf6;hb=5a105a333dab6a23e92d763ce76d6f31d57f45df;hp=b838c374ac6aed033106b8ec91d100565eefab20;hpb=de2a07e534f18b1ca5f9869a4ef0604ca829cff0;p=oweals%2Fu-boot.git diff --git a/lib_arm/bootm.c b/lib_arm/bootm.c index b838c374ac..7dbde7df5c 100644 --- a/lib_arm/bootm.c +++ b/lib_arm/bootm.c @@ -56,40 +56,21 @@ static void setup_videolfb_tag (gd_t *gd); static struct tag *params; #endif /* CONFIG_SETUP_MEMORY_TAGS || CONFIG_CMDLINE_TAG || CONFIG_INITRD_TAG */ -extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]); - -void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], - bootm_headers_t *images) +int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images) { - ulong initrd_start, initrd_end; - ulong ep = 0; bd_t *bd = gd->bd; char *s; int machid = bd->bi_arch_number; void (*theKernel)(int zero, int arch, uint params); - int ret; #ifdef CONFIG_CMDLINE_TAG char *commandline = getenv ("bootargs"); #endif - /* find kernel entry point */ - if (images->legacy_hdr_valid) { - ep = image_get_ep (&images->legacy_hdr_os_copy); -#if defined(CONFIG_FIT) - } else if (images->fit_uname_os) { - ret = fit_image_get_entry (images->fit_hdr_os, - images->fit_noffset_os, &ep); - if (ret) { - puts ("Can't get entry point property!\n"); - goto error; - } -#endif - } else { - puts ("Could not find kernel entry point!\n"); - goto error; - } - theKernel = (void (*)(int, int, uint))ep; + if ((flag != 0) && (flag != BOOTM_STATE_OS_GO)) + return 1; + + theKernel = (void (*)(int, int, uint))images->ep; s = getenv ("machid"); if (s) { @@ -97,11 +78,6 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], printf ("Using machid 0x%x from environment\n", machid); } - ret = boot_get_ramdisk (argc, argv, images, IH_ARCH_ARM, - &initrd_start, &initrd_end); - if (ret) - goto error; - show_boot_progress (15); debug ("## Transferring control to Linux (at address %08lx) ...\n", @@ -128,8 +104,8 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], setup_commandline_tag (bd, commandline); #endif #ifdef CONFIG_INITRD_TAG - if (initrd_start && initrd_end) - setup_initrd_tag (bd, initrd_start, initrd_end); + if (images->rd_start && images->rd_end) + setup_initrd_tag (bd, images->rd_start, images->rd_end); #endif #if defined (CONFIG_VFD) || defined (CONFIG_LCD) setup_videolfb_tag ((gd_t *) gd); @@ -137,9 +113,6 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], setup_end_tag (bd); #endif - if (!images->autostart) - return ; - /* we assume that the kernel is in place */ printf ("\nStarting kernel ...\n\n"); @@ -154,12 +127,8 @@ void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[], theKernel (0, machid, bd->bi_boot_params); /* does not return */ - return; -error: - if (images->autostart) - do_reset (cmdtp, flag, argc, argv); - return; + return 1; }