rename CFG_ macros to CONFIG_SYS
[platform/kernel/u-boot.git] / cpu / mips / start.S
index fde2944..6a22302 100644 (file)
  */
 
 #include <config.h>
-#include <version.h>
 #include <asm/regdef.h>
 #include <asm/mipsregs.h>
 
+       /*
+        * For the moment disable interrupts, mark the kernel mode and
+        * set ST0_KX so that the CPU does not spit fire when using
+        * 64-bit addresses.
+        */
+       .macro  setup_c0_status set clr
+       .set    push
+       mfc0    t0, CP0_STATUS
+       or      t0, ST0_CU0 | \set | 0x1f | \clr
+       xor     t0, 0x1f | \clr
+       mtc0    t0, CP0_STATUS
+       .set    noreorder
+       sll     zero, 3                         # ehb
+       .set    pop
+       .endm
+
+       .macro  setup_c0_status_reset
+#ifdef CONFIG_64BIT
+       setup_c0_status ST0_KX 0
+#else
+       setup_c0_status 0 0
+#endif
+       .endm
+
 #define RVECENT(f,n) \
    b f; nop
 #define XVECENT(f,bev) \
@@ -211,19 +234,11 @@ reset:
        mtc0    zero, CP0_WATCHLO
        mtc0    zero, CP0_WATCHHI
 
-       /* STATUS register */
-#ifdef  CONFIG_TB0229
-       li      k0, ST0_CU0
-#else
-       mfc0    k0, CP0_STATUS
-#endif
-       li      k1, ~ST0_IE
-       and     k0, k1
-       mtc0    k0, CP0_STATUS
-
-       /* CAUSE register */
+       /* WP(Watch Pending), SW0/1 should be cleared. */
        mtc0    zero, CP0_CAUSE
 
+       setup_c0_status_reset
+
        /* Init Timer */
        mtc0    zero, CP0_COUNT
        mtc0    zero, CP0_COMPARE
@@ -259,18 +274,18 @@ reset:
 
        /* Set up temporary stack.
         */
-#ifdef CFG_INIT_RAM_LOCK_MIPS
-       li      a0, CFG_INIT_SP_OFFSET
+#ifdef CONFIG_SYS_INIT_RAM_LOCK_MIPS
+       li      a0, CONFIG_SYS_INIT_SP_OFFSET
        la      t9, mips_cache_lock
        jalr    t9
        nop
 #endif
 
-       li      t0, CFG_SDRAM_BASE + CFG_INIT_SP_OFFSET
+       li      t0, CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_INIT_SP_OFFSET
        la      sp, 0(t0)
 
        la      t9, board_init_f
-       j       t9
+       jr      t9
        nop
 
 /*
@@ -288,7 +303,7 @@ reset:
 relocate_code:
        move    sp, a0          /* Set new stack pointer        */
 
-       li      t0, CFG_MONITOR_BASE
+       li      t0, CONFIG_SYS_MONITOR_BASE
        la      t3, in_ram
        lw      t2, -12(t3)     /* t2 <-- uboot_end_data        */
        move    t1, a2
@@ -296,10 +311,10 @@ relocate_code:
        /*
         * Fix $gp:
         *
-        * New $gp = (Old $gp - CFG_MONITOR_BASE) + Destination Address
+        * New $gp = (Old $gp - CONFIG_SYS_MONITOR_BASE) + Destination Address
         */
        move    t6, gp
-       sub     gp, CFG_MONITOR_BASE
+       sub     gp, CONFIG_SYS_MONITOR_BASE
        add     gp, a2          /* gp now adjusted              */
        sub     t6, gp, t6      /* t6 <-- relocation offset     */
 
@@ -326,10 +341,11 @@ relocate_code:
        /* Jump to where we've relocated ourselves.
         */
        addi    t0, a2, in_ram - _start
-       j       t0
+       jr      t0
        nop
 
-       .gpword _GLOBAL_OFFSET_TABLE_   /* _GLOBAL_OFFSET_TABLE_ - _gp  */
+       .word   _gp
+       .word   _GLOBAL_OFFSET_TABLE_
        .word   uboot_end_data
        .word   uboot_end
        .word   num_got_entries
@@ -342,8 +358,10 @@ in_ram:
         * generated by GNU ld. Skip these reserved entries from relocation.
         */
        lw      t3, -4(t0)      /* t3 <-- num_got_entries       */
-       lw      t4, -16(t0)     /* t4 <-- (_GLOBAL_OFFSET_TABLE_ - _gp) */
-       add     t4, t4, gp      /* t4 now holds _GLOBAL_OFFSET_TABLE_   */
+       lw      t4, -16(t0)     /* t4 <-- _GLOBAL_OFFSET_TABLE_ */
+       lw      t5, -20(t0)     /* t5 <-- _gp   */
+       sub     t4, t5          /* compute offset*/
+       add     t4, t4, gp      /* t4 now holds relocated _GLOBAL_OFFSET_TABLE_ */
        addi    t4, t4, 8       /* Skipping first two entries.  */
        li      t2, 2
 1:
@@ -371,7 +389,7 @@ in_ram:
 
        move    a0, a1
        la      t9, board_init_r
-       j       t9
+       jr      t9
        move    a1, a2          /* delay slot                   */
 
        .end    relocate_code