xref: /openbmc/u-boot/arch/arm/mach-zynq/spl.c (revision f7e48c54b246c460503e90315d0cd50ccbd586c6)
183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
20107f240SMasahiro Yamada /*
33e1b61deSMichal Simek  * (C) Copyright 2014 - 2017 Xilinx, Inc. Michal Simek
40107f240SMasahiro Yamada  */
50107f240SMasahiro Yamada #include <common.h>
6c54c0a4cSSimon Glass #include <debug_uart.h>
70107f240SMasahiro Yamada #include <spl.h>
80107f240SMasahiro Yamada 
90107f240SMasahiro Yamada #include <asm/io.h>
100107f240SMasahiro Yamada #include <asm/spl.h>
11bd44758aSSimon Glass #include <asm/arch/hardware.h>
120107f240SMasahiro Yamada #include <asm/arch/sys_proto.h>
13f0b619ecSMichal Simek #include <asm/arch/ps7_init_gpl.h>
140107f240SMasahiro Yamada 
board_init_f(ulong dummy)150107f240SMasahiro Yamada void board_init_f(ulong dummy)
160107f240SMasahiro Yamada {
170107f240SMasahiro Yamada 	ps7_init();
180107f240SMasahiro Yamada 
190107f240SMasahiro Yamada 	arch_cpu_init();
2057213c5fSMichal Simek 
2157213c5fSMichal Simek #ifdef CONFIG_DEBUG_UART
2257213c5fSMichal Simek 	/* Uart debug for sure */
2357213c5fSMichal Simek 	debug_uart_init();
2457213c5fSMichal Simek 	puts("Debug uart enabled\n"); /* or printch() */
2557213c5fSMichal Simek #endif
260107f240SMasahiro Yamada }
270107f240SMasahiro Yamada 
280107f240SMasahiro Yamada #ifdef CONFIG_SPL_BOARD_INIT
spl_board_init(void)290107f240SMasahiro Yamada void spl_board_init(void)
300107f240SMasahiro Yamada {
315fa030b9SSimon Glass 	preloader_console_init();
32*577012daSLuis Araneda #if defined(CONFIG_ARCH_EARLY_INIT_R) && defined(CONFIG_SPL_FPGA_SUPPORT)
33*577012daSLuis Araneda 	arch_early_init_r();
34*577012daSLuis Araneda #endif
350107f240SMasahiro Yamada 	board_init();
360107f240SMasahiro Yamada }
370107f240SMasahiro Yamada #endif
380107f240SMasahiro Yamada 
spl_boot_device(void)390107f240SMasahiro Yamada u32 spl_boot_device(void)
400107f240SMasahiro Yamada {
410107f240SMasahiro Yamada 	u32 mode;
420107f240SMasahiro Yamada 
430107f240SMasahiro Yamada 	switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) {
440107f240SMasahiro Yamada #ifdef CONFIG_SPL_SPI_SUPPORT
450107f240SMasahiro Yamada 	case ZYNQ_BM_QSPI:
460107f240SMasahiro Yamada 		puts("qspi boot\n");
470107f240SMasahiro Yamada 		mode = BOOT_DEVICE_SPI;
480107f240SMasahiro Yamada 		break;
490107f240SMasahiro Yamada #endif
500107f240SMasahiro Yamada 	case ZYNQ_BM_NAND:
510107f240SMasahiro Yamada 		mode = BOOT_DEVICE_NAND;
520107f240SMasahiro Yamada 		break;
530107f240SMasahiro Yamada 	case ZYNQ_BM_NOR:
540107f240SMasahiro Yamada 		mode = BOOT_DEVICE_NOR;
550107f240SMasahiro Yamada 		break;
560107f240SMasahiro Yamada #ifdef CONFIG_SPL_MMC_SUPPORT
570107f240SMasahiro Yamada 	case ZYNQ_BM_SD:
580107f240SMasahiro Yamada 		puts("mmc boot\n");
590107f240SMasahiro Yamada 		mode = BOOT_DEVICE_MMC1;
600107f240SMasahiro Yamada 		break;
610107f240SMasahiro Yamada #endif
620107f240SMasahiro Yamada 	case ZYNQ_BM_JTAG:
630107f240SMasahiro Yamada 		mode = BOOT_DEVICE_RAM;
640107f240SMasahiro Yamada 		break;
650107f240SMasahiro Yamada 	default:
660107f240SMasahiro Yamada 		puts("Unsupported boot mode selected\n");
670107f240SMasahiro Yamada 		hang();
680107f240SMasahiro Yamada 	}
690107f240SMasahiro Yamada 
700107f240SMasahiro Yamada 	return mode;
710107f240SMasahiro Yamada }
720107f240SMasahiro Yamada 
730107f240SMasahiro Yamada #ifdef CONFIG_SPL_OS_BOOT
spl_start_uboot(void)740107f240SMasahiro Yamada int spl_start_uboot(void)
750107f240SMasahiro Yamada {
760107f240SMasahiro Yamada 	/* boot linux */
770107f240SMasahiro Yamada 	return 0;
780107f240SMasahiro Yamada }
790107f240SMasahiro Yamada #endif
800107f240SMasahiro Yamada 
spl_board_prepare_for_boot(void)81f44e603fSMichal Simek void spl_board_prepare_for_boot(void)
82f44e603fSMichal Simek {
83f44e603fSMichal Simek 	ps7_post_config();
84f44e603fSMichal Simek 	debug("SPL bye\n");
85f44e603fSMichal Simek }
86f44e603fSMichal Simek 
879a23f458SMichal Simek #ifdef CONFIG_SPL_LOAD_FIT
board_fit_config_name_match(const char * name)889a23f458SMichal Simek int board_fit_config_name_match(const char *name)
899a23f458SMichal Simek {
909a23f458SMichal Simek 	/* Just empty function now - can't decide what to choose */
919a23f458SMichal Simek 	debug("%s: %s\n", __func__, name);
929a23f458SMichal Simek 
939a23f458SMichal Simek 	return 0;
949a23f458SMichal Simek }
959a23f458SMichal Simek #endif
96