]> git.sur5r.net Git - u-boot/blobdiff - lib_microblaze/board.c
common: delete CONFIG_SYS_64BIT_VSPRINTF and CONFIG_SYS_64BIT_STRTOUL
[u-boot] / lib_microblaze / board.c
index 3e3fb3762ca94f2b83f506c623b932b2c4865f4a..200ea5dd7015c77d6b82dc8f02e68f39a1ca5b5e 100644 (file)
@@ -1,6 +1,8 @@
 /*
+ * (C) Copyright 2007 Michal Simek
  * (C) Copyright 2004 Atmark Techno, Inc.
  *
+ * Michal  SIMEK <monstr@monstr.eu>
  * Yasushi SHOJI <yashi@atmark-techno.com>
  *
  * See file CREDITS for list of people who contributed to this
@@ -13,7 +15,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
 #include <common.h>
 #include <command.h>
 #include <malloc.h>
+#include <timestamp.h>
 #include <version.h>
+#include <watchdog.h>
 
-const char version_string[] =
-       U_BOOT_VERSION" (" __DATE__ " - " __TIME__ ")";
+DECLARE_GLOBAL_DATA_PTR;
 
-/*
- * Begin and End of memory area for malloc(), and current "brk"
- */
-static ulong mem_malloc_start;
-static ulong mem_malloc_end;
-static ulong mem_malloc_brk;
-
-
-void *sbrk (ptrdiff_t increment)
-{
-       ulong old = mem_malloc_brk;
-       ulong new = old + increment;
+const char version_string[] = U_BOOT_VERSION " ("U_BOOT_DATE" - "U_BOOT_TIME")";
 
-       if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
-               return (NULL);
-       }
-       mem_malloc_brk = new;
-       return ((void *) old);
-}
+#ifdef CONFIG_SYS_GPIO_0
+extern int gpio_init (void);
+#endif
+#ifdef CONFIG_SYS_INTC_0
+extern int interrupts_init (void);
+#endif
+#if defined(CONFIG_CMD_NET)
+extern int eth_init (bd_t * bis);
+extern int getenv_IPaddr (char *);
+#endif
 
 /*
  * All attempts to come up with a "common" initialization sequence
@@ -65,12 +61,103 @@ void *sbrk (ptrdiff_t increment)
 typedef int (init_fnc_t) (void);
 
 init_fnc_t *init_sequence[] = {
-       serial_init,            /* serial communications setup */
+       env_init,
+       serial_init,
+#ifdef CONFIG_SYS_GPIO_0
+       gpio_init,
+#endif
+#ifdef CONFIG_SYS_INTC_0
+       interrupts_init,
+#endif
        NULL,
 };
 
+void board_init (void)
+{
+       bd_t *bd;
+       init_fnc_t **init_fnc_ptr;
+       gd = (gd_t *) CONFIG_SYS_GBL_DATA_OFFSET;
+#if defined(CONFIG_CMD_FLASH)
+       ulong flash_size = 0;
+#endif
+       asm ("nop");    /* FIXME gd is not initialize - wait */
+       memset ((void *)gd, 0, CONFIG_SYS_GBL_DATA_SIZE);
+       gd->bd = (bd_t *) (gd + 1);     /* At end of global data */
+       gd->baudrate = CONFIG_BAUDRATE;
+       bd = gd->bd;
+       bd->bi_baudrate = CONFIG_BAUDRATE;
+       bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
+       bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
+       gd->flags |= GD_FLG_RELOC;      /* tell others: relocation done */
+
+       /*
+        * The Malloc area is immediately below the monitor copy in DRAM
+        * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
+        * as our monitory code is run from SDRAM
+        */
+       mem_malloc_init (CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN);
+
+       for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
+               WATCHDOG_RESET ();
+               if ((*init_fnc_ptr) () != 0) {
+                       hang ();
+               }
+       }
+
+       puts ("SDRAM :\n");
+       printf ("\t\tIcache:%s\n", icache_status() ? "OK" : "FAIL");
+       printf ("\t\tDcache:%s\n", dcache_status() ? "OK" : "FAIL");
+       printf ("\tU-Boot Start:0x%08x\n", TEXT_BASE);
+
+#if defined(CONFIG_CMD_FLASH)
+       puts ("FLASH: ");
+       bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
+       if (0 < (flash_size = flash_init ())) {
+               bd->bi_flashsize = flash_size;
+               bd->bi_flashoffset = CONFIG_SYS_FLASH_BASE + flash_size;
+# ifdef CONFIG_SYS_FLASH_CHECKSUM
+               print_size (flash_size, "");
+               /*
+                * Compute and print flash CRC if flashchecksum is set to 'y'
+                *
+                * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX
+                */
+               s = getenv ("flashchecksum");
+               if (s && (*s == 'y')) {
+                       printf ("  CRC: %08X",
+                               crc32 (0, (const unsigned char *) CONFIG_SYS_FLASH_BASE, flash_size)
+                       );
+               }
+               putc ('\n');
+# else /* !CONFIG_SYS_FLASH_CHECKSUM */
+               print_size (flash_size, "\n");
+# endif /* CONFIG_SYS_FLASH_CHECKSUM */
+       } else {
+               puts ("Flash init FAILED");
+               bd->bi_flashstart = 0;
+               bd->bi_flashsize = 0;
+               bd->bi_flashoffset = 0;
+       }
+#endif
+
+#if defined(CONFIG_CMD_NET)
+       /* IP Address */
+       bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
+       eth_init (bd);
+#endif
+
+       /* relocate environment function pointers etc. */
+       env_relocate ();
+
+       /* main_loop */
+       for (;;) {
+               WATCHDOG_RESET ();
+               main_loop ();
+       }
+}
+
 void hang (void)
 {
        puts ("### ERROR ### Please RESET the board ###\n");
-       for (;;);
+       for (;;) ;
 }