cpu/mpc512x/pci.c: minor coding style cleanup
[platform/kernel/u-boot.git] / lib_ppc / board.c
index 10a4d37..e0d9ba4 100644 (file)
 #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
@@ -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 */
@@ -645,9 +660,8 @@ void board_init_f (ulong bootflag)
 void board_init_r (gd_t *id, ulong dest_addr)
 {
        cmd_tbl_t *cmdtp;
-       char *s, *e;
+       char *s;
        bd_t *bd;
-       int i;
        extern void malloc_bin_reloc (void);
 #ifndef CONFIG_ENV_IS_NOWHERE
        extern char * env_name_spec;
@@ -761,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: ");
 
@@ -818,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 ();
@@ -878,12 +892,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
        mac_read_from_eeprom();
 #endif
 
-       s = getenv ("ethaddr");
-               for (i = 0; i < 6; ++i) {
-                       bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0;
-                       if (s)
-                               s = (*e) ? e + 1 : e;
-               }
 #ifdef CONFIG_HERMES
        if ((gd->board_type >> 16) == 2)
                bd->bi_ethspeed = gd->board_type & 0xFFFF;
@@ -891,57 +899,25 @@ void board_init_r (gd_t *id, ulong dest_addr)
                bd->bi_ethspeed = 0xFFFF;
 #endif
 
+#ifdef CONFIG_CMD_NET
+       /* kept around for legacy kernels only ... ignore the next section */
+       eth_getenv_enetaddr("ethaddr", bd->bi_enetaddr);
 #ifdef CONFIG_HAS_ETH1
-       /* handle the 2nd ethernet address */
-
-       s = getenv ("eth1addr");
-
-       for (i = 0; i < 6; ++i) {
-               bd->bi_enet1addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
-               if (s)
-                       s = (*e) ? e + 1 : e;
-       }
+       eth_getenv_enetaddr("eth1addr", bd->bi_enet1addr);
 #endif
 #ifdef CONFIG_HAS_ETH2
-       /* handle the 3rd ethernet address */
-
-       s = getenv ("eth2addr");
-       for (i = 0; i < 6; ++i) {
-               bd->bi_enet2addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
-               if (s)
-                       s = (*e) ? e + 1 : e;
-       }
+       eth_getenv_enetaddr("eth2addr", bd->bi_enet2addr);
 #endif
-
 #ifdef CONFIG_HAS_ETH3
-       /* handle 4th ethernet address */
-       s = getenv("eth3addr");
-       for (i = 0; i < 6; ++i) {
-               bd->bi_enet3addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
-               if (s)
-                       s = (*e) ? e + 1 : e;
-       }
+       eth_getenv_enetaddr("eth3addr", bd->bi_enet3addr);
 #endif
-
 #ifdef CONFIG_HAS_ETH4
-       /* handle 5th ethernet address */
-       s = getenv("eth4addr");
-       for (i = 0; i < 6; ++i) {
-               bd->bi_enet4addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
-               if (s)
-                       s = (*e) ? e + 1 : e;
-       }
+       eth_getenv_enetaddr("eth4addr", bd->bi_enet4addr);
 #endif
-
 #ifdef CONFIG_HAS_ETH5
-       /* handle 6th ethernet address */
-       s = getenv("eth5addr");
-       for (i = 0; i < 6; ++i) {
-               bd->bi_enet5addr[i] = s ? simple_strtoul (s, &e, 16) : 0;
-               if (s)
-                       s = (*e) ? e + 1 : e;
-       }
+       eth_getenv_enetaddr("eth5addr", bd->bi_enet5addr);
 #endif
+#endif /* CONFIG_CMD_NET */
 
        /* IP Address */
        bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
@@ -1181,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 */
 /*