]> git.ipfire.org Git - thirdparty/u-boot.git/blobdiff - cpu/arm920t/start.S
* Patch by Gleb Natapov, 19 Sep 2003:
[thirdparty/u-boot.git] / cpu / arm920t / start.S
index 17c5f86bc367ebb572d36253f92f64dd00b96760..d640942d8aaaec53744038eef137125a54e74c94 100644 (file)
@@ -91,14 +91,6 @@ _armboot_end_data:
 _armboot_end:
        .word armboot_end
 
-/*
- * _armboot_real_end is the first usable RAM address behind armboot
- * and the various stacks
- */
-.globl _armboot_real_end
-_armboot_real_end:
-       .word 0x0badc0de
-
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
 .globl IRQ_STACK_START
@@ -171,28 +163,33 @@ reset:
        bl      cpu_init_crit
 #endif
 
-relocate:
-       /*
-        * relocate armboot to RAM
-        */
-       adr     r0, _start              /* r0 <- current position of code */
+relocate:                              /* relocate U-Boot to RAM           */
+       adr     r0, _start              /* r0 <- current position of code   */
+       ldr     r1, _TEXT_BASE          /* test if we run from flash or RAM */
+       cmp     r0, r1                  /* don't reloc during debug         */
+       beq     stack_setup
+
        ldr     r2, _armboot_start
        ldr     r3, _armboot_end
-       sub     r2, r3, r2              /* r2 <- size of armboot */
-       ldr     r1, _TEXT_BASE          /* r1 <- destination address */
-       add     r2, r0, r2              /* r2 <- source end address */
+       sub     r2, r3, r2              /* r2 <- size of armboot            */
+       add     r2, r0, r2              /* r2 <- source end address         */
 
-       /*
-        * r0 = source address
-        * r1 = target address
-        * r2 = source end address
-        */
 copy_loop:
-       ldmia   r0!, {r3-r10}
-       stmia   r1!, {r3-r10}
-       cmp     r0, r2
+       ldmia   r0!, {r3-r10}           /* copy from source address [r0]    */
+       stmia   r1!, {r3-r10}           /* copy to   target address [r1]    */
+       cmp     r0, r2                  /* until source end addreee [r2]    */
        ble     copy_loop
 
+       /* Set up the stack                                                 */
+stack_setup:
+       ldr     r0, _TEXT_BASE          /* upper 128 KiB: relocated uboot   */
+       sub     r0, r0, #CFG_MALLOC_LEN /* malloc area                      */
+       sub     r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */
+#ifdef CONFIG_USE_IRQ
+       sub     r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
+#endif
+       sub     sp, r0, #12             /* leave 3 words for abort-stack    */
+
 #if 0
        /* try doing this stuff after the relocation */
        ldr     r0, =pWTCON
@@ -214,11 +211,6 @@ copy_loop:
        /* END stuff after relocation */
 #endif
 
-       /* set up the stack */
-       ldr     r0, _armboot_end
-       add     r0, r0, #CONFIG_STACKSIZE
-       sub     sp, r0, #12             /* leave 3 words for abort-stack */
-
        ldr     pc, _start_armboot
 
 _start_armboot:        .word start_armboot