X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib_sparc%2Fbootm.c;h=c62cf57d80b25584187c777c09d595d342714b25;hb=091dc9f6adaf572b067ae91af92c4e7db33d7903;hp=f3abdcfdc412d416e69a5a2c92f2b5a738393952;hpb=396f635b8ff3ccbc38d75d5eda98444c6466810a;p=u-boot diff --git a/lib_sparc/bootm.c b/lib_sparc/bootm.c index f3abdcfdc4..c62cf57d80 100644 --- a/lib_sparc/bootm.c +++ b/lib_sparc/bootm.c @@ -27,13 +27,13 @@ #include #include #include +#include #define PRINT_KERNEL_HEADER extern image_header_t header; extern void srmmu_init_cpu(unsigned int entry); extern void prepare_bootargs(char *bootargs); -extern int do_reset(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]); #ifdef CONFIG_USB_UHCI extern int usb_lowlevel_stop(void); @@ -82,9 +82,17 @@ struct __attribute__ ((packed)) { /* temporary initrd image holder */ image_header_t ihdr; +void arch_lmb_reserve(struct lmb *lmb) +{ + /* Reserve the space used by PROM and stack. This is done + * to avoid that the RAM image is copied over stack or + * PROM. + */ + lmb_reserve(lmb, CONFIG_SYS_RELOC_MONITOR_BASE, CONFIG_SYS_RAM_END); +} + /* boot the linux kernel */ -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) { char *bootargs; ulong initrd_start, initrd_end; @@ -95,6 +103,9 @@ void do_bootm_linux(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[], struct lmb *lmb = &images->lmb; int ret; + if ((flag != 0) && (flag != BOOTM_STATE_OS_GO)) + return 1; + /* Get virtual address of kernel start */ linux_hdr = (void *)images->os.load; @@ -126,13 +137,6 @@ void do_bootm_linux(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[], rd_len = images->rd_end - images->rd_start; if (rd_len) { - - /* Reserve the space used by PROM and stack. This is done - * to avoid that the RAM image is copied over stack or - * PROM. - */ - lmb_reserve(lmb, CFG_RELOC_MONITOR_BASE, CFG_RAM_END); - ret = boot_ramdisk_high(lmb, images->rd_start, rd_len, &initrd_start, &initrd_end); if (ret) { @@ -146,7 +150,7 @@ void do_bootm_linux(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[], * Set INITRD Image address relative to RAM Start */ linux_hdr->hdr_input.ver_0203.sparc_ramdisk_image = - initrd_start - CFG_RAM_BASE; + initrd_start - CONFIG_SYS_RAM_BASE; linux_hdr->hdr_input.ver_0203.sparc_ramdisk_size = rd_len; /* Clear READ ONLY flag if set to non-zero */ linux_hdr->hdr_input.ver_0203.root_flags = 1; @@ -175,12 +179,11 @@ void do_bootm_linux(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[], * From now on the only code in u-boot that will be * executed is the PROM code. */ - kernel(kernel_arg_promvec, (void *)ep); + kernel(kernel_arg_promvec, (void *)images->ep); /* It will never come to this... */ while (1) ; error: - do_reset(cmdtp, flag, argc, argv); - return; + return 1; }