void do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
bootm_headers_t *images)
{
- ulong initrd_start, initrd_end;
- ulong ep = 0;
void (*theKernel)(int magic, void *tagtable);
struct tag *params, *params_start;
char *commandline = getenv("bootargs");
int ret;
- /* find kernel entry point */
- if (images->legacy_hdr_valid) {
- ep = image_get_ep (images->legacy_hdr_os);
-#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 *)ep;
-
- ret = boot_get_ramdisk (argc, argv, images, IH_ARCH_AVR32,
- &initrd_start, &initrd_end);
- if (ret)
- goto error;
+ theKernel = (void *)images->ep;
show_boot_progress (15);
params = params_start = (struct tag *)gd->bd->bi_boot_params;
params = setup_start_tag(params);
params = setup_memory_tags(params);
- if (initrd_start) {
+ if (images->rd_start) {
params = setup_ramdisk_tag(params,
- PHYSADDR(initrd_start),
- PHYSADDR(initrd_end));
+ PHYSADDR(images->rd_start),
+ PHYSADDR(images->rd_end));
}
params = setup_commandline_tag(params, commandline);
params = setup_clock_tags(params);
params = setup_ethernet_tags(params);
setup_end_tag(params);
- if (!images->autostart)
- return ;
-
printf("\nStarting kernel at %p (params at %p)...\n\n",
theKernel, params_start);
return;
error:
- if (images->autostart)
- do_reset (cmdtp, flag, argc, argv);
+ do_reset (cmdtp, flag, argc, argv);
return;
}