]> git.sur5r.net Git - u-boot/blobdiff - cpu/ppc4xx/start.S
ppc4xx: Add Sequoia RAM-booting target
[u-boot] / cpu / ppc4xx / start.S
index e68cf9b6db1856d8efaa8c0921e357ad785386cb..ac96fc28f77522098123822b0c185cdabe9c9cf3 100644 (file)
@@ -63,6 +63,7 @@
  */
 #include <config.h>
 #include <ppc4xx.h>
+#include <timestamp.h>
 #include <version.h>
 
 #define _LINUX_CONFIG_H 1      /* avoid reading Linux autoconf.h file  */
        bl      board_init_f
 #endif
 
+#if defined(CONFIG_SYS_RAMBOOT)
+       /*
+        * 4xx RAM-booting U-Boot image is started from offset 0
+        */
+       .text
+       bl      _start_440
+#endif
+
 /*
  * 440 Startup -- on reset only the top 4k of the effective
  * address space is mapped in by an entry in the instruction
@@ -443,10 +452,17 @@ skip_debug_init:
        addis   r0,0,0x0000
        li      r1,0x003f       /* 64 TLB entries */
        mtctr   r1
-rsttlb:        tlbwe   r0,r1,0x0000    /* Invalidate all entries (V=0)*/
-       tlbwe   r0,r1,0x0001
-       tlbwe   r0,r1,0x0002
-       subi    r1,r1,0x0001
+       li      r4,0            /* Start with TLB #0 */
+rsttlb:
+#ifdef CONFIG_SYS_RAMBOOT
+       tlbre   r3,r4,0         /* Read contents from TLB word #0 to get EPN */
+       rlwinm. r3,r3,0,0xfffffc00      /* Mask EPN */
+       beq     tlbnxt          /* Skip EPN=0 TLB, this is the SDRAM TLB */
+#endif
+       tlbwe   r0,r4,0         /* Invalidate all entries (V=0)*/
+       tlbwe   r0,r4,1
+       tlbwe   r0,r4,2
+tlbnxt:        addi    r4,r4,1         /* Next TLB */
        bdnz    rsttlb
 
        /*----------------------------------------------------------------*/
@@ -475,7 +491,13 @@ rsttlb:    tlbwe   r0,r1,0x0000    /* Invalidate all entries (V=0)*/
        li      r4,0            /* TLB # */
 
        addi    r5,r5,-4
-1:     lwzu    r0,4(r5)
+1:
+#ifdef CONFIG_SYS_RAMBOOT
+       tlbre   r3,r4,0         /* Read contents from TLB word #0 */
+       rlwinm. r3,r3,0,0x00000200      /* Mask V (valid) bit */
+       bne     tlbnx2          /* Skip V=1 TLB, this is the SDRAM TLB */
+#endif
+       lwzu    r0,4(r5)
        cmpwi   r0,0
        beq     2f              /* 0 marks end */
        lwzu    r1,4(r5)
@@ -483,7 +505,7 @@ rsttlb:     tlbwe   r0,r1,0x0000    /* Invalidate all entries (V=0)*/
        tlbwe   r0,r4,0         /* TLB Word 0 */
        tlbwe   r1,r4,1         /* TLB Word 1 */
        tlbwe   r2,r4,2         /* TLB Word 2 */
-       addi    r4,r4,1         /* Next TLB */
+tlbnx2:        addi    r4,r4,1         /* Next TLB */
        bdnz    1b
 
        /*----------------------------------------------------------------*/
@@ -510,7 +532,7 @@ rsttlb:     tlbwe   r0,r1,0x0000    /* Invalidate all entries (V=0)*/
        .globl  version_string
 version_string:
        .ascii U_BOOT_VERSION
-       .ascii " (", __DATE__, " - ", __TIME__, ")"
+       .ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
        .ascii CONFIG_IDENT_STRING, "\0"
 
        . = EXC_OFF_SYS_RESET
@@ -726,7 +748,7 @@ _start:
        ori     r2,r2,0xffff
        mfdcr   r1,ISRAM1_DPC
        and     r1,r1,r2                /* Disable parity check */
-       mtdcr   ISRAM1_DPC,r1   
+       mtdcr   ISRAM1_DPC,r1
        mfdcr   r1,ISRAM1_PMEG
        and     r1,r1,r2                /* Disable pwr mgmt */
        mtdcr   ISRAM1_PMEG,r1