Merge branch 'master' of git://git.denx.de/u-boot

This commit is contained in:
Kim Phillips 2013-01-25 11:22:16 -06:00
commit 38a510d1e5
3 changed files with 63 additions and 29 deletions

View file

@ -43,27 +43,12 @@ static int linux_env_idx;
static void linux_params_init(ulong start, char *commandline); static void linux_params_init(ulong start, char *commandline);
static void linux_env_set(char *env_name, char *env_val); static void linux_env_set(char *env_name, char *env_val);
int do_bootm_linux(int flag, int argc, char * const argv[], static void boot_prep_linux(bootm_headers_t *images)
bootm_headers_t *images)
{ {
void (*theKernel) (int, char **, char **, int *);
char *commandline = getenv("bootargs"); char *commandline = getenv("bootargs");
char env_buf[12]; char env_buf[12];
char *cp; 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); linux_params_init(UNCACHED_SDRAM(gd->bd->bi_boot_params), commandline);
#ifdef CONFIG_MEMSIZE_IN_BYTES #ifdef CONFIG_MEMSIZE_IN_BYTES
@ -96,11 +81,45 @@ int do_bootm_linux(int flag, int argc, char * const argv[],
cp = getenv("eth1addr"); cp = getenv("eth1addr");
if (cp) if (cp)
linux_env_set("eth1addr", cp); linux_env_set("eth1addr", cp);
}
static void boot_jump_linux(bootm_headers_t *images)
{
void (*theKernel) (int, char **, char **, int *);
/* find kernel entry point */
theKernel = (void (*)(int, char **, char **, int *))images->ep;
debug("## Transferring control to Linux (at address %08lx) ...\n",
(ulong) theKernel);
bootstage_mark(BOOTSTAGE_ID_RUN_OS);
/* we assume that the kernel is in place */ /* we assume that the kernel is in place */
printf("\nStarting kernel ...\n\n"); printf("\nStarting kernel ...\n\n");
theKernel(linux_argc, linux_argv, linux_env, 0); theKernel(linux_argc, linux_argv, linux_env, 0);
}
int do_bootm_linux(int flag, int argc, char * const argv[],
bootm_headers_t *images)
{
/* No need for those on MIPS */
if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
return -1;
if (flag & BOOTM_STATE_OS_PREP) {
boot_prep_linux(images);
return 0;
}
if (flag & BOOTM_STATE_OS_GO) {
boot_jump_linux(images);
return 0;
}
boot_prep_linux(images);
boot_jump_linux(images);
/* does not return */ /* does not return */
return 1; return 1;

View file

@ -16,11 +16,6 @@ Toolchains
Known Issues Known Issues
------------ ------------
* Little endian build problem
If use non-ELDK toolchains, -EB will be set to CPPFLAGS. Therefore all
objects will be generated in big-endian format.
* Cache incoherency issue caused by do_bootelf_exec() at cmd_elf.c * Cache incoherency issue caused by do_bootelf_exec() at cmd_elf.c
Cache will be disabled before entering the loaded ELF image without Cache will be disabled before entering the loaded ELF image without
@ -55,3 +50,9 @@ TODOs
* Due to cache initialization issues, the DRAM on board must be * Due to cache initialization issues, the DRAM on board must be
initialized in board specific assembler language before the cache init initialized in board specific assembler language before the cache init
code is run -- that is, initialize the DRAM in lowlevel_init(). code is run -- that is, initialize the DRAM in lowlevel_init().
* get rid of CONFIG_MANUAL_RELOC
* centralize/share more CPU code of MIPS32, MIPS64 and XBurst
* support Qemu Malta

View file

@ -6,8 +6,8 @@ http://www.nongnu.org/qemu/
Limitations & comments Limitations & comments
---------------------- ----------------------
Supports the "-m mips" configuration of qemu: serial,NE2000,IDE. Supports the "-M mips" configuration of qemu: serial,NE2000,IDE.
Support is big endian only for now (or at least this is what I tested). Supports little and big endian as well as 32 bit and 64 bit.
Derived from au1x00 with a lot of things cut out. Derived from au1x00 with a lot of things cut out.
Supports emulated flash (patch Jean-Christophe PLAGNIOL-VILLARD) with Supports emulated flash (patch Jean-Christophe PLAGNIOL-VILLARD) with
@ -21,19 +21,33 @@ Notes for the Qemu MIPS port
I) Example usage: I) Example usage:
# ln -s u-boot.bin mips_bios.bin Using u-boot.bin as ROM (replaces Qemu monitor):
start it:
qemu-system-mips -L . /dev/null -nographic
or 32 bit, big endian:
# make qemu_mips
# qemu-system-mips -M mips -bios u-boot.bin -nographic
32 bit, little endian:
# make qemu_mipsel
# qemu-system-mipsel -M mips -bios u-boot.bin -nographic
64 bit, big endian:
# make qemu_mips64
# qemu-system-mips64 -cpu MIPS64R2-generic -M mips -bios u-boot.bin -nographic
64 bit, little endian:
# make qemu_mips64el
# qemu-system-mips64el -cpu MIPS64R2-generic -M mips -bios u-boot.bin -nographic
or using u-boot.bin from emulated flash:
if you use a qemu version after commit 4224 if you use a qemu version after commit 4224
create image: create image:
# dd of=flash bs=1k count=4k if=/dev/zero # dd of=flash bs=1k count=4k if=/dev/zero
# dd of=flash bs=1k conv=notrunc if=u-boot.bin # dd of=flash bs=1k conv=notrunc if=u-boot.bin
start it: start it (see above):
# qemu-system-mips -M mips -pflash flash -monitor null -nographic # qemu-system-mips[64][el] [-cpu MIPS64R2-generic] -M mips -pflash flash -nographic
2) Download kernel + initrd 2) Download kernel + initrd