diff options
author | Yang Zhang <yang.z.zhang@intel.com> | 2015-08-28 09:58:54 +0800 |
---|---|---|
committer | Yang Zhang <yang.z.zhang@intel.com> | 2015-09-01 12:44:00 +0800 |
commit | e44e3482bdb4d0ebde2d8b41830ac2cdb07948fb (patch) | |
tree | 66b09f592c55df2878107a468a91d21506104d3f /qemu/roms/u-boot/arch/sh/lib/board.c | |
parent | 9ca8dbcc65cfc63d6f5ef3312a33184e1d726e00 (diff) |
Add qemu 2.4.0
Change-Id: Ic99cbad4b61f8b127b7dc74d04576c0bcbaaf4f5
Signed-off-by: Yang Zhang <yang.z.zhang@intel.com>
Diffstat (limited to 'qemu/roms/u-boot/arch/sh/lib/board.c')
-rw-r--r-- | qemu/roms/u-boot/arch/sh/lib/board.c | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/qemu/roms/u-boot/arch/sh/lib/board.c b/qemu/roms/u-boot/arch/sh/lib/board.c new file mode 100644 index 000000000..1eb7afb89 --- /dev/null +++ b/qemu/roms/u-boot/arch/sh/lib/board.c @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2007, 2008, 2010 + * Nobuhiro Iwamatsu <iwamatsu@nigauri.org> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <command.h> +#include <malloc.h> +#include <stdio_dev.h> +#include <version.h> +#include <watchdog.h> +#include <net.h> +#include <mmc.h> +#include <environment.h> + +#ifdef CONFIG_BITBANGMII +#include <miiphy.h> +#endif + +DECLARE_GLOBAL_DATA_PTR; + +extern int cpu_init(void); +extern int board_init(void); +extern int dram_init(void); +extern int timer_init(void); + +unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN; + +#ifndef CONFIG_SYS_NO_FLASH +static int sh_flash_init(void) +{ + gd->bd->bi_flashsize = flash_init(); + + if (gd->bd->bi_flashsize >= (1024 * 1024)) + printf("Flash: %ldMB\n", gd->bd->bi_flashsize / (1024*1024)); + else + printf("Flash: %ldKB\n", gd->bd->bi_flashsize / 1024); + + return 0; +} +#endif /* CONFIG_SYS_NO_FLASH */ + +#if defined(CONFIG_CMD_NAND) +# include <nand.h> +# 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); +# undef INIT_FUNC_WATCHDOG_INIT +# 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 <ide.h> +# define INIT_FUNC_IDE_INIT ide_init, +#else +# define INIT_FUNC_IDE_INIT +#endif /* CONFIG_CMD_IDE */ + +#if defined(CONFIG_PCI) +#include <pci.h> +static int sh_pci_init(void) +{ + pci_init(); + return 0; +} +# define INIT_FUNC_PCI_INIT sh_pci_init, +#else +# define INIT_FUNC_PCI_INIT +#endif /* CONFIG_PCI */ + +static int sh_mem_env_init(void) +{ + mem_malloc_init(CONFIG_SYS_TEXT_BASE - GENERATED_GBL_DATA_SIZE - + CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN - 16); + env_relocate(); + jumptable_init(); + return 0; +} + +#if defined(CONFIG_CMD_MMC) +static int sh_mmc_init(void) +{ + puts("MMC: "); + mmc_initialize(gd->bd); + return 0; +} +#endif + +typedef int (init_fnc_t) (void); + +init_fnc_t *init_sequence[] = +{ + cpu_init, /* basic cpu dependent setup */ + board_init, /* basic board dependent setup */ + interrupt_init, /* set up exceptions */ + env_init, /* event init */ + serial_init, /* SCIF init */ + INIT_FUNC_WATCHDOG_INIT /* watchdog init */ + console_init_f, + display_options, + checkcpu, + checkboard, /* Check support board */ + dram_init, /* SDRAM init */ + timer_init, /* SuperH Timer (TCNT0 only) init */ + sh_mem_env_init, +#ifndef CONFIG_SYS_NO_FLASH + sh_flash_init, /* Flash memory init*/ +#endif + INIT_FUNC_NAND_INIT/* Flash memory (NAND) init */ + INIT_FUNC_PCI_INIT /* PCI init */ + stdio_init, + console_init_r, + interrupt_init, +#ifdef CONFIG_BOARD_LATE_INIT + board_late_init, +#endif +#if defined(CONFIG_CMD_MMC) + sh_mmc_init, +#endif + NULL /* Terminate this list */ +}; + +void sh_generic_init(void) +{ + bd_t *bd; + init_fnc_t **init_fnc_ptr; + + memset(gd, 0, GENERATED_GBL_DATA_SIZE); + + gd->flags |= GD_FLG_RELOC; /* tell others: relocation done */ + + 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 = CONFIG_SYS_SDRAM_BASE; + bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE; +#ifndef CONFIG_SYS_NO_FLASH + bd->bi_flashstart = CONFIG_SYS_FLASH_BASE; +#endif +#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 + + for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { + WATCHDOG_RESET(); + if ((*init_fnc_ptr) () != 0) + hang(); + } + +#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 /* CONFIG_WATCHDOG*/ + + +#ifdef CONFIG_BITBANGMII + bb_miiphy_init(); +#endif +#if defined(CONFIG_CMD_NET) + puts("Net: "); + eth_initialize(gd->bd); +#endif /* CONFIG_CMD_NET */ + + while (1) { + WATCHDOG_RESET(); + main_loop(); + } +} |