xref: /openbmc/u-boot/arch/arm/mach-davinci/spl.c (revision e8f80a5a)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2601fbec7SMasahiro Yamada /*
3601fbec7SMasahiro Yamada  * Copyright (C) 2011
4601fbec7SMasahiro Yamada  * Heiko Schocher, DENX Software Engineering, hs@denx.de.
5601fbec7SMasahiro Yamada  */
6601fbec7SMasahiro Yamada #include <common.h>
7601fbec7SMasahiro Yamada #include <config.h>
8601fbec7SMasahiro Yamada #include <spl.h>
9601fbec7SMasahiro Yamada #include <asm/u-boot.h>
10601fbec7SMasahiro Yamada #include <asm/utils.h>
11601fbec7SMasahiro Yamada #include <nand.h>
12601fbec7SMasahiro Yamada #include <asm/arch/dm365_lowlevel.h>
13601fbec7SMasahiro Yamada #include <ns16550.h>
14601fbec7SMasahiro Yamada #include <malloc.h>
15601fbec7SMasahiro Yamada #include <spi_flash.h>
16601fbec7SMasahiro Yamada #include <mmc.h>
17601fbec7SMasahiro Yamada 
18601fbec7SMasahiro Yamada #ifndef CONFIG_SPL_LIBCOMMON_SUPPORT
puts(const char * str)19601fbec7SMasahiro Yamada void puts(const char *str)
20601fbec7SMasahiro Yamada {
21601fbec7SMasahiro Yamada 	while (*str)
22601fbec7SMasahiro Yamada 		putc(*str++);
23601fbec7SMasahiro Yamada }
24601fbec7SMasahiro Yamada 
putc(char c)25601fbec7SMasahiro Yamada void putc(char c)
26601fbec7SMasahiro Yamada {
27601fbec7SMasahiro Yamada 	if (c == '\n')
28601fbec7SMasahiro Yamada 		NS16550_putc((NS16550_t)(CONFIG_SYS_NS16550_COM1), '\r');
29601fbec7SMasahiro Yamada 
30601fbec7SMasahiro Yamada 	NS16550_putc((NS16550_t)(CONFIG_SYS_NS16550_COM1), c);
31601fbec7SMasahiro Yamada }
32601fbec7SMasahiro Yamada #endif /* CONFIG_SPL_LIBCOMMON_SUPPORT */
33601fbec7SMasahiro Yamada 
spl_board_init(void)34601fbec7SMasahiro Yamada void spl_board_init(void)
35601fbec7SMasahiro Yamada {
36601fbec7SMasahiro Yamada #ifdef CONFIG_SOC_DM365
37601fbec7SMasahiro Yamada 	dm36x_lowlevel_init(0);
38601fbec7SMasahiro Yamada #endif
39601fbec7SMasahiro Yamada #ifdef CONFIG_SOC_DA8XX
40601fbec7SMasahiro Yamada 	arch_cpu_init();
41601fbec7SMasahiro Yamada #endif
42601fbec7SMasahiro Yamada 	preloader_console_init();
43601fbec7SMasahiro Yamada }
44601fbec7SMasahiro Yamada 
spl_boot_device(void)45601fbec7SMasahiro Yamada u32 spl_boot_device(void)
46601fbec7SMasahiro Yamada {
47c0fa385cSFabien Parent 	switch (davinci_syscfg_regs->bootcfg) {
48c0fa385cSFabien Parent #ifdef CONFIG_SPL_NAND_SUPPORT
49c0fa385cSFabien Parent 	case DAVINCI_NAND8_BOOT:
50c0fa385cSFabien Parent 	case DAVINCI_NAND16_BOOT:
51601fbec7SMasahiro Yamada 		return BOOT_DEVICE_NAND;
52c0fa385cSFabien Parent #endif
53c0fa385cSFabien Parent 
54c0fa385cSFabien Parent #ifdef CONFIG_SPL_MMC_SUPPORT
55c0fa385cSFabien Parent 	case DAVINCI_SD_OR_MMC_BOOT:
56c0fa385cSFabien Parent 	case DAVINCI_MMC_ONLY_BOOT:
57601fbec7SMasahiro Yamada 		return BOOT_DEVICE_MMC1;
58c0fa385cSFabien Parent #endif
59c0fa385cSFabien Parent 
60c0fa385cSFabien Parent #ifdef CONFIG_SPL_SPI_FLASH_SUPPORT
61c0fa385cSFabien Parent 	case DAVINCI_SPI0_FLASH_BOOT:
62c0fa385cSFabien Parent 	case DAVINCI_SPI1_FLASH_BOOT:
63c0fa385cSFabien Parent 		return BOOT_DEVICE_SPI;
64c0fa385cSFabien Parent #endif
65c0fa385cSFabien Parent 
66c0fa385cSFabien Parent 	default:
67601fbec7SMasahiro Yamada 		puts("Unknown boot device\n");
68601fbec7SMasahiro Yamada 		hang();
69c0fa385cSFabien Parent 	}
70601fbec7SMasahiro Yamada }
71