#include <net.h>
#include <environment.h>
+DECLARE_GLOBAL_DATA_PTR;
+
#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)
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;
/*
* 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;
mem_malloc_end = dest_addr;
static int init_func_ram (void)
{
- DECLARE_GLOBAL_DATA_PTR;
-
#ifdef CONFIG_BOARD_TYPES
int board_type = gd->board_type;
#else
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)
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 *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;
+ /* 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) {
*/
addr = CFG_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
+ 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
- */
+ /* 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 %d 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 %d Bytes for Global Data at: %08lx\n",
sizeof (gd_t), addr_sp);
-#endif
- /* Reserve memory for boot params.
- */
+ /* Reserve memory for boot params.
+ */
addr_sp -= CFG_BOOTPARAMS_LEN;
bd->bi_boot_params = addr_sp;
-#ifdef DEBUG
- printf ("Reserving %dk for malloc() at: %08lx\n",
+ debug ("Reserving %dk for boot params() at: %08lx\n",
CFG_BOOTPARAMS_LEN >> 10, addr_sp);
-#endif
/*
* 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
*/
void board_init_r (gd_t *id, ulong dest_addr)
{
- DECLARE_GLOBAL_DATA_PTR;
cmd_tbl_t *cmdtp;
ulong size;
extern void malloc_bin_reloc (void);
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;
/* 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 ();
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
#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