Auto-detect whether we're booting from RAM or NAND, and act accordingly. This allows us to use the same u-boot binary for all boot modes. include/configs/neo1973.h: introduced new config option CONFIG_LL_INIT_NAND_ONLY to perform low-level initialization only when booting from NAND include/configs/neo1973.h: got rid of BUILD_FOR_RAM cpu/arm920t/start.S: detect if we need to boot from NAND at run time (i.e., if we're running at address 0) - Werner Almesberger Index: u-boot/cpu/arm920t/start.S =================================================================== --- u-boot.orig/cpu/arm920t/start.S +++ u-boot/cpu/arm920t/start.S @@ -157,18 +157,26 @@ str r1, [r0] #endif /* CONFIG_S3C2400 || CONFIG_S3C2410 */ - /* - * we do sys-critical inits only at reboot, - * not when booting from ram! - */ #ifndef CONFIG_SKIP_LOWLEVEL_INIT +#ifndef CONFIG_LL_INIT_NAND_ONLY bl cpu_init_crit #endif +#endif #ifndef CONFIG_SKIP_RELOCATE_UBOOT -#ifndef CONFIG_S3C2410_NAND_BOOT -relocate: /* relocate U-Boot to RAM */ adr r0, _start /* r0 <- current position of code */ + +#ifdef CONFIG_S3C2410_NAND_BOOT + /* are we running from NAND ? */ +#define BWSCON 0x48000000 + ldr r1, =BWSCON /* Z = CPU booted from NAND */ + ldr r1, [r1] + tst r1, #6 /* BWSCON[2:1] = OM[1:0] */ + teqeq r0, #0 /* Z &= running at address 0 */ + beq nand_load +#endif /* CONFIG_S3C2410_NAND_BOOT */ + +relocate: /* relocate U-Boot to RAM */ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */ cmp r0, r1 /* don't reloc during debug */ beq done_relocate @@ -188,10 +196,13 @@ ldr pc, _done_relocate /* jump to relocated code */ _done_relocate: .word done_relocate -done_relocate: -#else /* NAND_BOOT */ -relocate: -copy_myself: + +#ifdef CONFIG_S3C2410_NAND_BOOT +nand_load: +#if !defined(CONFIG_SKIP_LOWLEVEL_INIT) && defined(CONFIG_LL_INIT_NAND_ONLY) + bl cpu_init_crit +#endif + /* mov r10, lr */ @ reset NAND @@ -275,7 +286,8 @@ #endif 1: b 1b done_nand_read: -#endif /* NAND_BOOT */ +#endif /* CONFIG_S3C2410_NAND_BOOT */ +done_relocate: #endif /* CONFIG_SKIP_RELOCATE_UBOOT */ /* Set up the stack */ Index: u-boot/include/configs/neo1973_gta01.h =================================================================== --- u-boot.orig/include/configs/neo1973_gta01.h +++ u-boot/include/configs/neo1973_gta01.h @@ -26,14 +26,10 @@ #ifndef __CONFIG_H #define __CONFIG_H -#if defined(BUILD_FOR_RAM) -/* If we want to start u-boot from inside RAM */ -#define CONFIG_SKIP_LOWLEVEL_INIT 1 -#else -/* we want to start u-boot directly from within NAND flash */ +/* we want to be able to start u-boot directly from within NAND flash */ +#define CONFIG_LL_INIT_NAND_ONLY #define CONFIG_S3C2410_NAND_BOOT 1 #define CONFIG_S3C2410_NAND_SKIP_BAD 1 -#endif #define CFG_UBOOT_SIZE 0x40000 /* size of u-boot, for NAND loading */