]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - lib_ppc/board.c
ppc: Clean up calling of misc_init_r() during init
[karo-tx-uboot.git] / lib_ppc / board.c
index a33ee27f2654bbaed05910d9560a6449a5740cbd..c6fb6fe5592e5bd6a471f4f8d6d97c01f8bba011 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
@@ -136,46 +136,11 @@ ulong monitor_flash_len;
 #include <bedbug/type.h>
 #endif
 
-/*
- * Begin and End of memory area for malloc(), and current "brk"
- */
-static ulong   mem_malloc_start = 0;
-static ulong   mem_malloc_end   = 0;
-static ulong   mem_malloc_brk   = 0;
-
 /************************************************************************
  * Utilities                                                           *
  ************************************************************************
  */
 
-/*
- * The Malloc area is immediately below the monitor copy in DRAM
- */
-static void mem_malloc_init (void)
-{
-#if !defined(CONFIG_RELOC_FIXUP_WORKS)
-       mem_malloc_end = CONFIG_SYS_MONITOR_BASE + gd->reloc_off;
-#endif
-       mem_malloc_start = mem_malloc_end - TOTAL_MALLOC_LEN;
-       mem_malloc_brk = mem_malloc_start;
-
-       memset ((void *) mem_malloc_start,
-               0,
-               mem_malloc_end - mem_malloc_start);
-}
-
-void *sbrk (ptrdiff_t increment)
-{
-       ulong old = mem_malloc_brk;
-       ulong new = old + increment;
-
-       if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
-               return (NULL);
-       }
-       mem_malloc_brk = new;
-       return ((void *) old);
-}
-
 /*
  * All attempts to come up with a "common" initialization sequence
  * that works for all boards and architectures failed: some of the
@@ -291,6 +256,9 @@ init_fnc_t *init_sequence[] = {
        board_early_init_f,
 #endif
 
+#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
+       probecpu,
+#endif
 #if !defined(CONFIG_8xx_CPUCLK_DEFAULT)
        get_clocks,             /* get CPU and bus clocks (etc.) */
 #if defined(CONFIG_TQM8xxL) && !defined(CONFIG_TQM866M) \
@@ -321,7 +289,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,
@@ -408,7 +376,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));
@@ -452,7 +420,7 @@ void board_init_f (ulong bootflag)
        /*
         * 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);
@@ -570,7 +538,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)
@@ -666,6 +634,7 @@ void board_init_r (gd_t *id, ulong dest_addr)
 #ifndef CONFIG_ENV_IS_NOWHERE
        extern char * env_name_spec;
 #endif
+       ulong malloc_start;
 
 #ifndef CONFIG_SYS_NO_FLASH
        ulong flash_size;
@@ -676,11 +645,18 @@ void board_init_r (gd_t *id, ulong dest_addr)
 
        gd->flags |= GD_FLG_RELOC;      /* tell others: relocation done */
 
+       /* The Malloc area is immediately below the monitor copy in DRAM */
 #if defined(CONFIG_RELOC_FIXUP_WORKS)
        gd->reloc_off = 0;
-       mem_malloc_end = dest_addr;
+       malloc_start = dest_addr - TOTAL_MALLOC_LEN;
 #else
        gd->reloc_off = dest_addr - CONFIG_SYS_MONITOR_BASE;
+       malloc_start = CONFIG_SYS_MONITOR_BASE + gd->reloc_off -
+                       TOTAL_MALLOC_LEN;
+#endif
+
+#if defined(CONFIG_MPC85xx) || defined(CONFIG_MPC86xx)
+       gd->cpu += gd->reloc_off;
 #endif
 
 #ifdef CONFIG_SERIAL_MULTI
@@ -750,7 +726,7 @@ 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
 
@@ -775,6 +751,9 @@ void board_init_r (gd_t *id, ulong dest_addr)
 
        asm ("sync ; isync");
 
+       mem_malloc_init (malloc_start, TOTAL_MALLOC_LEN);
+       malloc_bin_reloc ();
+
 #if !defined(CONFIG_SYS_NO_FLASH)
        puts ("FLASH: ");
 
@@ -832,10 +811,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 ();
@@ -932,8 +907,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 ();
@@ -946,17 +921,7 @@ void board_init_r (gd_t *id, ulong dest_addr)
        /* Initialize the console (after the relocation and devices init) */
        console_init_r ();
 
-#if defined(CONFIG_CCM)                || \
-    defined(CONFIG_COGENT)     || \
-    defined(CONFIG_CPCI405)    || \
-    defined(CONFIG_EVB64260)   || \
-    defined(CONFIG_KUP4K)      || \
-    defined(CONFIG_KUP4X)      || \
-    defined(CONFIG_LWMON)      || \
-    defined(CONFIG_PCU_E)      || \
-    defined(CONFIG_SC3)                || \
-    defined(CONFIG_W7O)                || \
-    defined(CONFIG_MISC_INIT_R)
+#if defined(CONFIG_MISC_INIT_R)
        /* miscellaneous platform dependent initialisations */
        misc_init_r ();
 #endif
@@ -1157,103 +1122,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 */
 /*