1/* 2 * Copyright (C) 2011 3 * Heiko Schocher, DENX Software Engineering, hs@denx.de. 4 * 5 * See file CREDITS for list of people who contributed to this 6 * project. 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License as 10 * published by the Free Software Foundation; either version 2 of 11 * the License, or (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21 * MA 02111-1307 USA 22 */ 23#include <common.h> 24#include <asm/u-boot.h> 25#include <asm/utils.h> 26#include <nand.h> 27#include <asm/arch/dm365_lowlevel.h> 28#include <ns16550.h> 29#include <malloc.h> 30#include <spi_flash.h> 31 32#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT 33 34DECLARE_GLOBAL_DATA_PTR; 35/* Define global data structure pointer to it*/ 36static gd_t gdata __attribute__ ((section(".data"))); 37static bd_t bdata __attribute__ ((section(".data"))); 38 39#else 40 41void puts(const char *str) 42{ 43 while (*str) 44 putc(*str++); 45} 46 47void putc(char c) 48{ 49 if (c == '\n') 50 NS16550_putc((NS16550_t)(CONFIG_SYS_NS16550_COM1), '\r'); 51 52 NS16550_putc((NS16550_t)(CONFIG_SYS_NS16550_COM1), c); 53} 54 55#endif /* CONFIG_SPL_LIBCOMMON_SUPPORT */ 56 57inline void hang(void) 58{ 59 puts("### ERROR ### Please RESET the board ###\n"); 60 for (;;) 61 ; 62} 63 64void board_init_f(ulong dummy) 65{ 66#ifdef CONFIG_SOC_DM365 67 dm36x_lowlevel_init(0); 68#endif 69#ifdef CONFIG_SOC_DA8XX 70 arch_cpu_init(); 71#endif 72 relocate_code(CONFIG_SPL_STACK, NULL, CONFIG_SPL_TEXT_BASE); 73} 74 75void board_init_r(gd_t *id, ulong dummy) 76{ 77#ifdef CONFIG_SPL_NAND_LOAD 78 nand_init(); 79 puts("Nand boot...\n"); 80 nand_boot(); 81#endif 82#ifdef CONFIG_SPL_SPI_LOAD 83 mem_malloc_init(CONFIG_SYS_TEXT_BASE - CONFIG_SYS_MALLOC_LEN, 84 CONFIG_SYS_MALLOC_LEN); 85 86 gd = &gdata; 87 gd->bd = &bdata; 88 gd->flags |= GD_FLG_RELOC; 89 gd->baudrate = CONFIG_BAUDRATE; 90 serial_init(); /* serial communications setup */ 91 gd->have_console = 1; 92 93 puts("SPI boot...\n"); 94 spi_boot(); 95#endif 96} 97