#include <stdio_dev.h>
#include <environment.h>
#include <malloc.h>
+#include <mmc.h>
#include <net.h>
#include <timestamp.h>
#include <status_led.h>
#include <asm/cplb.h>
#include <asm/mach-common/bits/mpu.h>
+#include <kgdb.h>
#ifdef CONFIG_CMD_NAND
#include <nand.h> /* cannot even include nand.h if it isnt configured */
#endif
+#ifdef CONFIG_BITBANGMII
+#include <miiphy.h>
+#endif
+
#if defined(CONFIG_POST)
#include <post.h>
int post_flag;
#endif
}
-static void *mem_malloc_start, *mem_malloc_end, *mem_malloc_brk;
-
-static void mem_malloc_init(void)
-{
- mem_malloc_start = (void *)CONFIG_SYS_MALLOC_BASE;
- mem_malloc_end = (void *)(CONFIG_SYS_MALLOC_BASE + CONFIG_SYS_MALLOC_LEN);
- mem_malloc_brk = mem_malloc_start;
- memset(mem_malloc_start, 0, mem_malloc_end - mem_malloc_start);
-}
-
-void *sbrk(ptrdiff_t increment)
-{
- void *old = mem_malloc_brk;
- void *new = old + increment;
-
- if (new < mem_malloc_start || new > mem_malloc_end)
- return NULL;
-
- mem_malloc_brk = new;
-
- return old;
-}
-
static int display_banner(void)
{
printf("\n\n%s\n\n", version_string);
dcplb_add(0xFF800000, L1_DMEMORY);
++i;
- icplb_add(CONFIG_SYS_MONITOR_BASE & CPLB_PAGE_MASK, SDRAM_IKERNEL);
- dcplb_add(CONFIG_SYS_MONITOR_BASE & CPLB_PAGE_MASK, SDRAM_DKERNEL);
- ++i;
+ if (CONFIG_MEM_SIZE) {
+ uint32_t mbase = CONFIG_SYS_MONITOR_BASE;
+ uint32_t mend = mbase + CONFIG_SYS_MONITOR_LEN;
+ mbase &= CPLB_PAGE_MASK;
+ mend &= CPLB_PAGE_MASK;
- /* If the monitor crosses a 4 meg boundary, we'll need
- * to lock two entries for it.
- */
- if ((CONFIG_SYS_MONITOR_BASE & CPLB_PAGE_MASK) != ((CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN) & CPLB_PAGE_MASK)) {
- icplb_add((CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN) & CPLB_PAGE_MASK, SDRAM_IKERNEL);
- dcplb_add((CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN) & CPLB_PAGE_MASK, SDRAM_DKERNEL);
+ icplb_add(mbase, SDRAM_IKERNEL);
+ dcplb_add(mbase, SDRAM_DKERNEL);
++i;
+
+ /*
+ * If the monitor crosses a 4 meg boundary, we'll need
+ * to lock two entries for it. We assume it doesn't
+ * cross two 4 meg boundaries ...
+ */
+ if (mbase != mend) {
+ icplb_add(mend, SDRAM_IKERNEL);
+ dcplb_add(mend, SDRAM_DKERNEL);
+ ++i;
+ }
}
icplb_add(0x20000000, SDRAM_INON_CHBL);
bd->bi_vco = get_vco();
bd->bi_cclk = get_cclk();
bd->bi_sclk = get_sclk();
+ bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
+ bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
/* Initialize */
serial_early_puts("IRQ init\n");
printf("System: %s MHz\n", strmhz(buf, get_sclk()));
printf("RAM: ");
- print_size(initdram(0), "\n");
+ print_size(bd->bi_memsize, "\n");
#if defined(CONFIG_POST)
post_init_f();
post_bootmode_init();
static void board_net_init_r(bd_t *bd)
{
+#ifdef CONFIG_BITBANGMII
+ bb_miiphy_init();
+#endif
#ifdef CONFIG_CMD_NET
- uchar enetaddr[6];
char *s;
if ((s = getenv("bootfile")) != NULL)
printf("Net: ");
eth_initialize(gd->bd);
-
- eth_getenv_enetaddr("ethaddr", enetaddr);
- printf("MAC: %pM\n", enetaddr);
#endif
}
void board_init_r(gd_t * id, ulong dest_addr)
{
- extern void malloc_bin_reloc(void);
char *s;
bd_t *bd;
gd = id;
#endif
/* initialize malloc() area */
- mem_malloc_init();
- malloc_bin_reloc();
+ mem_malloc_init(CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN);
#if !defined(CONFIG_SYS_NO_FLASH)
/* Initialize the flash and protect u-boot by default */
nand_init(); /* go init the NAND */
#endif
+#ifdef CONFIG_GENERIC_MMC
+ puts("MMC: ");
+ mmc_initialize(bd);
+#endif
+
/* relocate environment function pointers etc. */
env_relocate();
/* Initialize the console (after the relocation and devices init) */
console_init_r();
+#ifdef CONFIG_CMD_KGDB
+ puts("KGDB: ");
+ kgdb_init();
+#endif
+
#ifdef CONFIG_STATUS_LED
status_led_set(STATUS_LED_BOOT, STATUS_LED_BLINKING);
status_led_set(STATUS_LED_CRASH, STATUS_LED_OFF);