]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - cpu/mpc86xx/start.S
Merge branch 'master' of git://git.denx.de/u-boot-mpc83xx
[people/ms/u-boot.git] / cpu / mpc86xx / start.S
index 09f4ceedb573ddb6fc7256b36ac4563f10445499..75e431764b53a3a8912c0edeed4d8ee89a625201 100644 (file)
@@ -194,7 +194,7 @@ boot_warm:
 #endif
 
 1:
-#ifdef CFG_RAMBOOT
+#ifdef CONFIG_SYS_RAMBOOT
        /* disable everything */
        li      r0, 0
        mtspr   HID0, r0
@@ -202,10 +202,14 @@ boot_warm:
        mtmsr   0
 #endif
 
+       /* Invalidate BATs */
        bl      invalidate_bats
        sync
+       /* Invalidate all of TLB before MMU turn on */
+       bl      clear_tlbs
+       sync
 
-#ifdef CFG_L2
+#ifdef CONFIG_SYS_L2
        /* init the L2 cache */
        lis     r3, L2_INIT@h
        ori     r3, r3, L2_INIT@l
@@ -218,8 +222,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
@@ -235,17 +239,8 @@ in_flash:
        bl      enable_ext_addr
 
        /* setup the bats */
-       bl      setup_bats
-       sync
+       bl      early_bats
 
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /* setup ccsrbar */
-       bl      setup_ccsrbar
-#endif
-
-       /* setup the law entries */
-       bl      law_entry
-       sync
        /*
         * Cache must be enabled here for stack-in-cache trick.
         * This means we need to enable the BATS.
@@ -266,15 +261,15 @@ in_flash:
        bl      icache_enable
 #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      */
@@ -282,6 +277,15 @@ in_flash:
 
        GET_GOT                 /* initialize GOT access        */
 
+       /* setup the rest of the bats */
+       bl      setup_bats
+       sync
+
+#if (CONFIG_SYS_CCSRBAR_DEFAULT != CONFIG_SYS_CCSRBAR)
+       /* setup ccsrbar */
+       bl      setup_ccsrbar
+#endif
+
        /* run low-level CPU init code     (from Flash) */
        bl      cpu_init_f
        sync
@@ -307,8 +311,8 @@ in_flash:
        stb     r3, 0(r4)
 
        /* Get the address to jump to in r3*/
-       lis     r3, CFG_DIAG_ADDR@h
-       ori     r3, r3, CFG_DIAG_ADDR@l
+       lis     r3, CONFIG_SYS_DIAG_ADDR@h
+       ori     r3, r3, CONFIG_SYS_DIAG_ADDR@l
 
        /* Load the LR with the branch address */
        mtlr    r3
@@ -357,169 +361,62 @@ invalidate_bats:
        sync
        blr
 
-
-       /* setup_bats - set them up to some initial state */
-       .globl  setup_bats
-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
-       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
-       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
-       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
-       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
-       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
-       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
-       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
-       mtspr   DBAT3L, r4
-       mtspr   DBAT3U, r3
-       isync
-
-       /* IBAT 4 */
-       addis   r4, r0, CFG_IBAT4L@h
-       ori     r4, r4, CFG_IBAT4L@l
-       addis   r3, r0, CFG_IBAT4U@h
-       ori     r3, r3, CFG_IBAT4U@l
-       mtspr   IBAT4L, r4
-       mtspr   IBAT4U, r3
-       isync
-
-       /* DBAT 4 */
-       addis   r4, r0, CFG_DBAT4L@h
-       ori     r4, r4, CFG_DBAT4L@l
-       addis   r3, r0, CFG_DBAT4U@h
-       ori     r3, r3, CFG_DBAT4U@l
-       mtspr   DBAT4L, r4
-       mtspr   DBAT4U, r3
-       isync
-
+/*
+ * early_bats:
+ *
+ * Set up bats needed early on - this is usually the BAT for the
+ * stack-in-cache and the Flash
+ */
+       .globl  early_bats
+early_bats:
        /* IBAT 5 */
-       addis   r4, r0, CFG_IBAT5L@h
-       ori     r4, r4, CFG_IBAT5L@l
-       addis   r3, r0, CFG_IBAT5U@h
-       ori     r3, r3, CFG_IBAT5U@l
-       mtspr   IBAT5L, r4
-       mtspr   IBAT5U, r3
+       lis     r4, CONFIG_SYS_IBAT5L@h
+       ori     r4, r4, CONFIG_SYS_IBAT5L@l
+       lis     r3, CONFIG_SYS_IBAT5U@h
+       ori     r3, r3, CONFIG_SYS_IBAT5U@l
+       mtspr   IBAT5L, r4
+       mtspr   IBAT5U, r3
        isync
 
        /* DBAT 5 */
-       addis   r4, r0, CFG_DBAT5L@h
-       ori     r4, r4, CFG_DBAT5L@l
-       addis   r3, r0, CFG_DBAT5U@h
-       ori     r3, r3, CFG_DBAT5U@l
-       mtspr   DBAT5L, r4
-       mtspr   DBAT5U, r3
+       lis     r4, CONFIG_SYS_DBAT5L@h
+       ori     r4, r4, CONFIG_SYS_DBAT5L@l
+       lis     r3, CONFIG_SYS_DBAT5U@h
+       ori     r3, r3, CONFIG_SYS_DBAT5U@l
+       mtspr   DBAT5L, r4
+       mtspr   DBAT5U, r3
        isync
 
        /* IBAT 6 */
-       addis   r4, r0, CFG_IBAT6L@h
-       ori     r4, r4, CFG_IBAT6L@l
-       addis   r3, r0, CFG_IBAT6U@h
-       ori     r3, r3, CFG_IBAT6U@l
-       mtspr   IBAT6L, r4
-       mtspr   IBAT6U, r3
+       lis     r4, CONFIG_SYS_IBAT6L@h
+       ori     r4, r4, CONFIG_SYS_IBAT6L@l
+       lis     r3, CONFIG_SYS_IBAT6U@h
+       ori     r3, r3, CONFIG_SYS_IBAT6U@l
+       mtspr   IBAT6L, r4
+       mtspr   IBAT6U, r3
        isync
 
        /* DBAT 6 */
-       addis   r4, r0, CFG_DBAT6L@h
-       ori     r4, r4, CFG_DBAT6L@l
-       addis   r3, r0, CFG_DBAT6U@h
-       ori     r3, r3, CFG_DBAT6U@l
-       mtspr   DBAT6L, r4
-       mtspr   DBAT6U, r3
-       isync
-
-       /* IBAT 7 */
-       addis   r4, r0, CFG_IBAT7L@h
-       ori     r4, r4, CFG_IBAT7L@l
-       addis   r3, r0, CFG_IBAT7U@h
-       ori     r3, r3, CFG_IBAT7U@l
-       mtspr   IBAT7L, r4
-       mtspr   IBAT7U, r3
-       isync
-
-       /* DBAT 7 */
-       addis   r4, r0, CFG_DBAT7L@h
-       ori     r4, r4, CFG_DBAT7L@l
-       addis   r3, r0, CFG_DBAT7U@h
-       ori     r3, r3, CFG_DBAT7U@l
-       mtspr   DBAT7L, r4
-       mtspr   DBAT7U, r3
+       lis     r4, CONFIG_SYS_DBAT6L@h
+       ori     r4, r4, CONFIG_SYS_DBAT6L@l
+       lis     r3, CONFIG_SYS_DBAT6U@h
+       ori     r3, r3, CONFIG_SYS_DBAT6U@l
+       mtspr   DBAT6L, r4
+       mtspr   DBAT6U, r3
        isync
+       blr
 
-1:
-       addis   r3, 0, 0x0000
-       addis   r5, 0, 0x4      /* upper bound of 0x00040000 for 7400/750 */
+       .globl clear_tlbs
+clear_tlbs:
+       addis   r3, 0, 0x0000
+       addis   r5, 0, 0x4
        isync
-
 tlblp:
-       tlbie   r3
+       tlbie   r3
        sync
-       addi    r3, r3, 0x1000
-       cmp     0, 0, r3, r5
+       addi    r3, r3, 0x1000
+       cmp     0, 0, r3, r5
        blt tlblp
-
        blr
 
        .globl enable_addr_trans
@@ -723,20 +620,19 @@ relocate_code:
 
        mr      r1,  r3         /* Set new stack pointer                */
        mr      r9,  r4         /* Save copy of Global Data pointer     */
-       mr      r2,  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
+       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:
         */
@@ -750,16 +646,6 @@ relocate_code:
        /*
         * Now relocate code
         */
-#ifdef CONFIG_ECC
-       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
-       lwz     r5, GOT(__init_end)
-       sub     r5, r5, r4
-       li      r6, CFG_CACHELINE_SIZE          /* Cache Line Size      */
-#else
        cmplw   cr1,r3,r4
        addi    r0,r5,3
        srwi.   r0,r0,2
@@ -781,7 +667,6 @@ relocate_code:
 3:     lwzu    r0,-4(r8)
        stwu    r0,-4(r7)
        bdnz    3b
-#endif
 /*
  * Now flush the cache: note that we must start from a cache aligned
  * address. Otherwise we might miss one cache line.
@@ -814,9 +699,6 @@ relocate_code:
        blr
 
 in_ram:
-#ifdef CONFIG_ECC
-       bl      board_init_ecc
-#endif
        /*
         * Relocation Function, r14 point to got2+0x8000
         *
@@ -970,15 +852,15 @@ enable_ext_addr:
        isync
        blr
 
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
+#if (CONFIG_SYS_CCSRBAR_DEFAULT != CONFIG_SYS_CCSRBAR)
 .globl setup_ccsrbar
 setup_ccsrbar:
        /* Special sequence needed to update CCSRBAR itself */
-       lis     r4, CFG_CCSRBAR_DEFAULT@h
-       ori     r4, r4, CFG_CCSRBAR_DEFAULT@l
+       lis     r4, CONFIG_SYS_CCSRBAR_DEFAULT@h
+       ori     r4, r4, CONFIG_SYS_CCSRBAR_DEFAULT@l
 
-       lis     r5, CFG_CCSRBAR@h
-       ori     r5, r5, CFG_CCSRBAR@l
+       lis     r5, CONFIG_SYS_CCSRBAR@h
+       ori     r5, r5, CONFIG_SYS_CCSRBAR@l
        srwi    r6,r5,12
        stw     r6, 0(r4)
        isync
@@ -988,22 +870,22 @@ setup_ccsrbar:
        lwz     r5, 0(r5)
        isync
 
-       lis     r3, CFG_CCSRBAR@h
-       lwz     r5, CFG_CCSRBAR@l(r3)
+       lis     r3, CONFIG_SYS_CCSRBAR@h
+       lwz     r5, CONFIG_SYS_CCSRBAR@l(r3)
        isync
 
        blr
 #endif
 
-#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
@@ -1034,11 +916,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
@@ -1093,7 +975,7 @@ secondary_cpu_setup:
        sync
        bl      enable_ext_addr
 
-#ifdef CFG_L2
+#ifdef CONFIG_SYS_L2
        /* init the L2 cache */
        addis   r3, r0, L2_INIT@h
        ori     r3, r3, L2_INIT@l