static void boot_prep_linux(bootm_headers_t *images) { char *commandline = getenv("bootargs"); char env_buf[12]; char *cp; #ifdef DEBUG printf("## Transferring control to Linux (at address %08lx) ...\n", (ulong) theKernel); #endif #ifndef CONFIG_OCTEON linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), commandline); #else linux_params_init (gd->bd->bi_boot_params, commandline); #endif #ifdef CONFIG_MEMSIZE_IN_BYTES 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", (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); #ifndef CONFIG_OCTEON sprintf(env_buf, "0x%08X", (uint) UNCACHED_SDRAM(images->rd_start)); #else sprintf (env_buf, "0x%08X", (uint)images->rd_start); #endif linux_env_set("initrd_start", env_buf); 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)); linux_env_set("flash_start", env_buf); sprintf(env_buf, "0x%X", (uint) (gd->bd->bi_flashsize)); linux_env_set("flash_size", env_buf); cp = getenv("ethaddr"); if (cp) linux_env_set("ethaddr", cp); cp = getenv("eth1addr"); if (cp) linux_env_set("eth1addr", cp); }
int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *images) { void (*theKernel) (int, char **, char **, int *); char *commandline = getenv("bootargs"); char env_buf[12]; char *cp; if ((flag != 0) && (flag != BOOTM_STATE_OS_GO)) return 1; /* find kernel entry point */ theKernel = (void (*)(int, char **, char **, int *))images->ep; bootstage_mark(BOOTSTAGE_ID_RUN_OS); #ifdef DEBUG printf("## Transferring control to Linux (at address %08lx) ...\n", (ulong) theKernel); #endif linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), commandline); #ifdef CONFIG_MEMSIZE_IN_BYTES 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", (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(images->rd_start)); linux_env_set("initrd_start", env_buf); 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)); linux_env_set("flash_start", env_buf); sprintf(env_buf, "0x%X", (uint) (gd->bd->bi_flashsize)); linux_env_set("flash_size", env_buf); cp = getenv("ethaddr"); if (cp) linux_env_set("ethaddr", cp); cp = getenv("eth1addr"); if (cp) 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; }