]> git.sur5r.net Git - u-boot/blobdiff - cpu/mpc86xx/start.S
Merge branch 'mpc86xx'
[u-boot] / cpu / mpc86xx / start.S
index 12bf75b2e1a8a086970eb2965d7f4285f8fcd8fe..e537dcb329b8f213433c71dbc23d48a342f85c97 100644 (file)
@@ -74,7 +74,7 @@
  * r4 - 2nd arg to board_init(): boot flag
  */
        .text
-       .long   0x27051956              /* U-Boot Magic Number          */
+       .long   0x27051956              /* U-Boot Magic Number */
        .globl  version_string
 version_string:
        .ascii  U_BOOT_VERSION
@@ -92,7 +92,7 @@ _start:
 
        .globl  _start_warm
 _start_warm:
-       li      r21, BOOTFLAG_WARM      /* Software reboot              */
+       li      r21, BOOTFLAG_WARM      /* Software reboot */
        b       boot_warm
        sync
 
@@ -183,7 +183,7 @@ boot_cold:
 boot_warm:
 
        /* if this is a multi-core system we need to check which cpu
-        * this is, if it is not cpu 0 send the cpu to the linux reset 
+        * this is, if it is not cpu 0 send the cpu to the linux reset
         * vector */
 #if (CONFIG_NUM_CPUS > 1)
        mfspr   r0, MSSCR0
@@ -194,7 +194,7 @@ boot_warm:
 
        bl      secondary_cpu_setup
 #endif
-       
+
        /* disable everything */
 1:     li      r0, 0
        mtspr   HID0, r0
@@ -202,17 +202,17 @@ boot_warm:
        mtmsr   0
        bl      invalidate_bats
        sync
-       
+
 #ifdef CFG_L2
        /* init the L2 cache */
        addis   r3, r0, L2_INIT@h
        ori     r3, r3, L2_INIT@l
-       mtspr   l2cr, r3        
+       mtspr   l2cr, r3
        /* invalidate the L2 cache */
        bl      l2cache_invalidate
        sync
 #endif
-       
+
        /*
         * Calculate absolute address in FLASH and jump there
         *------------------------------------------------------*/
@@ -231,7 +231,7 @@ in_flash:
 
        /* enable extended addressing */
        bl      enable_ext_addr
-       
+
        /* setup the bats */
        bl      setup_bats
        sync
@@ -240,7 +240,7 @@ in_flash:
        /* setup ccsrbar */
        bl      setup_ccsrbar
 #endif
-       
+
        /* Fix for SMP linux - Changing arbitration to round-robin */
        lis     r3, CFG_CCSRBAR@h
        ori     r3, r3, 0x1000
@@ -279,7 +279,7 @@ in_flash:
        stw     r4, 0(r3)
        sync
 #endif
-#if 1  
+#if 1
        /* make sure timer enabled in guts register too */
        lis     r3, CFG_CCSRBAR@h
        oris    r3,r3, 0xE
@@ -289,7 +289,7 @@ in_flash:
        ori     r5,r5,0x5FFF
        and     r4,r4,r5
        stw     r4,0(r3)
-#endif 
+#endif
        /*
         * Cache must be enabled here for stack-in-cache trick.
         * This means we need to enable the BATS.
@@ -303,13 +303,13 @@ in_flash:
 
        /* enable and invalidate the data cache */
 /*     bl      l1dcache_enable */
-        bl      dcache_enable 
+        bl      dcache_enable
        sync
 
 #if 1
        bl      icache_enable
 #endif
-       
+
 #ifdef CFG_INIT_RAM_LOCK
        bl      lock_ram_in_cache
        sync
@@ -330,7 +330,7 @@ in_flash:
        bl      cpu_init_f
        sync
 
-#ifdef  RUN_DIAG        
+#ifdef  RUN_DIAG
 
         /* Sri:  Code to run the diagnostic automatically */
 
@@ -361,9 +361,9 @@ in_flash:
 
         /* Branch to diagnostic */
         blr
-        
-diag_done:      
-#endif        
+
+diag_done:
+#endif
 
   /*      bl      l2cache_enable*/
         mr     r3, r21
@@ -377,7 +377,7 @@ diag_done:
 
        .globl  invalidate_bats
 invalidate_bats:
-       
+
        /* invalidate BATs */
        mtspr   IBAT0U, r0
        mtspr   IBAT1U, r0
@@ -401,12 +401,12 @@ invalidate_bats:
        isync
        sync
        blr
-       
-       
+
+
        /* setup_bats - set them up to some initial state */
        .globl  setup_bats
 setup_bats:
-       
+
        addis   r0, r0, 0x0000
 
        /* IBAT 0 */
@@ -553,7 +553,7 @@ setup_bats:
        mtspr   DBAT7U, r3
        isync
 
-1:     
+1:
        addis   r3, 0, 0x0000
        addis   r5, 0, 0x4    /* upper bound of 0x00040000 for 7400/750 */
        isync
@@ -662,142 +662,140 @@ get_svr:
        blr
 
 
-/*------------------------------------------------------------------------------- */
-/* Function:    in8 */
-/* Description:         Input 8 bits */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    in8
+ * Description:         Input 8 bits
+ */
        .globl  in8
 in8:
        lbz     r3,0x0000(r3)
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    out8 */
-/* Description:         Output 8 bits */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    out8
+ * Description:         Output 8 bits
+ */
        .globl  out8
 out8:
        stb     r4,0x0000(r3)
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    out16 */
-/* Description:         Output 16 bits */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    out16
+ * Description:         Output 16 bits
+ */
        .globl  out16
 out16:
        sth     r4,0x0000(r3)
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    out16r */
-/* Description:         Byte reverse and output 16 bits */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    out16r
+ * Description:         Byte reverse and output 16 bits
+ */
        .globl  out16r
 out16r:
        sthbrx  r4,r0,r3
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    out32 */
-/* Description:         Output 32 bits */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    out32
+ * Description:         Output 32 bits
+ */
        .globl  out32
 out32:
        stw     r4,0x0000(r3)
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    out32r */
-/* Description:         Byte reverse and output 32 bits */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    out32r
+ * Description:         Byte reverse and output 32 bits
+ */
        .globl  out32r
 out32r:
        stwbrx  r4,r0,r3
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    in16 */
-/* Description:         Input 16 bits */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    in16
+ * Description:         Input 16 bits
+ */
        .globl  in16
 in16:
        lhz     r3,0x0000(r3)
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    in16r */
-/* Description:         Input 16 bits and byte reverse */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    in16r
+ * Description:         Input 16 bits and byte reverse
+ */
        .globl  in16r
 in16r:
        lhbrx   r3,r0,r3
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    in32 */
-/* Description:         Input 32 bits */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    in32
+ * Description:         Input 32 bits
+ */
        .globl  in32
 in32:
        lwz     3,0x0000(3)
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    in32r */
-/* Description:         Input 32 bits and byte reverse */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    in32r
+ * Description:         Input 32 bits and byte reverse
+ */
        .globl  in32r
 in32r:
        lwbrx   r3,r0,r3
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    ppcDcbf */
-/* Description:         Data Cache block flush */
-/* Input:       r3 = effective address */
-/* Output:      none. */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    ppcDcbf
+ * Description:         Data Cache block flush
+ * Input:       r3 = effective address
+ * Output:      none.
+ */
        .globl  ppcDcbf
 ppcDcbf:
        dcbf    r0,r3
        blr
 
-/*------------------------------------------------------------------------------- */
-/* Function:    ppcDcbi */
-/* Description:         Data Cache block Invalidate */
-/* Input:       r3 = effective address */
-/* Output:      none. */
-/*------------------------------------------------------------------------------- */
+/*
+ * Function:    ppcDcbi
+ * Description:         Data Cache block Invalidate
+ * Input:       r3 = effective address
+ * Output:      none.
+ */
        .globl  ppcDcbi
 ppcDcbi:
        dcbi    r0,r3
        blr
 
-/*--------------------------------------------------------------------------
+/*
  * Function:    ppcDcbz
  * Description:         Data Cache block zero.
  * Input:       r3 = effective address
  * Output:      none.
- *-------------------------------------------------------------------------- */
-
+ */
        .globl  ppcDcbz
 ppcDcbz:
        dcbz    r0,r3
        blr
 
-/*-------------------------------------------------------------------------- */
-/* Function:    ppcSync */
-/* Description:         Processor Synchronize */
-/* Input:       none. */
-/* Output:      none. */
-/*-------------------------------------------------------------------------- */
+/*
+ * Function:    ppcSync
+ * Description:         Processor Synchronize
+ * Input:       none.
+ * Output:      none.
+ */
        .globl  ppcSync
 ppcSync:
        sync
        blr
-       
-/*-----------------------------------------------------------------------*/
+
 /*
  * void relocate_code (addr_sp, gd, addr_moni)
  *
@@ -814,8 +812,9 @@ relocate_code:
 
         mr     r1,  r3         /* Set new stack pointer                */
        mr      r9,  r4         /* Save copy of Global Data pointer     */
+       mr      r29, r9         /* Save for DECLARE_GLOBAL_DATA_PTR     */
        mr      r10, r5         /* Save copy of Destination Address     */
-        
+
        mr      r3,  r5                         /* Destination Address  */
        lis     r4, CFG_MONITOR_BASE@h          /* Source      Address  */
        ori     r4, r4, CFG_MONITOR_BASE@l
@@ -1061,7 +1060,7 @@ enable_ext_addr:
 
 #if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
 .globl setup_ccsrbar
-setup_ccsrbar:         
+setup_ccsrbar:
        /* Special sequence needed to update CCSRBAR itself */
        lis     r4, CFG_CCSRBAR_DEFAULT@h
        ori     r4, r4, CFG_CCSRBAR_DEFAULT@l
@@ -1080,10 +1079,10 @@ setup_ccsrbar:
        lis     r3, CFG_CCSRBAR@h
        lwz     r5, CFG_CCSRBAR@l(r3)
        isync
-       
+
        blr
 #endif
-                       
+
 #ifdef CFG_INIT_RAM_LOCK
 lock_ram_in_cache:
        /* Allocate Initial RAM in data cache.
@@ -1119,7 +1118,7 @@ lock_ram_in_cache:
        isync
        blr
 #endif
-       
+
 .globl unlock_ram_in_cache
 unlock_ram_in_cache:
        /* invalidate the INIT_RAM section */
@@ -1145,7 +1144,7 @@ unlock_ram_in_cache:
        sync
        blr
 #endif
-#if 0  
+#if 0
        /* Unlock the first way of the data cache */
        mfspr   r0, LDSTCR
        li      r3,0x0080
@@ -1172,16 +1171,16 @@ unlock_ram_in_cache:
  * from Linux.  We'll do some basic cpu init and then pass
  * it to the Linux Reset Vector.
  * Sri:  Much of this initialization is not required. Linux
- * rewrites the bats, and the sprs and also enables the L1 cache.      
+ * rewrites the bats, and the sprs and also enables the L1 cache.
  */
 #if (CONFIG_NUM_CPUS > 1)
 .globl secondary_cpu_setup
-secondary_cpu_setup:   
+secondary_cpu_setup:
        /* Do only core setup on all cores except cpu0 */
        bl      invalidate_bats
        sync
        bl      enable_ext_addr
-       
+
 #ifdef CFG_L2
        /* init the L2 cache */
        addis   r3, r0, L2_INIT@h
@@ -1203,27 +1202,26 @@ secondary_cpu_setup:
         /* enable and invalidate the instruction cache*/
         bl      icache_enable
         sync
-        
 
         /* TBEN  in HID0 */
        mfspr   r4, HID0
-        oris    r4, r4, 0x0400 
+        oris    r4, r4, 0x0400
         mtspr   HID0, r4
         sync
         isync
-        
+
         /*SYNCBE|ABE in HID1*/
         mfspr  r4, HID1
-        ori     r4, r4, 0x0C00 
+        ori     r4, r4, 0x0C00
         mtspr   HID1, r4
         sync
         isync
-        
+
         lis    r3, CONFIG_LINUX_RESET_VEC@h
        ori     r3, r3, CONFIG_LINUX_RESET_VEC@l
        mtlr    r3
        blr
-       
-       /* Never Returns, Running in Linux Now */    
+
+       /* Never Returns, Running in Linux Now */
 #endif