#include <common.h>
#include <command.h>
#include <malloc.h>
-#include <devices.h>
-#include <syscall.h>
+#include <stdio_dev.h>
+#include <timestamp.h>
#include <version.h>
#include <net.h>
#include <environment.h>
+#include <nand.h>
+#include <onenand_uboot.h>
+#include <spi.h>
-#if ( ((CFG_ENV_ADDR+CFG_ENV_SIZE) < CFG_MONITOR_BASE) || \
- (CFG_ENV_ADDR >= (CFG_MONITOR_BASE + CFG_MONITOR_LEN)) ) || \
- defined(CFG_ENV_IS_IN_NVRAM)
-#define TOTAL_MALLOC_LEN (CFG_MALLOC_LEN + CFG_ENV_SIZE)
+DECLARE_GLOBAL_DATA_PTR;
+
+#if ( ((CONFIG_ENV_ADDR+CONFIG_ENV_SIZE) < CONFIG_SYS_MONITOR_BASE) || \
+ (CONFIG_ENV_ADDR >= (CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)) ) || \
+ defined(CONFIG_ENV_IS_IN_NVRAM)
+#define TOTAL_MALLOC_LEN (CONFIG_SYS_MALLOC_LEN + CONFIG_ENV_SIZE)
#else
-#define TOTAL_MALLOC_LEN CFG_MALLOC_LEN
+#define TOTAL_MALLOC_LEN CONFIG_SYS_MALLOC_LEN
#endif
#undef DEBUG
extern int timer_init(void);
+extern int incaip_set_cpuclk(void);
+
extern ulong uboot_end_data;
extern ulong uboot_end;
ulong monitor_flash_len;
const char version_string[] =
- U_BOOT_VERSION" (" __DATE__ " - " __TIME__ ")";
+ U_BOOT_VERSION" (" U_BOOT_DATE " - " U_BOOT_TIME ")";
static char *failed = "*** failed ***\n";
static ulong mem_malloc_end;
static ulong mem_malloc_brk;
+/*
+ * mips_io_port_base is the begin of the address space to which x86 style
+ * I/O ports are mapped.
+ */
+unsigned long mips_io_port_base = -1;
+
+int __board_early_init_f(void)
+{
+ /*
+ * Nothing to do in this dummy implementation
+ */
+ return 0;
+}
+int board_early_init_f(void) __attribute__((weak, alias("__board_early_init_f")));
/*
* The Malloc area is immediately below the monitor copy in DRAM
*/
static void mem_malloc_init (void)
{
- DECLARE_GLOBAL_DATA_PTR;
-
- ulong dest_addr = CFG_MONITOR_BASE + gd->reloc_off;
+ ulong dest_addr = CONFIG_SYS_MONITOR_BASE + gd->reloc_off;
mem_malloc_end = dest_addr;
mem_malloc_start = dest_addr - TOTAL_MALLOC_LEN;
static int init_func_ram (void)
{
- DECLARE_GLOBAL_DATA_PTR;
-
#ifdef CONFIG_BOARD_TYPES
int board_type = gd->board_type;
#else
return (0);
}
+#ifndef CONFIG_SYS_NO_FLASH
static void display_flash_config(ulong size)
{
puts ("Flash: ");
print_size (size, "\n");
}
-
+#endif
static int init_baudrate (void)
{
- DECLARE_GLOBAL_DATA_PTR;
-
- uchar tmp[64]; /* long enough for environment variables */
+ char tmp[64]; /* long enough for environment variables */
int i = getenv_r ("baudrate", tmp, sizeof (tmp));
gd->baudrate = (i > 0)
typedef int (init_fnc_t) (void);
init_fnc_t *init_sequence[] = {
+ board_early_init_f,
timer_init,
env_init, /* initialize environment */
+#ifdef CONFIG_INCA_IP
+ incaip_set_cpuclk, /* set cpu clock according to environment variable */
+#endif
init_baudrate, /* initialze baudrate settings */
serial_init, /* serial communications setup */
console_init_f,
void board_init_f(ulong bootflag)
{
- DECLARE_GLOBAL_DATA_PTR;
-
gd_t gd_data, *id;
bd_t *bd;
init_fnc_t **init_fnc_ptr;
- ulong addr, addr_sp, len = (ulong)&uboot_end - CFG_MONITOR_BASE;
+ ulong addr, addr_sp, len = (ulong)&uboot_end - CONFIG_SYS_MONITOR_BASE;
+ ulong *s;
#ifdef CONFIG_PURPLE
void copy_code (ulong);
#endif
- /* Pointer is writable since we allocated a register for it.
- */
+ /* Pointer is writable since we allocated a register for it.
+ */
gd = &gd_data;
- memset (gd, 0, sizeof (gd_t));
+ /* compiler optimization barrier needed for GCC >= 3.4 */
+ __asm__ __volatile__("": : :"memory");
+
+ memset ((void *)gd, 0, sizeof (gd_t));
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
* Now that we have DRAM mapped and working, we can
* relocate the code and continue running from DRAM.
*/
- addr = CFG_SDRAM_BASE + gd->ram_size;
+ addr = CONFIG_SYS_SDRAM_BASE + gd->ram_size;
- /* We can reserve some RAM "on top" here.
- */
+ /* We can reserve some RAM "on top" here.
+ */
- /* round down to next 4 kB limit.
- */
+ /* round down to next 4 kB limit.
+ */
addr &= ~(4096 - 1);
-#ifdef DEBUG
- printf ("Top of RAM usable for U-Boot at: %08lx\n", addr);
-#endif
-
- /* Reserve memory for U-Boot code, data & bss
- * round down to next 16 kB limit
- */
+ debug ("Top of RAM usable for U-Boot at: %08lx\n", addr);
+
+ /* Reserve memory for U-Boot code, data & bss
+ * round down to next 16 kB limit
+ */
addr -= len;
addr &= ~(16 * 1024 - 1);
-#ifdef DEBUG
- printf ("Reserving %ldk for U-Boot at: %08lx\n", len >> 10, addr);
-#endif
+ debug ("Reserving %ldk for U-Boot at: %08lx\n", len >> 10, addr);
- /* Reserve memory for malloc() arena.
- */
+ /* Reserve memory for malloc() arena.
+ */
addr_sp = addr - TOTAL_MALLOC_LEN;
-#ifdef DEBUG
- printf ("Reserving %dk for malloc() at: %08lx\n",
+ debug ("Reserving %dk for malloc() at: %08lx\n",
TOTAL_MALLOC_LEN >> 10, addr_sp);
-#endif
/*
* (permanently) allocate a Board Info struct
addr_sp -= sizeof(bd_t);
bd = (bd_t *)addr_sp;
gd->bd = bd;
-#ifdef DEBUG
- printf ("Reserving %d Bytes for Board Info at: %08lx\n",
+ debug ("Reserving %zu Bytes for Board Info at: %08lx\n",
sizeof(bd_t), addr_sp);
-#endif
+
addr_sp -= sizeof(gd_t);
id = (gd_t *)addr_sp;
-#ifdef DEBUG
- printf ("Reserving %d Bytes for Global Data at: %08lx\n",
+ debug ("Reserving %zu Bytes for Global Data at: %08lx\n",
sizeof (gd_t), addr_sp);
-#endif
- /* Reserve memory for boot params.
- */
- addr_sp -= CFG_BOOTPARAMS_LEN;
+ /* Reserve memory for boot params.
+ */
+ addr_sp -= CONFIG_SYS_BOOTPARAMS_LEN;
bd->bi_boot_params = addr_sp;
-#ifdef DEBUG
- printf ("Reserving %dk for malloc() at: %08lx\n",
- CFG_BOOTPARAMS_LEN >> 10, addr_sp);
-#endif
+ debug ("Reserving %dk for boot params() at: %08lx\n",
+ CONFIG_SYS_BOOTPARAMS_LEN >> 10, addr_sp);
/*
* Finally, we set up a new (bigger) stack.
*/
addr_sp -= 16;
addr_sp &= ~0xF;
- *((ulong *) addr_sp)-- = 0;
- *((ulong *) addr_sp)-- = 0;
-#ifdef DEBUG
- printf ("Stack Pointer at: %08lx\n", addr_sp);
-#endif
+ s = (ulong *)addr_sp;
+ *s-- = 0;
+ *s-- = 0;
+ addr_sp = (ulong)s;
+ debug ("Stack Pointer at: %08lx\n", addr_sp);
+
/*
* Save local variables to board info struct
*/
- bd->bi_memstart = CFG_SDRAM_BASE; /* start of DRAM memory */
+ bd->bi_memstart = CONFIG_SYS_SDRAM_BASE; /* start of DRAM memory */
bd->bi_memsize = gd->ram_size; /* size of DRAM memory in bytes */
bd->bi_baudrate = gd->baudrate; /* Console Baudrate */
- memcpy (id, gd, sizeof (gd_t));
+ memcpy (id, (void *)gd, sizeof (gd_t));
/* On the purple board we copy the code in a special way
* in order to solve flash problems
void board_init_r (gd_t *id, ulong dest_addr)
{
- DECLARE_GLOBAL_DATA_PTR;
-
cmd_tbl_t *cmdtp;
+#ifndef CONFIG_SYS_NO_FLASH
ulong size;
+#endif
extern void malloc_bin_reloc (void);
-#ifndef CFG_ENV_IS_NOWHERE
+#ifndef CONFIG_ENV_IS_NOWHERE
extern char * env_name_spec;
#endif
- char *s, *e;
+ char *s;
bd_t *bd;
- int i;
gd = id;
gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */
-#ifdef DEBUG
- printf ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
-#endif
+ debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
- gd->reloc_off = dest_addr - CFG_MONITOR_BASE;
+ gd->reloc_off = dest_addr - CONFIG_SYS_MONITOR_BASE;
monitor_flash_len = (ulong)&uboot_end_data - dest_addr;
/*
* We have to relocate the command table manually
*/
- for (cmdtp = &cmd_tbl[0]; cmdtp->name; cmdtp++) {
+ for (cmdtp = &__u_boot_cmd_start; cmdtp != &__u_boot_cmd_end; cmdtp++) {
ulong addr;
addr = (ulong) (cmdtp->cmd) + gd->reloc_off;
addr = (ulong)(cmdtp->usage) + gd->reloc_off;
cmdtp->usage = (char *)addr;
}
-#ifdef CFG_LONGHELP
+#ifdef CONFIG_SYS_LONGHELP
if (cmdtp->help) {
addr = (ulong)(cmdtp->help) + gd->reloc_off;
cmdtp->help = (char *)addr;
#endif
}
/* there are some other pointer constants we must deal with */
-#ifndef CFG_ENV_IS_NOWHERE
+#ifndef CONFIG_ENV_IS_NOWHERE
env_name_spec += gd->reloc_off;
#endif
-
+
+ bd = gd->bd;
+
+ /* initialize malloc() area */
+ mem_malloc_init();
+ malloc_bin_reloc();
+
+#ifndef CONFIG_SYS_NO_FLASH
/* configure available FLASH banks */
size = flash_init();
display_flash_config (size);
-
- bd = gd->bd;
- bd->bi_flashstart = CFG_FLASH_BASE;
bd->bi_flashsize = size;
-#if CFG_MONITOR_BASE == CFG_FLASH_BASE
+#endif
+
+ bd->bi_flashstart = CONFIG_SYS_FLASH_BASE;
+#if CONFIG_SYS_MONITOR_BASE == CONFIG_SYS_FLASH_BASE
bd->bi_flashoffset = monitor_flash_len; /* reserved area for U-Boot */
#else
bd->bi_flashoffset = 0;
#endif
- /* initialize malloc() area */
- mem_malloc_init();
- malloc_bin_reloc();
+#ifdef CONFIG_CMD_NAND
+ puts ("NAND: ");
+ nand_init (); /* go init the NAND */
+#endif
+
+#if defined(CONFIG_CMD_ONENAND)
+ onenand_init();
+#endif
/* relocate environment function pointers etc. */
env_relocate();
- /* board MAC address */
- 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;
- }
-
/* IP Address */
bd->bi_ip_addr = getenv_IPaddr("ipaddr");
+#if defined(CONFIG_PCI)
+ /*
+ * Do pci configuration
+ */
+ pci_init();
+#endif
+
/** leave this here (after malloc(), environment and PCI are working) **/
- /* Initialize devices */
- devices_init ();
+ /* Initialize stdio devices */
+ stdio_init ();
- /* allocate syscalls table (console_init_r will fill it in */
- syscall_tbl = (void **) malloc (NR_SYSCALLS * sizeof (void *));
+ jumptable_init ();
/* Initialize the console (after the relocation and devices init) */
console_init_r ();
if ((s = getenv ("loadaddr")) != NULL) {
load_addr = simple_strtoul (s, NULL, 16);
}
-#if (CONFIG_COMMANDS & CFG_CMD_NET)
+#if defined(CONFIG_CMD_NET)
if ((s = getenv ("bootfile")) != NULL) {
copy_filename (BootFile, s, sizeof (BootFile));
}
-#endif /* CFG_CMD_NET */
+#endif
+
+#ifdef CONFIG_CMD_SPI
+ puts ("SPI: ");
+ spi_init (); /* go init the SPI */
+ puts ("ready\n");
+#endif
#if defined(CONFIG_MISC_INIT_R)
/* miscellaneous platform dependent initialisations */
misc_init_r ();
#endif
-#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#if defined(CONFIG_CMD_NET)
+#if defined(CONFIG_NET_MULTI)
puts ("Net: ");
+#endif
eth_initialize(gd->bd);
#endif
puts ("### ERROR ### Please RESET the board ###\n");
for (;;);
}
-