]> git.sur5r.net Git - u-boot/blobdiff - lib_sparc/bootm.c
tsec: Add support for BCM5482S PHY
[u-boot] / lib_sparc / bootm.c
index f3abdcfdc412d416e69a5a2c92f2b5a738393952..c62cf57d80b25584187c777c09d595d342714b25 100644 (file)
 #include <asm/byteorder.h>
 #include <asm/prom.h>
 #include <asm/cache.h>
+#include <image.h>
 
 #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;
 }