#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);
/* 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 load;
ulong initrd_start, initrd_end;
ulong rd_len;
unsigned int data, len, checksum;
unsigned int initrd_addr, kernend;
void (*kernel) (struct linux_romvec *, void *);
- struct lmb *lmb = images->lmb;
+ struct lmb *lmb = &images->lmb;
int ret;
- if (images->legacy_hdr_valid) {
- load = image_get_load(images->legacy_hdr_os);
-#if defined(CONFIG_FIT)
- } else if (images->fit_uname_os) {
- ret = fit_image_get_load(images->fit_hdr_os,
- images->fit_noffset_os, &load);
- if (ret) {
- puts("Can't get load address property!\n");
- goto error;
- }
-#endif
- } else {
- puts("Could not find kernel entry point!\n");
- goto error;
- }
+ if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
+ return 1;
/* Get virtual address of kernel start */
- linux_hdr = (void *)load;
+ linux_hdr = (void *)images->os.load;
/* */
kernel = (void (*)(struct linux_romvec *, void *))images->ep;
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) {
* 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;
* 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;
}