X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=lib_mips%2Fbootm.c;h=54af24cba3f7cd8af0ed843e72a2399ae07e0ce2;hb=ab68f4dd193053c0ba395af15b154caca35e99f3;hp=39869c18008bee9d9ce381290bb31b05b0700074;hpb=75fa002c47171b73fb4c1f2c2fe4d6391c136276;p=karo-tx-uboot.git diff --git a/lib_mips/bootm.c b/lib_mips/bootm.c index 39869c1800..54af24cba3 100644 --- a/lib_mips/bootm.c +++ b/lib_mips/bootm.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include @@ -43,33 +43,18 @@ static int linux_env_idx; static void linux_params_init (ulong start, char * commandline); static void linux_env_set (char * env_name, char * env_val); -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; void (*theKernel) (int, char **, char **, int *); char *commandline = getenv ("bootargs"); char env_buf[12]; + char *cp; - /* 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) { - fit_unsupported_reset ("MIPS linux bootm"); - do_reset (cmdtp, flag, argc, argv); -#endif - } else { - puts ("Could not find kernel entry point!\n"); - do_reset (cmdtp, flag, argc, argv); - } - theKernel = (void (*)(int, char **, char **, int *))ep; + if ((flag != 0) && (flag != BOOTM_STATE_OS_GO)) + return 1; - get_ramdisk (cmdtp, flag, argc, argv, images, - IH_ARCH_MIPS, &initrd_start, &initrd_end); + /* find kernel entry point */ + theKernel = (void (*)(int, char **, char **, int *))images->ep; show_boot_progress (15); @@ -81,23 +66,19 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[], linux_params_init (UNCACHED_SDRAM (gd->bd->bi_boot_params), commandline); #ifdef CONFIG_MEMSIZE_IN_BYTES - sprintf (env_buf, "%lu", gd->ram_size); -#ifdef DEBUG - printf ("## Giving linux memsize in bytes, %lu\n", gd->ram_size); -#endif + sprintf (env_buf, "%lu", (ulong)gd->ram_size); + debug ("## Giving linux memsize in bytes, %lu\n", (ulong)gd->ram_size); #else - sprintf (env_buf, "%lu", gd->ram_size >> 20); -#ifdef DEBUG - printf ("## Giving linux memsize in MB, %lu\n", gd->ram_size >> 20); -#endif + sprintf (env_buf, "%lu", (ulong)(gd->ram_size >> 20)); + debug ("## Giving linux memsize in MB, %lu\n", (ulong)(gd->ram_size >> 20)); #endif /* CONFIG_MEMSIZE_IN_BYTES */ linux_env_set ("memsize", env_buf); - sprintf (env_buf, "0x%08X", (uint) UNCACHED_SDRAM (initrd_start)); + sprintf (env_buf, "0x%08X", (uint) UNCACHED_SDRAM (images->rd_start)); linux_env_set ("initrd_start", env_buf); - sprintf (env_buf, "0x%X", (uint) (initrd_end - initrd_start)); + sprintf (env_buf, "0x%X", (uint) (images->rd_end - images->rd_start)); linux_env_set ("initrd_size", env_buf); sprintf (env_buf, "0x%08X", (uint) (gd->bd->bi_flashstart)); @@ -106,13 +87,22 @@ void do_bootm_linux (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[], sprintf (env_buf, "0x%X", (uint) (gd->bd->bi_flashsize)); linux_env_set ("flash_size", env_buf); - if (!images->autostart) - return ; + cp = getenv("ethaddr"); + if (cp != NULL) { + linux_env_set("ethaddr", cp); + } + + cp = getenv("eth1addr"); + if (cp != NULL) { + linux_env_set("eth1addr", cp); + } /* we assume that the kernel is in place */ printf ("\nStarting kernel ...\n\n"); theKernel (linux_argc, linux_argv, linux_env, 0); + /* does not return */ + return 1; } static void linux_params_init (ulong start, char *line)