X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib_sh%2Fboard.c;h=5d61f0d74fe1b7f1f425468d6158c7bc97a16448;hb=f8d7b56e003fe19f37d4e9e326df9e9024a052b0;hp=c3f846257ff8afbe9a5be5c54910b335262bec10;hpb=b8685affe614ccf5f4ec66252b30e2e524d18948;p=u-boot diff --git a/lib_sh/board.c b/lib_sh/board.c index c3f846257f..5d61f0d74f 100644 --- a/lib_sh/board.c +++ b/lib_sh/board.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007 + * Copyright (C) 2007,2008 * Nobuhiro Iwamatsu * * This program is free software; you can redistribute it and/or @@ -21,8 +21,10 @@ #include #include #include -#include +#include +#include #include +#include #include #include @@ -30,40 +32,76 @@ extern void malloc_bin_reloc (void); extern int cpu_init(void); extern int board_init(void); extern int dram_init(void); -extern int watchdog_init(void); extern int timer_init(void); -const char version_string[] = U_BOOT_VERSION" (" __DATE__ " - " __TIME__ ")"; - -unsigned long monitor_flash_len = CFG_MONITOR_LEN; +const char version_string[] = U_BOOT_VERSION" ("U_BOOT_DATE" - "U_BOOT_TIME")"; -static unsigned long mem_malloc_start; -static unsigned long mem_malloc_end; -static unsigned long mem_malloc_brk; +unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN; -static void mem_malloc_init (void) +static int sh_flash_init(void) { + DECLARE_GLOBAL_DATA_PTR; - mem_malloc_start = (TEXT_BASE - CFG_GBL_DATA_SIZE - CFG_MALLOC_LEN); - mem_malloc_end = (mem_malloc_start + CFG_MALLOC_LEN - 16); - mem_malloc_brk = mem_malloc_start; - memset ((void *) mem_malloc_start, 0, - (mem_malloc_end - mem_malloc_start)); + gd->bd->bi_flashsize = flash_init(); + printf("FLASH: %ldMB\n", gd->bd->bi_flashsize / (1024*1024)); + + return 0; } -void *sbrk (ptrdiff_t increment) +#if defined(CONFIG_CMD_NAND) +# include +# define INIT_FUNC_NAND_INIT nand_init, +#else +# define INIT_FUNC_NAND_INIT +#endif /* CONFIG_CMD_NAND */ + +#if defined(CONFIG_WATCHDOG) +extern int watchdog_init(void); +extern int watchdog_disable(void); +# define INIT_FUNC_WATCHDOG_INIT watchdog_init, +# define WATCHDOG_DISABLE watchdog_disable +#else +# define INIT_FUNC_WATCHDOG_INIT +# define WATCHDOG_DISABLE +#endif /* CONFIG_WATCHDOG */ + +#if defined(CONFIG_CMD_IDE) +# include +# define INIT_FUNC_IDE_INIT ide_init, +#else +# define INIT_FUNC_IDE_INIT +#endif /* CONFIG_CMD_IDE */ + +#if defined(CONFIG_PCI) +#include +static int sh_pci_init(void) { - unsigned long old = mem_malloc_brk; - unsigned long new = old + increment; + pci_init(); + return 0; +} +# define INIT_FUNC_PCI_INIT sh_pci_init, +#else +# define INIT_FUNC_PCI_INIT +#endif /* CONFIG_PCI */ - if ((new < mem_malloc_start) || - (new > mem_malloc_end)) { - return NULL; - } +static int sh_mem_env_init(void) +{ + mem_malloc_init(TEXT_BASE - CONFIG_SYS_GBL_DATA_SIZE - + CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN - 16); + malloc_bin_reloc(); + env_relocate(); + jumptable_init(); + return 0; +} - mem_malloc_brk = new; - return (void *) old; +#if defined(CONFIG_CMD_NET) +static int sh_net_init(void) +{ + DECLARE_GLOBAL_DATA_PTR; + gd->bd->bi_ip_addr = getenv_IPaddr("ipaddr"); + return 0; } +#endif typedef int (init_fnc_t) (void); @@ -71,93 +109,98 @@ init_fnc_t *init_sequence[] = { cpu_init, /* basic cpu dependent setup */ board_init, /* basic board dependent setup */ - interrupt_init, /* set up exceptions */ + interrupt_init, /* set up exceptions */ env_init, /* event init */ - serial_init, /* SCIF init */ - watchdog_init, + serial_init, /* SCIF init */ + INIT_FUNC_WATCHDOG_INIT /* watchdog init */ console_init_f, display_options, checkcpu, - checkboard, + checkboard, /* Check support board */ dram_init, /* SDRAM init */ + timer_init, /* SuperH Timer (TCNT0 only) init */ + sh_mem_env_init, + sh_flash_init, /* Flash memory(NOR) init*/ + INIT_FUNC_NAND_INIT/* Flash memory (NAND) init */ + INIT_FUNC_PCI_INIT /* PCI init */ + stdio_init, + console_init_r, + interrupt_init, +#ifdef BOARD_LATE_INIT + board_late_init, +#endif +#if defined(CONFIG_CMD_NET) + sh_net_init, /* SH specific eth init */ +#endif NULL /* Terminate this list */ }; -void sh_generic_init (void) +void sh_generic_init(void) { DECLARE_GLOBAL_DATA_PTR; bd_t *bd; init_fnc_t **init_fnc_ptr; - char *s, *e; - int i; - memset (gd, 0, CFG_GBL_DATA_SIZE); + memset(gd, 0, CONFIG_SYS_GBL_DATA_SIZE); gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */ - gd->bd = (bd_t *) (gd + 1); /* At end of global data */ + gd->bd = (bd_t *)(gd + 1); /* At end of global data */ gd->baudrate = CONFIG_BAUDRATE; gd->cpu_clk = CONFIG_SYS_CLK_FREQ; bd = gd->bd; - bd->bi_memstart = CFG_SDRAM_BASE; - bd->bi_memsize = CFG_SDRAM_SIZE; - bd->bi_flashstart = CFG_FLASH_BASE; -#if defined(CFG_SRAM_BASE) && defined(CFG_SRAM_SIZE) - bd->bi_sramstart= CFG_SRAM_BASE; - bd->bi_sramsize = CFG_SRAM_SIZE; + bd->bi_memstart = CONFIG_SYS_SDRAM_BASE; + bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE; + bd->bi_flashstart = CONFIG_SYS_FLASH_BASE; +#if defined(CONFIG_SYS_SRAM_BASE) && defined(CONFIG_SYS_SRAM_SIZE) + bd->bi_sramstart = CONFIG_SYS_SRAM_BASE; + bd->bi_sramsize = CONFIG_SYS_SRAM_SIZE; #endif bd->bi_baudrate = CONFIG_BAUDRATE; for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { - if ((*init_fnc_ptr) () != 0) { + WATCHDOG_RESET(); + if ((*init_fnc_ptr) () != 0) hang(); - } } - - timer_init(); - - /* flash_init need timer_init().(TMU) */ - bd->bi_flashsize = flash_init(); - printf("FLASH: %dMB\n", bd->bi_flashsize / (1024*1024)); - - mem_malloc_init(); - malloc_bin_reloc(); - env_relocate(); -#if (CONFIG_COMMANDS & CFG_CMD_NET) - bd->bi_ip_addr = getenv_IPaddr ("ipaddr"); - 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; +#ifdef CONFIG_WATCHDOG + /* disable watchdog if environment is set */ + { + char *s = getenv("watchdog"); + if (s != NULL) + if (strncmp(s, "off", 3) == 0) + WATCHDOG_DISABLE(); } -#endif - devices_init(); - jumptable_init(); - console_init_r(); - interrupt_init(); -#ifdef BOARD_LATE_INIT - board_late_init (); -#endif -#if (CONFIG_COMMANDS & CFG_CMD_NET) -#if defined(CONFIG_NET_MULTI) - puts ("Net: "); -#endif - eth_initialize(gd->bd); -#endif +#endif /* CONFIG_WATCHDOG*/ + + +#if defined(CONFIG_CMD_NET) + { + char *s; + puts("Net: "); + eth_initialize(gd->bd); + + s = getenv("bootfile"); + if (s != NULL) + copy_filename(BootFile, s, sizeof(BootFile)); + } +#endif /* CONFIG_CMD_NET */ + while (1) { + WATCHDOG_RESET(); main_loop(); } } - /***********************************************************************/ -void hang (void) +void hang(void) { - puts ("Board ERROR \n"); - for (;;); + puts("Board ERROR\n"); + for (;;) + ; }