uboot/arch/arm/cpu/arm926ejs/davinci/spl.c
<<
>>
Prefs
   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