[PATCH] iMX31: Reducing start.S size to let boot from NAND

Alan Carvalho de Assis alan.assis at freescale.com
Mon Oct 6 00:57:22 CEST 2008


iMX31 NAND Flash Controller has a 2KB RAM buffer, but the
current start.S file is too much big to let NAND copy routine
to fit in. This patch will reduce the start.S when booting from
NAND Flash.

Signed-off-by: Alan Carvalho de Assis <alan.assis at freescale.com>
---
 cpu/arm1136/start.S |   24 ++++++++++++++++++++++--
 1 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/cpu/arm1136/start.S b/cpu/arm1136/start.S
index 51b664d..b24fe41 100644
--- a/cpu/arm1136/start.S
+++ b/cpu/arm1136/start.S
@@ -32,6 +32,15 @@
 #include <version.h>
 .globl _start
 _start: b	reset
+#ifdef CONFIG_BOOT_FROM_NAND
+	b	.	/* Undefined Instruction */
+	b	.	/* Software Interrupt    */
+	b	.	/* Prefetch Abort        */
+	b	.	/* Data Abort            */
+	b	.	/* Reserved              */
+	b	.	/* IRQ                   */
+	b	.	/* FIQ                   */
+#else
 #ifdef CONFIG_ONENAND_IPL
 	ldr	pc, _hang
 	ldr	pc, _hang
@@ -68,6 +77,7 @@ _irq:			.word irq
 _fiq:			.word fiq
 _pad:			.word 0x12345678 /* now 16*4=64 */
 #endif	/* CONFIG_ONENAND_IPL */
+#endif	/* CONFIG_BOOT_FROM_NAND */
 .global _end_vect
 _end_vect:

@@ -151,6 +161,7 @@ next:
 	bl  cpu_init_crit
 #endif

+_cstartup:
 #ifndef CONFIG_SKIP_RELOCATE_UBOOT
 relocate:				/* relocate U-Boot to RAM	    */
 	adr	r0, _start		/* r0 <- current position of code   */
@@ -239,12 +250,18 @@ cpu_init_crit:
 	 * Jump to board specific initialization... The Mask ROM will have
already initialized
 	 * basic memory.  Go here to bump up clock rate and handle wake up conditions.
 	 */
+#ifdef CONFIG_BOOT_FROM_NAND
+	ldr	sp, =CFG_INTERNAL_SRAM_STACK	/* Initial stack point in the SRAM	*/
+	ldr	r0, =_cstartup	/* load the return address  		*/
+	mov	lr, r0		/* set the return address after remap	*/
+	b	lowlevel_init	/* relative branch enables remap	*/
+#endif
 	mov	ip, lr		/* persevere link reg across call */
 	bl	lowlevel_init	/* go setup pll,mux,memory */
 	mov	lr, ip		/* restore link */
 	mov	pc, lr		/* back to my caller */

-#ifndef CONFIG_ONENAND_IPL
+#if !defined(CONFIG_ONENAND_IPL) && !defined(CONFIG_BOOT_FROM_NAND)
 /*
  *************************************************************************
  *
@@ -357,11 +374,12 @@ cpu_init_crit:
 	.macro get_fiq_stack			@ setup FIQ stack
 	ldr	sp, FIQ_STACK_START
 	.endm
-#endif	/* CONFIG_ONENAND_IPL */
+#endif	/* CONFIG_ONENAND_IPL/CONFIG_BOOT_FROM_NAND */

 /*
  * exception handlers
  */
+#ifndef CONFIG_BOOT_FROM_NAND
 #ifdef CONFIG_ONENAND_IPL
 	.align	5
 do_hang:
@@ -436,3 +454,5 @@ arm1136_cache_flush:
 		mcr	p15, 0, r1, c7, c5, 0	@ invalidate I cache
 		mov	pc, lr			@ back to caller
 #endif	/* CONFIG_ONENAND_IPL */
+#endif	/* CONFIG_BOOT_FROM_NAND */
+
-- 
1.5.4.3


More information about the U-Boot mailing list