help: Correct syntax of nandecc help output.
[oweals/u-boot.git] / cpu / mpc83xx / start.S
index 792b2c8b2a510450bfa117d58fcc56ad44a659d5..ee4b8624aaa58bdf47a9742ae9b25cf02b1c17de 100644 (file)
@@ -109,6 +109,45 @@ version_string:
        .ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
        .ascii " ", CONFIG_IDENT_STRING, "\0"
 
+       .align 2
+
+       .globl enable_addr_trans
+enable_addr_trans:
+       /* enable address translation */
+       mfmsr   r5
+       ori     r5, r5, (MSR_IR | MSR_DR)
+       mtmsr   r5
+       isync
+       blr
+
+       .globl disable_addr_trans
+disable_addr_trans:
+       /* disable address translation */
+       mflr    r4
+       mfmsr   r3
+       andi.   r0, r3, (MSR_IR | MSR_DR)
+       beqlr
+       andc    r3, r3, r0
+       mtspr   SRR0, r4
+       mtspr   SRR1, r3
+       rfi
+
+       .globl get_pvr
+get_pvr:
+       mfspr   r3, PVR
+       blr
+
+       .globl  ppcDWstore
+ppcDWstore:
+       lfd     1, 0(r4)
+       stfd    1, 0(r3)
+       blr
+
+       .globl  ppcDWload
+ppcDWload:
+       lfd     1, 0(r3)
+       stfd    1, 0(r4)
+       blr
 
 #ifndef CONFIG_DEFAULT_IMMR
 #error CONFIG_DEFAULT_IMMR must be defined
@@ -161,9 +200,23 @@ boot_cold: /* time t 3 */
        nop
 boot_warm: /* time t 5 */
        mfmsr   r5                      /* save msr contents    */
+
+       /* 83xx manuals prescribe a specific sequence for updating IMMRBAR. */
+       bl      1f
+1:     mflr    r7
+
        lis     r3, CONFIG_SYS_IMMR@h
        ori     r3, r3, CONFIG_SYS_IMMR@l
+
+       lwz     r6, IMMRBAR(r4)
+       isync
+
        stw     r3, IMMRBAR(r4)
+       lwz     r6, 0(r7)               /* Arbitrary external load */
+       isync
+
+       lwz     r6, IMMRBAR(r3)
+       isync
 
        /* Initialise the E300 processor core           */
        /*------------------------------------------*/
@@ -173,9 +226,7 @@ boot_warm: /* time t 5 */
         * is loaded.  Wait for the rest before branching
         * to another flash page.
         */
-       addi    r7, r3, 0x50b0
-1:     dcbi    0, r7
-       lwz     r6, 0(r7)
+1:     lwz     r6, 0x50b0(r3)
        andi.   r6, r6, 1
        beq     1b
 #endif
@@ -698,27 +749,6 @@ setup_bats:
 
        blr
 
-       .globl enable_addr_trans
-enable_addr_trans:
-       /* enable address translation */
-       mfmsr   r5
-       ori     r5, r5, (MSR_IR | MSR_DR)
-       mtmsr   r5
-       isync
-       blr
-
-       .globl disable_addr_trans
-disable_addr_trans:
-       /* disable address translation */
-       mflr    r4
-       mfmsr   r3
-       andi.   r0, r3, (MSR_IR | MSR_DR)
-       beqlr
-       andc    r3, r3, r0
-       mtspr   SRR0, r4
-       mtspr   SRR1, r3
-       rfi
-
 /* Cache functions.
  *
  * Note: requires that all cache bits in
@@ -796,23 +826,6 @@ flush_dcache:
        b       1b
 2:     blr
 
-       .globl get_pvr
-get_pvr:
-       mfspr   r3, PVR
-       blr
-
-       .globl  ppcDWstore
-ppcDWstore:
-       lfd     1, 0(r4)
-       stfd    1, 0(r3)
-       blr
-
-       .globl  ppcDWload
-ppcDWload:
-       lfd     1, 0(r3)
-       stfd    1, 0(r4)
-       blr
-
 /*-------------------------------------------------------------------*/
 
 /*
@@ -944,16 +957,18 @@ in_ram:
        sub     r11,r3,r11
        addi    r3,r3,-4
 1:     lwzu    r0,4(r3)
+       cmpwi   r0,0
+       beq-    2f
        add     r0,r0,r11
        stw     r0,0(r3)
-       bdnz    1b
+2:     bdnz    1b
 
 #ifndef CONFIG_NAND_SPL
        /*
         * Now adjust the fixups and the pointers to the fixups
         * in case we need to move ourselves again.
         */
-2:     li      r0,__fixup_entries@sectoff@l
+       li      r0,__fixup_entries@sectoff@l
        lwz     r3,GOT(_FIXUP_TABLE_)
        cmpwi   r0,0
        mtctr   r0