diff options
author | Kim Phillips <kim.phillips@freescale.com> | 2013-01-25 11:22:16 -0600 |
---|---|---|
committer | Kim Phillips <kim.phillips@freescale.com> | 2013-01-25 11:22:16 -0600 |
commit | 38a510d1e5becc97eb0e5fa4603e7386d80b88f6 (patch) | |
tree | b36f04c38c2d3cb7f1e9365fed246cefca76a9db | |
parent | a6187dccd813920524987792e49ef2feffb213e6 (diff) | |
parent | 54b08efcf2f4ff532ce99c53f341a59c193331a5 (diff) | |
download | u-boot-imx-38a510d1e5becc97eb0e5fa4603e7386d80b88f6.zip u-boot-imx-38a510d1e5becc97eb0e5fa4603e7386d80b88f6.tar.gz u-boot-imx-38a510d1e5becc97eb0e5fa4603e7386d80b88f6.tar.bz2 |
Merge branch 'master' of git://git.denx.de/u-boot
-rw-r--r-- | arch/mips/lib/bootm.c | 51 | ||||
-rw-r--r-- | doc/README.mips | 11 | ||||
-rw-r--r-- | doc/README.qemu-mips (renamed from board/qemu-mips/README) | 30 |
3 files changed, 63 insertions, 29 deletions
diff --git a/arch/mips/lib/bootm.c b/arch/mips/lib/bootm.c index 608c1a7..a36154a 100644 --- a/arch/mips/lib/bootm.c +++ b/arch/mips/lib/bootm.c @@ -43,27 +43,12 @@ 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); -int do_bootm_linux(int flag, int argc, char * const argv[], - bootm_headers_t *images) +static void boot_prep_linux(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 @@ -96,11 +81,45 @@ int do_bootm_linux(int flag, int argc, char * const argv[], cp = getenv("eth1addr"); if (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 */ printf("\nStarting kernel ...\n\n"); 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 */ return 1; diff --git a/doc/README.mips b/doc/README.mips index 85dea40..f4f770b 100644 --- a/doc/README.mips +++ b/doc/README.mips @@ -16,11 +16,6 @@ Toolchains 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 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 initialized in board specific assembler language before the cache 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 diff --git a/board/qemu-mips/README b/doc/README.qemu-mips index 9fd97e1..1fdfbab 100644 --- a/board/qemu-mips/README +++ b/doc/README.qemu-mips @@ -6,8 +6,8 @@ http://www.nongnu.org/qemu/ Limitations & comments ---------------------- -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 the "-M mips" configuration of qemu: serial,NE2000,IDE. +Supports little and big endian as well as 32 bit and 64 bit. Derived from au1x00 with a lot of things cut out. Supports emulated flash (patch Jean-Christophe PLAGNIOL-VILLARD) with @@ -21,19 +21,33 @@ Notes for the Qemu MIPS port I) Example usage: -# ln -s u-boot.bin mips_bios.bin -start it: -qemu-system-mips -L . /dev/null -nographic +Using u-boot.bin as ROM (replaces Qemu monitor): -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 create image: # dd of=flash bs=1k count=4k if=/dev/zero # dd of=flash bs=1k conv=notrunc if=u-boot.bin -start it: -# qemu-system-mips -M mips -pflash flash -monitor null -nographic +start it (see above): +# qemu-system-mips[64][el] [-cpu MIPS64R2-generic] -M mips -pflash flash -nographic 2) Download kernel + initrd |