Merge branch 'next' of git://git.denx.de/u-boot-avr32
[platform/kernel/u-boot.git] / cpu / mpc86xx / cpu_init.c
index 4673d05..1fda3fe 100644 (file)
  * cpu_init.c - low level cpu init
  */
 
+#include <config.h>
 #include <common.h>
 #include <mpc86xx.h>
+#include <asm/mmu.h>
+#include <asm/fsl_law.h>
+
+DECLARE_GLOBAL_DATA_PTR;
 
 /*
  * Breathe some life into the CPU...
@@ -38,7 +43,6 @@
 
 void cpu_init_f(void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
        volatile immap_t    *immap = (immap_t *)CFG_IMMR;
        volatile ccsr_lbc_t *memctl = &immap->im_lbc;
 
@@ -48,6 +52,10 @@ void cpu_init_f(void)
        /* Clear initial global data */
        memset ((void *) gd, 0, sizeof (gd_t));
 
+#ifdef CONFIG_FSL_LAW
+       init_laws();
+#endif
+
        /* Map banks 0 and 1 to the FLASH banks 0 and 1 at preliminary
         * addresses - these have to be modified later when FLASH size
         * has been determined
@@ -104,8 +112,8 @@ void cpu_init_f(void)
        /* enable the timebase bit in HID0 */
        set_hid0(get_hid0() | 0x4000000);
 
-       /* enable SYNCBE | ABE bits in  HID1 */
-       set_hid1(get_hid1() | 0x00000C00);
+       /* enable EMCP, SYNCBE | ABE bits in HID1 */
+       set_hid1(get_hid1() | 0x80000C00);
 }
 
 /*
@@ -115,3 +123,26 @@ int cpu_init_r(void)
 {
        return 0;
 }
+
+/* Set up BAT registers */
+void setup_bats(void)
+{
+       write_bat(DBAT0, CFG_DBAT0U, CFG_DBAT0L);
+       write_bat(IBAT0, CFG_IBAT0U, CFG_IBAT0L);
+       write_bat(DBAT1, CFG_DBAT1U, CFG_DBAT1L);
+       write_bat(IBAT1, CFG_IBAT1U, CFG_IBAT1L);
+       write_bat(DBAT2, CFG_DBAT2U, CFG_DBAT2L);
+       write_bat(IBAT2, CFG_IBAT2U, CFG_IBAT2L);
+       write_bat(DBAT3, CFG_DBAT3U, CFG_DBAT3L);
+       write_bat(IBAT3, CFG_IBAT3U, CFG_IBAT3L);
+       write_bat(DBAT4, CFG_DBAT4U, CFG_DBAT4L);
+       write_bat(IBAT4, CFG_IBAT4U, CFG_IBAT4L);
+       write_bat(DBAT5, CFG_DBAT5U, CFG_DBAT5L);
+       write_bat(IBAT5, CFG_IBAT5U, CFG_IBAT5L);
+       write_bat(DBAT6, CFG_DBAT6U, CFG_DBAT6L);
+       write_bat(IBAT6, CFG_IBAT6U, CFG_IBAT6L);
+       write_bat(DBAT7, CFG_DBAT7U, CFG_DBAT7L);
+       write_bat(IBAT7, CFG_IBAT7U, CFG_IBAT7L);
+
+       return;
+}