This patch implements the generic board init as described in doc/README.generic-board. Signed-off-by: Thomas Chou <thomas@wytron.com.tw> Signed-off-by: Scott McNutt <smcnutt@psyent.com> Reviewed-by: Stefan Roese <sr@denx.de>master
parent
70fbc46192
commit
5ff10aa7e7
@ -1,147 +0,0 @@ |
|||||||
/*
|
|
||||||
* (C) Copyright 2003, Psyent Corporation <www.psyent.com> |
|
||||||
* Scott McNutt <smcnutt@psyent.com> |
|
||||||
* |
|
||||||
* (C) Copyright 2000-2002 |
|
||||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
|
||||||
* |
|
||||||
* SPDX-License-Identifier: GPL-2.0+ |
|
||||||
*/ |
|
||||||
|
|
||||||
#include <common.h> |
|
||||||
#include <stdio_dev.h> |
|
||||||
#include <watchdog.h> |
|
||||||
#include <malloc.h> |
|
||||||
#include <mmc.h> |
|
||||||
#include <net.h> |
|
||||||
#ifdef CONFIG_STATUS_LED |
|
||||||
#include <status_led.h> |
|
||||||
#endif |
|
||||||
#if defined(CONFIG_SYS_NIOS_EPCSBASE) |
|
||||||
#include <nios2-epcs.h> |
|
||||||
#endif |
|
||||||
#ifdef CONFIG_CMD_NAND |
|
||||||
#include <nand.h> /* cannot even include nand.h if it isnt configured */ |
|
||||||
#endif |
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR; |
|
||||||
|
|
||||||
/*
|
|
||||||
* All attempts to come up with a "common" initialization sequence |
|
||||||
* that works for all boards and architectures failed: some of the |
|
||||||
* requirements are just _too_ different. To get rid of the resulting |
|
||||||
* mess of board dependend #ifdef'ed code we now make the whole |
|
||||||
* initialization sequence configurable to the user. |
|
||||||
* |
|
||||||
* The requirements for any new initalization function is simple: it |
|
||||||
* receives a pointer to the "global data" structure as it's only |
|
||||||
* argument, and returns an integer return code, where 0 means |
|
||||||
* "continue" and != 0 means "fatal error, hang the system". |
|
||||||
*/ |
|
||||||
|
|
||||||
|
|
||||||
typedef int (init_fnc_t) (void); |
|
||||||
|
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* Initialization sequence * |
|
||||||
***********************************************************************/ |
|
||||||
|
|
||||||
init_fnc_t *init_sequence[] = { |
|
||||||
#if defined(CONFIG_BOARD_EARLY_INIT_F) |
|
||||||
board_early_init_f, /* Call board-specific init code early.*/ |
|
||||||
#endif |
|
||||||
#if defined(CONFIG_SYS_NIOS_EPCSBASE) |
|
||||||
epcs_reset, |
|
||||||
#endif |
|
||||||
|
|
||||||
env_init, |
|
||||||
serial_init, |
|
||||||
console_init_f, |
|
||||||
display_options, |
|
||||||
checkcpu, |
|
||||||
checkboard, |
|
||||||
NULL, /* Terminate this list */ |
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************/ |
|
||||||
void board_init(void) |
|
||||||
{ |
|
||||||
bd_t *bd; |
|
||||||
init_fnc_t **init_fnc_ptr; |
|
||||||
static gd_t gd_data; |
|
||||||
static bd_t bd_data; |
|
||||||
|
|
||||||
/* Pointer is writable since we allocated a register for it. */ |
|
||||||
gd = &gd_data; |
|
||||||
/* compiler optimization barrier needed for GCC >= 3.4 */ |
|
||||||
__asm__ __volatile__("" : : : "memory"); |
|
||||||
|
|
||||||
gd->bd = &bd_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(); |
|
||||||
} |
|
||||||
|
|
||||||
WATCHDOG_RESET(); |
|
||||||
|
|
||||||
/* The Malloc area is immediately below the monitor copy in RAM */ |
|
||||||
mem_malloc_init(CONFIG_SYS_MALLOC_BASE, CONFIG_SYS_MALLOC_LEN); |
|
||||||
|
|
||||||
#ifndef CONFIG_SYS_NO_FLASH |
|
||||||
WATCHDOG_RESET(); |
|
||||||
bd->bi_flashsize = flash_init(); |
|
||||||
#endif |
|
||||||
|
|
||||||
#ifdef CONFIG_CMD_NAND |
|
||||||
puts("NAND: "); |
|
||||||
nand_init(); |
|
||||||
#endif |
|
||||||
|
|
||||||
#ifdef CONFIG_GENERIC_MMC |
|
||||||
puts("MMC: "); |
|
||||||
mmc_initialize(bd); |
|
||||||
#endif |
|
||||||
|
|
||||||
WATCHDOG_RESET(); |
|
||||||
env_relocate(); |
|
||||||
|
|
||||||
WATCHDOG_RESET(); |
|
||||||
stdio_init(); |
|
||||||
jumptable_init(); |
|
||||||
console_init_r(); |
|
||||||
|
|
||||||
WATCHDOG_RESET(); |
|
||||||
interrupt_init(); |
|
||||||
|
|
||||||
#if defined(CONFIG_BOARD_LATE_INIT) |
|
||||||
board_late_init(); |
|
||||||
#endif |
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NET) |
|
||||||
puts("Net: "); |
|
||||||
eth_initialize(bd); |
|
||||||
#endif |
|
||||||
|
|
||||||
/* main_loop */ |
|
||||||
for (;;) { |
|
||||||
WATCHDOG_RESET(); |
|
||||||
main_loop(); |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue