ppc: Unlock cache-as-ram in a consistent manner
[pandora-u-boot.git] / lib_ppc / board.c
index 3b93e4e..8def520 100644 (file)
@@ -25,7 +25,7 @@
 #include <watchdog.h>
 #include <command.h>
 #include <malloc.h>
-#include <devices.h>
+#include <stdio_dev.h>
 #ifdef CONFIG_8xx
 #include <mpc8xx.h>
 #endif
@@ -68,7 +68,7 @@
 #if defined(CONFIG_LOGBUFFER)
 #include <logbuff.h>
 #endif
-#if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500)
+#if defined(CONFIG_SYS_INIT_RAM_LOCK)
 #include <asm/cache.h>
 #endif
 #ifdef CONFIG_PS2KBD
 #include <asm/mmu.h>
 #endif
 
+#ifdef CONFIG_MP
+#include <asm/mp.h>
+#endif
+
 #ifdef CONFIG_SYS_UPDATE_FLASH_SIZE
 extern int update_flash_size (int flash_size);
 #endif
@@ -317,7 +321,7 @@ init_fnc_t *init_sequence[] = {
        prt_8260_rsr,
        prt_8260_clks,
 #endif /* CONFIG_8260 */
-#if defined(CONFIG_MPC83XX)
+#if defined(CONFIG_MPC83xx)
        prt_83xx_rsr,
 #endif
        checkcpu,
@@ -404,7 +408,7 @@ void board_init_f (ulong bootflag)
        /* compiler optimization barrier needed for GCC >= 3.4 */
        __asm__ __volatile__("": : :"memory");
 
-#if !defined(CONFIG_CPM2) && !defined(CONFIG_MPC83XX) && \
+#if !defined(CONFIG_CPM2) && !defined(CONFIG_MPC83xx) && \
     !defined(CONFIG_MPC85xx) && !defined(CONFIG_MPC86xx)
        /* Clear initial global data */
        memset ((void *) gd, 0, sizeof (gd_t));
@@ -444,6 +448,17 @@ void board_init_f (ulong bootflag)
 
        addr = CONFIG_SYS_SDRAM_BASE + get_effective_memsize();
 
+#if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
+       /*
+        * We need to make sure the location we intend to put secondary core
+        * boot code is reserved and not used by any part of u-boot
+        */
+       if (addr > determine_mp_bootpg()) {
+               addr = determine_mp_bootpg();
+               debug ("Reserving MP boot page to %08lx\n", addr);
+       }
+#endif
+
 #ifdef CONFIG_LOGBUFFER
 #ifndef CONFIG_ALT_LB_ADDR
        /* reserve kernel log buffer */
@@ -555,7 +570,7 @@ void board_init_f (ulong bootflag)
 #if defined(CONFIG_MPC5xxx)
        bd->bi_mbar_base = CONFIG_SYS_MBAR;     /* base of internal registers */
 #endif
-#if defined(CONFIG_MPC83XX)
+#if defined(CONFIG_MPC83xx)
        bd->bi_immrbar = CONFIG_SYS_IMMR;
 #endif
 #if defined(CONFIG_MPC8220)
@@ -735,12 +750,12 @@ void board_init_r (gd_t *id, ulong dest_addr)
 
        WATCHDOG_RESET();
 
-#if defined(CONFIG_SYS_DELAYED_ICACHE) || defined(CONFIG_MPC83XX)
+#if defined(CONFIG_SYS_DELAYED_ICACHE) || defined(CONFIG_MPC83xx)
        icache_enable ();       /* it's time to enable the instruction cache */
 #endif
 
-#if defined(CONFIG_SYS_INIT_RAM_LOCK) && defined(CONFIG_E500)
-       unlock_ram_in_cache();  /* it's time to unlock D-cache in e500 */
+#if defined(CONFIG_SYS_INIT_RAM_LOCK)
+       unlock_ram_in_cache();  /* it's time to unlock D-cache */
 #endif
 
 #if defined(CONFIG_BAB7xx) || defined(CONFIG_CPC45)
@@ -760,6 +775,10 @@ void board_init_r (gd_t *id, ulong dest_addr)
 
        asm ("sync ; isync");
 
+       /* initialize malloc() area */
+       mem_malloc_init ();
+       malloc_bin_reloc ();
+
 #if !defined(CONFIG_SYS_NO_FLASH)
        puts ("FLASH: ");
 
@@ -817,10 +836,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
 
        WATCHDOG_RESET ();
 
-       /* initialize malloc() area */
-       mem_malloc_init ();
-       malloc_bin_reloc ();
-
 #ifdef CONFIG_SPI
 # if !defined(CONFIG_ENV_IS_IN_EEPROM)
        spi_init_f ();
@@ -917,8 +932,8 @@ void board_init_r (gd_t *id, ulong dest_addr)
 #endif
 
 /** leave this here (after malloc(), environment and PCI are working) **/
-       /* Initialize devices */
-       devices_init ();
+       /* Initialize stdio devices */
+       stdio_init ();
 
        /* Initialize the jump table for applications */
        jumptable_init ();
@@ -1142,103 +1157,6 @@ void hang (void)
        for (;;);
 }
 
-#ifdef CONFIG_MODEM_SUPPORT
-/* called from main loop (common/main.c) */
-/* 'inline' - We have to do it fast */
-static inline void mdm_readline(char *buf, int bufsiz)
-{
-       char c;
-       char *p;
-       int n;
-
-       n = 0;
-       p = buf;
-       for(;;) {
-               c = serial_getc();
-
-               /*              dbg("(%c)", c); */
-
-               switch(c) {
-               case '\r':
-                       break;
-               case '\n':
-                       *p = '\0';
-                       return;
-
-               default:
-                       if(n++ > bufsiz) {
-                               *p = '\0';
-                               return; /* sanity check */
-                       }
-                       *p = c;
-                       p++;
-                       break;
-               }
-       }
-}
-
-extern void  dbg(const char *fmt, ...);
-int mdm_init (void)
-{
-       char env_str[16];
-       char *init_str;
-       int i;
-       extern char console_buffer[];
-       extern void enable_putc(void);
-       extern int hwflow_onoff(int);
-
-       enable_putc(); /* enable serial_putc() */
-
-#ifdef CONFIG_HWFLOW
-       init_str = getenv("mdm_flow_control");
-       if (init_str && (strcmp(init_str, "rts/cts") == 0))
-               hwflow_onoff (1);
-       else
-               hwflow_onoff(-1);
-#endif
-
-       for (i = 1;;i++) {
-               sprintf(env_str, "mdm_init%d", i);
-               if ((init_str = getenv(env_str)) != NULL) {
-                       serial_puts(init_str);
-                       serial_puts("\n");
-                       for(;;) {
-                               mdm_readline(console_buffer, CONFIG_SYS_CBSIZE);
-                               dbg("ini%d: [%s]", i, console_buffer);
-
-                               if ((strcmp(console_buffer, "OK") == 0) ||
-                                       (strcmp(console_buffer, "ERROR") == 0)) {
-                                       dbg("ini%d: cmd done", i);
-                                       break;
-                               } else /* in case we are originating call ... */
-                                       if (strncmp(console_buffer, "CONNECT", 7) == 0) {
-                                               dbg("ini%d: connect", i);
-                                               return 0;
-                                       }
-                       }
-               } else
-                       break; /* no init string - stop modem init */
-
-               udelay(100000);
-       }
-
-       udelay(100000);
-
-       /* final stage - wait for connect */
-       for(;i > 1;) { /* if 'i' > 1 - wait for connection
-                                 message from modem */
-               mdm_readline(console_buffer, CONFIG_SYS_CBSIZE);
-               dbg("ini_f: [%s]", console_buffer);
-               if (strncmp(console_buffer, "CONNECT", 7) == 0) {
-                       dbg("ini_f: connected");
-                       return 0;
-               }
-       }
-
-       return 0;
-}
-
-#endif
 
 #if 0 /* We could use plain global data, but the resulting code is bigger */
 /*