85xx: Add L2SRAM Register's macro definition
[oweals/u-boot.git] / cpu / 74xx_7xx / start.S
index a37f92418db7bb1d325bdc27368fc24c87353f8f..792cd30856621d33c892cf3b3eec72be55482219 100644 (file)
@@ -34,6 +34,7 @@
  */
 #include <config.h>
 #include <74xx_7xx.h>
+#include <timestamp.h>
 #include <version.h>
 
 #include <ppc_asm.tmpl>
 #include <asm/cache.h>
 #include <asm/mmu.h>
 
+#if !defined(CONFIG_DB64360) && \
+    !defined(CONFIG_DB64460) && \
+    !defined(CONFIG_CPCI750) && \
+    !defined(CONFIG_P3Mx)
 #include <galileo/gt64260R.h>
+#endif
 
 #ifndef  CONFIG_IDENT_STRING
 #define  CONFIG_IDENT_STRING ""
@@ -82,7 +88,7 @@
        .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
@@ -120,7 +126,7 @@ _start_of_vectors:
 /* Alignment exception. */
        . = 0x600
 Alignment:
-       EXCEPTION_PROLOG
+       EXCEPTION_PROLOG(SRR0, SRR1)
        mfspr   r4,DAR
        stw     r4,_DAR(r21)
        mfspr   r5,DSISR
@@ -138,7 +144,7 @@ Alignment:
 /* Program check exception */
        . = 0x700
 ProgramCheck:
-       EXCEPTION_PROLOG
+       EXCEPTION_PROLOG(SRR0, SRR1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
        li      r20,MSR_KERNEL
        rlwimi  r20,r23,0,16,16         /* copy EE bit from saved MSR */
@@ -159,83 +165,15 @@ ProgramCheck:
        STD_EXCEPTION(0x900, Decrementer, timer_interrupt)
        STD_EXCEPTION(0xa00, Trap_0a, UnknownException)
        STD_EXCEPTION(0xb00, Trap_0b, UnknownException)
-
-       . = 0xc00
-/*
- * r0 - SYSCALL number
- * r3-... arguments
- */
-SystemCall:
-       addis   r11,r0,0                /* get functions table addr */
-       ori     r11,r11,0               /* Note: this code is patched in trap_init */
-       addis   r12,r0,0                /* get number of functions */
-       ori     r12,r12,0
-
-       cmplw   0, r0, r12
-       bge     1f
-
-       rlwinm  r0,r0,2,0,31            /* fn_addr = fn_tbl[r0] */
-       add     r11,r11,r0
-       lwz     r11,0(r11)
-
-       li      r20,0xd00-4             /* Get stack pointer */
-       lwz     r12,0(r20)
-       subi    r12,r12,12              /* Adjust stack pointer */
-       li      r0,0xc00+_end_back-SystemCall
-       cmplw   0, r0, r12              /* Check stack overflow */
-       bgt     1f
-       stw     r12,0(r20)
-
-       mflr    r0
-       stw     r0,0(r12)
-       mfspr   r0,SRR0
-       stw     r0,4(r12)
-       mfspr   r0,SRR1
-       stw     r0,8(r12)
-
-       li      r12,0xc00+_back-SystemCall
-       mtlr    r12
-       mtspr   SRR0,r11
-
-1:     SYNC
-       rfi
-
-_back:
-
-       mfmsr   r11                     /* Disable interrupts */
-       li      r12,0
-       ori     r12,r12,MSR_EE
-       andc    r11,r11,r12
-       SYNC                            /* Some chip revs need this... */
-       mtmsr   r11
-       SYNC
-
-       li      r12,0xd00-4             /* restore regs */
-       lwz     r12,0(r12)
-
-       lwz     r11,0(r12)
-       mtlr    r11
-       lwz     r11,4(r12)
-       mtspr   SRR0,r11
-       lwz     r11,8(r12)
-       mtspr   SRR1,r11
-
-       addi    r12,r12,12              /* Adjust stack pointer */
-       li      r20,0xd00-4
-       stw     r12,0(r20)
-
-       SYNC
-       rfi
-_end_back:
-
+       STD_EXCEPTION(0xc00, SystemCall, UnknownException)
        STD_EXCEPTION(0xd00, SingleStep, UnknownException)
 
        STD_EXCEPTION(0xe00, Trap_0e, UnknownException)
        STD_EXCEPTION(0xf00, Trap_0f, UnknownException)
 
-        /*
-         * On the MPC8xx, this is a software emulation interrupt. It
-         * occurs for all unimplemented and illegal instructions.
+       /*
+        * On the MPC8xx, this is a software emulation interrupt. It
+        * occurs for all unimplemented and illegal instructions.
         */
        STD_EXCEPTION(0x1000, SoftEmu, SoftEmuException)
 
@@ -272,7 +210,7 @@ boot_warm:
        bl      invalidate_bats
        sync
 
-#ifdef CFG_L2
+#ifdef CONFIG_SYS_L2
        /* init the L2 cache */
        addis   r3, r0, L2_INIT@h
        ori     r3, r3, L2_INIT@l
@@ -282,18 +220,18 @@ boot_warm:
 #if defined(CONFIG_ALTIVEC) && defined(CONFIG_74xx)
        .long   0x7e00066c
                /*
-                 * dssall instruction, gas doesn't have it yet
-                 * ...for altivec, data stream stop all this probably
-                 * isn't needed unless we warm (software) reboot U-Boot
+                * dssall instruction, gas doesn't have it yet
+                * ...for altivec, data stream stop all this probably
+                * isn't needed unless we warm (software) reboot U-Boot
                 */
 #endif
 
-#ifdef CFG_L2
+#ifdef CONFIG_SYS_L2
        /* invalidate the L2 cache */
        bl      l2cache_invalidate
        sync
 #endif
-#ifdef CFG_BOARD_ASM_INIT
+#ifdef CONFIG_SYS_BOARD_ASM_INIT
        /* do early init */
        bl      board_asm_init
 #endif
@@ -301,8 +239,8 @@ boot_warm:
        /*
         * Calculate absolute address in FLASH and jump there
         *------------------------------------------------------*/
-       lis     r3, CFG_MONITOR_BASE@h
-       ori     r3, r3, CFG_MONITOR_BASE@l
+       lis     r3, CONFIG_SYS_MONITOR_BASE@h
+       ori     r3, r3, CONFIG_SYS_MONITOR_BASE@l
        addi    r3, r3, in_flash - _start + EXC_OFF_SYS_RESET
        mtlr    r3
        blr
@@ -325,16 +263,16 @@ in_flash:
         * Cache must be enabled here for stack-in-cache trick.
         * This means we need to enable the BATS.
         * This means:
-         *   1) for the EVB, original gt regs need to be mapped
+        *   1) for the EVB, original gt regs need to be mapped
         *   2) need to have an IBAT for the 0xf region,
         *      we are running there!
-         * Cache should be turned on after BATs, since by default
-         * everything is write-through.
-         * The init-mem BAT can be reused after reloc. The old
-         * gt-regs BAT can be reused after board_init_f calls
-         * board_pre_init (EVB only).
-         */
-#if !defined(CONFIG_BAB7xx) && !defined(CONFIG_ELPPC)
+        * Cache should be turned on after BATs, since by default
+        * everything is write-through.
+        * The init-mem BAT can be reused after reloc. The old
+        * gt-regs BAT can be reused after board_init_f calls
+        * board_early_init_f (EVB only).
+        */
+#if !defined(CONFIG_BAB7xx) && !defined(CONFIG_ELPPC) && !defined(CONFIG_P3Mx)
        /* enable address translation */
        bl      enable_addr_trans
        sync
@@ -343,15 +281,15 @@ in_flash:
        bl      l1dcache_enable
        sync
 #endif
-#ifdef CFG_INIT_RAM_LOCK
+#ifdef CONFIG_SYS_INIT_RAM_LOCK
        bl      lock_ram_in_cache
        sync
 #endif
 
        /* set up the stack pointer in our newly created
         * cache-ram (r1) */
-       lis     r1, (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET)@h
-       ori     r1, r1, (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET)@l
+       lis     r1, (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET)@h
+       ori     r1, r1, (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_GBL_DATA_OFFSET)@l
 
        li      r0, 0           /* Make room for stack frame header and */
        stwu    r0, -4(r1)      /* clear final stack frame so that      */
@@ -379,11 +317,23 @@ invalidate_bats:
        mtspr   IBAT1U, r0
        mtspr   IBAT2U, r0
        mtspr   IBAT3U, r0
+#ifdef CONFIG_HIGH_BATS
+       mtspr   IBAT4U, r0
+       mtspr   IBAT5U, r0
+       mtspr   IBAT6U, r0
+       mtspr   IBAT7U, r0
+#endif
        isync
        mtspr   DBAT0U, r0
        mtspr   DBAT1U, r0
        mtspr   DBAT2U, r0
        mtspr   DBAT3U, r0
+#ifdef CONFIG_HIGH_BATS
+       mtspr   DBAT4U, r0
+       mtspr   DBAT5U, r0
+       mtspr   DBAT6U, r0
+       mtspr   DBAT7U, r0
+#endif
        isync
        sync
        blr
@@ -394,77 +344,151 @@ setup_bats:
        addis   r0, r0, 0x0000
 
        /* IBAT 0 */
-       addis   r4, r0, CFG_IBAT0L@h
-       ori     r4, r4, CFG_IBAT0L@l
-       addis   r3, r0, CFG_IBAT0U@h
-       ori     r3, r3, CFG_IBAT0U@l
+       addis   r4, r0, CONFIG_SYS_IBAT0L@h
+       ori     r4, r4, CONFIG_SYS_IBAT0L@l
+       addis   r3, r0, CONFIG_SYS_IBAT0U@h
+       ori     r3, r3, CONFIG_SYS_IBAT0U@l
        mtspr   IBAT0L, r4
        mtspr   IBAT0U, r3
        isync
 
        /* DBAT 0 */
-       addis   r4, r0, CFG_DBAT0L@h
-       ori     r4, r4, CFG_DBAT0L@l
-       addis   r3, r0, CFG_DBAT0U@h
-       ori     r3, r3, CFG_DBAT0U@l
+       addis   r4, r0, CONFIG_SYS_DBAT0L@h
+       ori     r4, r4, CONFIG_SYS_DBAT0L@l
+       addis   r3, r0, CONFIG_SYS_DBAT0U@h
+       ori     r3, r3, CONFIG_SYS_DBAT0U@l
        mtspr   DBAT0L, r4
        mtspr   DBAT0U, r3
        isync
 
        /* IBAT 1 */
-       addis   r4, r0, CFG_IBAT1L@h
-       ori     r4, r4, CFG_IBAT1L@l
-       addis   r3, r0, CFG_IBAT1U@h
-       ori     r3, r3, CFG_IBAT1U@l
+       addis   r4, r0, CONFIG_SYS_IBAT1L@h
+       ori     r4, r4, CONFIG_SYS_IBAT1L@l
+       addis   r3, r0, CONFIG_SYS_IBAT1U@h
+       ori     r3, r3, CONFIG_SYS_IBAT1U@l
        mtspr   IBAT1L, r4
        mtspr   IBAT1U, r3
        isync
 
        /* DBAT 1 */
-       addis   r4, r0, CFG_DBAT1L@h
-       ori     r4, r4, CFG_DBAT1L@l
-       addis   r3, r0, CFG_DBAT1U@h
-       ori     r3, r3, CFG_DBAT1U@l
+       addis   r4, r0, CONFIG_SYS_DBAT1L@h
+       ori     r4, r4, CONFIG_SYS_DBAT1L@l
+       addis   r3, r0, CONFIG_SYS_DBAT1U@h
+       ori     r3, r3, CONFIG_SYS_DBAT1U@l
        mtspr   DBAT1L, r4
        mtspr   DBAT1U, r3
        isync
 
        /* IBAT 2 */
-       addis   r4, r0, CFG_IBAT2L@h
-       ori     r4, r4, CFG_IBAT2L@l
-       addis   r3, r0, CFG_IBAT2U@h
-       ori     r3, r3, CFG_IBAT2U@l
+       addis   r4, r0, CONFIG_SYS_IBAT2L@h
+       ori     r4, r4, CONFIG_SYS_IBAT2L@l
+       addis   r3, r0, CONFIG_SYS_IBAT2U@h
+       ori     r3, r3, CONFIG_SYS_IBAT2U@l
        mtspr   IBAT2L, r4
        mtspr   IBAT2U, r3
        isync
 
        /* DBAT 2 */
-       addis   r4, r0, CFG_DBAT2L@h
-       ori     r4, r4, CFG_DBAT2L@l
-       addis   r3, r0, CFG_DBAT2U@h
-       ori     r3, r3, CFG_DBAT2U@l
+       addis   r4, r0, CONFIG_SYS_DBAT2L@h
+       ori     r4, r4, CONFIG_SYS_DBAT2L@l
+       addis   r3, r0, CONFIG_SYS_DBAT2U@h
+       ori     r3, r3, CONFIG_SYS_DBAT2U@l
        mtspr   DBAT2L, r4
        mtspr   DBAT2U, r3
        isync
 
        /* IBAT 3 */
-       addis   r4, r0, CFG_IBAT3L@h
-       ori     r4, r4, CFG_IBAT3L@l
-       addis   r3, r0, CFG_IBAT3U@h
-       ori     r3, r3, CFG_IBAT3U@l
+       addis   r4, r0, CONFIG_SYS_IBAT3L@h
+       ori     r4, r4, CONFIG_SYS_IBAT3L@l
+       addis   r3, r0, CONFIG_SYS_IBAT3U@h
+       ori     r3, r3, CONFIG_SYS_IBAT3U@l
        mtspr   IBAT3L, r4
        mtspr   IBAT3U, r3
        isync
 
        /* DBAT 3 */
-       addis   r4, r0, CFG_DBAT3L@h
-       ori     r4, r4, CFG_DBAT3L@l
-       addis   r3, r0, CFG_DBAT3U@h
-       ori     r3, r3, CFG_DBAT3U@l
+       addis   r4, r0, CONFIG_SYS_DBAT3L@h
+       ori     r4, r4, CONFIG_SYS_DBAT3L@l
+       addis   r3, r0, CONFIG_SYS_DBAT3U@h
+       ori     r3, r3, CONFIG_SYS_DBAT3U@l
        mtspr   DBAT3L, r4
        mtspr   DBAT3U, r3
        isync
 
+#ifdef CONFIG_HIGH_BATS
+       /* IBAT 4 */
+       addis   r4, r0, CONFIG_SYS_IBAT4L@h
+       ori     r4, r4, CONFIG_SYS_IBAT4L@l
+       addis   r3, r0, CONFIG_SYS_IBAT4U@h
+       ori     r3, r3, CONFIG_SYS_IBAT4U@l
+       mtspr   IBAT4L, r4
+       mtspr   IBAT4U, r3
+       isync
+
+       /* DBAT 4 */
+       addis   r4, r0, CONFIG_SYS_DBAT4L@h
+       ori     r4, r4, CONFIG_SYS_DBAT4L@l
+       addis   r3, r0, CONFIG_SYS_DBAT4U@h
+       ori     r3, r3, CONFIG_SYS_DBAT4U@l
+       mtspr   DBAT4L, r4
+       mtspr   DBAT4U, r3
+       isync
+
+       /* IBAT 5 */
+       addis   r4, r0, CONFIG_SYS_IBAT5L@h
+       ori     r4, r4, CONFIG_SYS_IBAT5L@l
+       addis   r3, r0, CONFIG_SYS_IBAT5U@h
+       ori     r3, r3, CONFIG_SYS_IBAT5U@l
+       mtspr   IBAT5L, r4
+       mtspr   IBAT5U, r3
+       isync
+
+       /* DBAT 5 */
+       addis   r4, r0, CONFIG_SYS_DBAT5L@h
+       ori     r4, r4, CONFIG_SYS_DBAT5L@l
+       addis   r3, r0, CONFIG_SYS_DBAT5U@h
+       ori     r3, r3, CONFIG_SYS_DBAT5U@l
+       mtspr   DBAT5L, r4
+       mtspr   DBAT5U, r3
+       isync
+
+       /* IBAT 6 */
+       addis   r4, r0, CONFIG_SYS_IBAT6L@h
+       ori     r4, r4, CONFIG_SYS_IBAT6L@l
+       addis   r3, r0, CONFIG_SYS_IBAT6U@h
+       ori     r3, r3, CONFIG_SYS_IBAT6U@l
+       mtspr   IBAT6L, r4
+       mtspr   IBAT6U, r3
+       isync
+
+       /* DBAT 6 */
+       addis   r4, r0, CONFIG_SYS_DBAT6L@h
+       ori     r4, r4, CONFIG_SYS_DBAT6L@l
+       addis   r3, r0, CONFIG_SYS_DBAT6U@h
+       ori     r3, r3, CONFIG_SYS_DBAT6U@l
+       mtspr   DBAT6L, r4
+       mtspr   DBAT6U, r3
+       isync
+
+       /* IBAT 7 */
+       addis   r4, r0, CONFIG_SYS_IBAT7L@h
+       ori     r4, r4, CONFIG_SYS_IBAT7L@l
+       addis   r3, r0, CONFIG_SYS_IBAT7U@h
+       ori     r3, r3, CONFIG_SYS_IBAT7U@l
+       mtspr   IBAT7L, r4
+       mtspr   IBAT7U, r3
+       isync
+
+       /* DBAT 7 */
+       addis   r4, r0, CONFIG_SYS_DBAT7L@h
+       ori     r4, r4, CONFIG_SYS_DBAT7L@l
+       addis   r3, r0, CONFIG_SYS_DBAT7U@h
+       ori     r3, r3, CONFIG_SYS_DBAT7U@l
+       mtspr   DBAT7L, r4
+       mtspr   DBAT7U, r3
+       isync
+#endif
+
        /* bats are done, now invalidate the TLBs */
 
        addis   r3, 0, 0x0000
@@ -589,16 +613,16 @@ relocate_code:
        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
+       lis     r4, CONFIG_SYS_MONITOR_BASE@h           /* Source      Address  */
+       ori     r4, r4, CONFIG_SYS_MONITOR_BASE@l
        lwz     r5, GOT(__init_end)
        sub     r5, r5, r4
-       li      r6, CFG_CACHELINE_SIZE          /* Cache Line Size      */
+       li      r6, CONFIG_SYS_CACHELINE_SIZE           /* Cache Line Size      */
 
        /*
         * Fix GOT pointer:
         *
-        * New GOT-PTR = (old GOT-PTR - CFG_MONITOR_BASE) + Destination Address
+        * New GOT-PTR = (old GOT-PTR - CONFIG_SYS_MONITOR_BASE) + Destination Address
         *
         * Offset:
         */
@@ -616,11 +640,11 @@ relocate_code:
        bl      board_relocate_rom
        sync
        mr      r3, r10                         /* Destination Address  */
-       lis     r4, CFG_MONITOR_BASE@h          /* Source      Address  */
-       ori     r4, r4, CFG_MONITOR_BASE@l
+       lis     r4, CONFIG_SYS_MONITOR_BASE@h           /* Source      Address  */
+       ori     r4, r4, CONFIG_SYS_MONITOR_BASE@l
        lwz     r5, GOT(__init_end)
        sub     r5, r5, r4
-       li      r6, CFG_CACHELINE_SIZE          /* Cache Line Size      */
+       li      r6, CONFIG_SYS_CACHELINE_SIZE           /* Cache Line Size      */
 #else
        cmplw   cr1,r3,r4
        addi    r0,r5,3
@@ -682,8 +706,8 @@ in_ram:
        /*
         * Relocation Function, r14 point to got2+0x8000
         *
-         * Adjust got2 pointers, no need to check for 0, this code
-         * already puts a few entries in the table.
+        * Adjust got2 pointers, no need to check for 0, this code
+        * already puts a few entries in the table.
         */
        li      r0,__got2_entries@sectoff@l
        la      r3,GOT(_GOT2_TABLE_)
@@ -697,7 +721,7 @@ in_ram:
        bdnz    1b
 
        /*
-         * Now adjust the fixups and the pointers to the fixups
+        * 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
@@ -731,7 +755,12 @@ in_ram:
        bne     5b
 6:
        mr      r3, r10         /* Destination Address          */
-#ifdef CONFIG_AMIGAONEG3SE
+#if defined(CONFIG_AMIGAONEG3SE) || \
+    defined(CONFIG_DB64360)     || \
+    defined(CONFIG_DB64460)      || \
+    defined(CONFIG_CPCI750)    || \
+    defined(CONFIG_PPMC7XX)     || \
+    defined(CONFIG_P3Mx)
        mr      r4, r9          /* Use RAM copy of the global data */
 #endif
        bl      after_reloc
@@ -823,15 +852,15 @@ trap_reloc:
 
        blr
 
-#ifdef CFG_INIT_RAM_LOCK
+#ifdef CONFIG_SYS_INIT_RAM_LOCK
 lock_ram_in_cache:
        /* Allocate Initial RAM in data cache.
         */
-       lis     r3, (CFG_INIT_RAM_ADDR & ~31)@h
-       ori     r3, r3, (CFG_INIT_RAM_ADDR & ~31)@l
-       li      r2, ((CFG_INIT_RAM_END & ~31) + \
-                    (CFG_INIT_RAM_ADDR & 31) + 31) / 32
-       mtctr   r2
+       lis     r3, (CONFIG_SYS_INIT_RAM_ADDR & ~31)@h
+       ori     r3, r3, (CONFIG_SYS_INIT_RAM_ADDR & ~31)@l
+       li      r4, ((CONFIG_SYS_INIT_RAM_END & ~31) + \
+                    (CONFIG_SYS_INIT_RAM_ADDR & 31) + 31) / 32
+       mtctr   r4
 1:
        dcbz    r0, r3
        addi    r3, r3, 32
@@ -848,11 +877,11 @@ lock_ram_in_cache:
 .globl unlock_ram_in_cache
 unlock_ram_in_cache:
        /* invalidate the INIT_RAM section */
-       lis     r3, (CFG_INIT_RAM_ADDR & ~31)@h
-       ori     r3, r3, (CFG_INIT_RAM_ADDR & ~31)@l
-       li      r2, ((CFG_INIT_RAM_END & ~31) + \
-                    (CFG_INIT_RAM_ADDR & 31) + 31) / 32
-       mtctr   r2
+       lis     r3, (CONFIG_SYS_INIT_RAM_ADDR & ~31)@h
+       ori     r3, r3, (CONFIG_SYS_INIT_RAM_ADDR & ~31)@l
+       li      r4, ((CONFIG_SYS_INIT_RAM_END & ~31) + \
+                    (CONFIG_SYS_INIT_RAM_ADDR & 31) + 31) / 32
+       mtctr   r4
 1:     icbi    r0, r3
        addi    r3, r3, 32
        bdnz    1b