
Hi Magnus,
On 2/6/2011 10:03 AM, Magnus Lilja wrote: ...
I've done some testing now and ended up comparing start.S for ARM1136 with ARM926EJS since the latter is used on the Karo TX25 board which seems to have been updated and also boots from NAND.
Thanks for looking into this.
The result is that applying the following patch on top of Fabios patch makes the i.MX31 PDK boot from NAND. Booting Linux from TFTP works nicely. However the first few lines of output from U-boot is missing, only the "NAND: 256 MB" line is shown. I haven't tried to understand how booting works nowadays and why these changes work, perhaps someone with more insight in the mechanisms can figure out the correct assembler code.
I think that the missing lines can be fixed by using a similar approach as to this patch: http://git.denx.de/?p=u-boot.git;a=commitdiff;h=877eb0f91543dc5bca385bb6d224...
I have no idea if this breaks other boards but at least it's start for further work. I tried it on the imx31 litekit (which boots from NOR) but that board doesn't seem to boot even before applying Fabios patch, I'll see if I can figure out why that board is broken now. Don't know when though.
I will let others comment about the changes you did in arch/arm/cpu/arm1136/start.S Will also try it later today.
Thanks,
Fabio Estevam
Regards, Magnus Lilja
diff --git a/arch/arm/cpu/arm1136/start.S b/arch/arm/cpu/arm1136/start.S index 12545c2..7d75ecf 100644 --- a/arch/arm/cpu/arm1136/start.S +++ b/arch/arm/cpu/arm1136/start.S @@ -163,6 +163,9 @@ call_board_init_f: bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ ldr r0,=0x00000000
+#if 1
bl board_init_f
+#else #ifdef CONFIG_NAND_SPL bl nand_boot #else @@ -172,6 +175,7 @@ call_board_init_f: bl board_init_f #endif /* CONFIG_ONENAND_IPL */ #endif /* CONFIG_NAND_SPL */ +#endif
/*------------------------------------------------------------------------------*/
@@ -266,11 +270,19 @@ clbss_l:str r2, [r0] /* clear loop... */
- initialization, now running from RAM.
*/ #ifdef CONFIG_NAND_SPL +#if 1
ldr r0, _nand_boot_ofs
mov pc, r0
+_nand_boot_ofs:
.word nand_boot
+#else ldr r0, _nand_boot_ofs adr r1, _start add pc, r0, r1 _nand_boot_ofs: .word nand_boot - _start +#endif #else jump_2_ram: ldr r0, _board_init_r_ofs