#include <common.h>
#include <command.h>
-#include <devices.h>
+#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);
static void display_global_data(void)
{
-#ifdef CONFIG_DEBUG_EARLY_SERIAL
bd_t *bd;
+
+#ifndef CONFIG_DEBUG_EARLY_SERIAL
+ return;
+#endif
+
bd = gd->bd;
- printf(" gd: %x\n", gd);
- printf(" |-flags: %x\n", gd->flags);
- printf(" |-board_type: %x\n", gd->board_type);
- printf(" |-baudrate: %i\n", gd->baudrate);
- printf(" |-have_console: %x\n", gd->have_console);
- printf(" |-ram_size: %x\n", gd->ram_size);
- printf(" |-reloc_off: %x\n", gd->reloc_off);
- printf(" |-env_addr: %x\n", gd->env_addr);
- printf(" |-env_valid: %x\n", gd->env_valid);
- printf(" |-jt(%x): %x\n", gd->jt, *(gd->jt));
- printf(" \\-bd: %x\n", gd->bd);
+ printf(" gd: %p\n", gd);
+ printf(" |-flags: %lx\n", gd->flags);
+ printf(" |-board_type: %lx\n", gd->board_type);
+ printf(" |-baudrate: %lu\n", gd->baudrate);
+ printf(" |-have_console: %lx\n", gd->have_console);
+ printf(" |-ram_size: %lx\n", gd->ram_size);
+ printf(" |-env_addr: %lx\n", gd->env_addr);
+ printf(" |-env_valid: %lx\n", gd->env_valid);
+ printf(" |-jt(%p): %p\n", gd->jt, *(gd->jt));
+ printf(" \\-bd: %p\n", gd->bd);
printf(" |-bi_baudrate: %x\n", bd->bi_baudrate);
- printf(" |-bi_ip_addr: %x\n", bd->bi_ip_addr);
- printf(" |-bi_boot_params: %x\n", bd->bi_boot_params);
- printf(" |-bi_memstart: %x\n", bd->bi_memstart);
- printf(" |-bi_memsize: %x\n", bd->bi_memsize);
- printf(" |-bi_flashstart: %x\n", bd->bi_flashstart);
- printf(" |-bi_flashsize: %x\n", bd->bi_flashsize);
- printf(" \\-bi_flashoffset: %x\n", bd->bi_flashoffset);
-#endif
+ printf(" |-bi_ip_addr: %lx\n", bd->bi_ip_addr);
+ printf(" |-bi_boot_params: %lx\n", bd->bi_boot_params);
+ printf(" |-bi_memstart: %lx\n", bd->bi_memstart);
+ printf(" |-bi_memsize: %lx\n", bd->bi_memsize);
+ printf(" |-bi_flashstart: %lx\n", bd->bi_flashstart);
+ printf(" |-bi_flashsize: %lx\n", bd->bi_flashsize);
+ printf(" \\-bi_flashoffset: %lx\n", bd->bi_flashoffset);
}
#define CPLB_PAGE_SIZE (4 * 1024 * 1024)
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);
* "continue" and != 0 means "fatal error, hang the system".
*/
+extern int watchdog_init(void);
extern int exception_init(void);
extern int irq_init(void);
extern int timer_init(void);
dcache_enable();
#endif
+#ifdef CONFIG_WATCHDOG
+ serial_early_puts("Setting up external watchdog\n");
+ watchdog_init();
+#endif
+
#ifdef DEBUG
if (CONFIG_SYS_GBL_DATA_SIZE < sizeof(*gd))
hang();
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;
post_reloc();
#endif
+ /* initialize malloc() area */
+ 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 */
extern flash_info_t flash_info[];
bd->bi_flashsize = 0;
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
+#ifdef CONFIG_GENERIC_MMC
+ puts("MMC: ");
+ mmc_initialize(bd);
+#endif
+
/* relocate environment function pointers etc. */
env_relocate();
- /* Initialize devices */
- devices_init();
+ /* Initialize stdio devices */
+ stdio_init();
jumptable_init();
/* 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);
post_run(NULL, POST_RAM | post_bootmode_get(0));
#endif
+ if (bfin_os_log_check()) {
+ puts("\nLog buffer from operating system:\n");
+ bfin_os_log_dump();
+ puts("\n");
+ }
+
/* main_loop() can return to retry autoboot, if so just run it again. */
for (;;)
main_loop();