10107f240SMasahiro Yamada /* 20107f240SMasahiro Yamada * (C) Copyright 2014 Xilinx, Inc. Michal Simek 30107f240SMasahiro Yamada * 40107f240SMasahiro Yamada * SPDX-License-Identifier: GPL-2.0+ 50107f240SMasahiro Yamada */ 60107f240SMasahiro Yamada #include <common.h> 7c54c0a4cSSimon Glass #include <debug_uart.h> 80107f240SMasahiro Yamada #include <spl.h> 90107f240SMasahiro Yamada 100107f240SMasahiro Yamada #include <asm/io.h> 110107f240SMasahiro Yamada #include <asm/spl.h> 12bd44758aSSimon Glass #include <asm/arch/hardware.h> 130107f240SMasahiro Yamada #include <asm/arch/sys_proto.h> 140107f240SMasahiro Yamada 150107f240SMasahiro Yamada DECLARE_GLOBAL_DATA_PTR; 160107f240SMasahiro Yamada board_init_f(ulong dummy)170107f240SMasahiro Yamadavoid board_init_f(ulong dummy) 180107f240SMasahiro Yamada { 190107f240SMasahiro Yamada ps7_init(); 200107f240SMasahiro Yamada 210107f240SMasahiro Yamada arch_cpu_init(); 22c54c0a4cSSimon Glass /* 23c54c0a4cSSimon Glass * The debug UART can be used from this point: 24c54c0a4cSSimon Glass * debug_uart_init(); 25c54c0a4cSSimon Glass * printch('x'); 26c54c0a4cSSimon Glass */ 270107f240SMasahiro Yamada } 280107f240SMasahiro Yamada 290107f240SMasahiro Yamada #ifdef CONFIG_SPL_BOARD_INIT spl_board_init(void)300107f240SMasahiro Yamadavoid spl_board_init(void) 310107f240SMasahiro Yamada { 325fa030b9SSimon Glass preloader_console_init(); 330107f240SMasahiro Yamada board_init(); 340107f240SMasahiro Yamada } 350107f240SMasahiro Yamada #endif 360107f240SMasahiro Yamada spl_boot_device(void)370107f240SMasahiro Yamadau32 spl_boot_device(void) 380107f240SMasahiro Yamada { 390107f240SMasahiro Yamada u32 mode; 400107f240SMasahiro Yamada 410107f240SMasahiro Yamada switch ((zynq_slcr_get_boot_mode()) & ZYNQ_BM_MASK) { 420107f240SMasahiro Yamada #ifdef CONFIG_SPL_SPI_SUPPORT 430107f240SMasahiro Yamada case ZYNQ_BM_QSPI: 440107f240SMasahiro Yamada puts("qspi boot\n"); 450107f240SMasahiro Yamada mode = BOOT_DEVICE_SPI; 460107f240SMasahiro Yamada break; 470107f240SMasahiro Yamada #endif 480107f240SMasahiro Yamada case ZYNQ_BM_NAND: 490107f240SMasahiro Yamada mode = BOOT_DEVICE_NAND; 500107f240SMasahiro Yamada break; 510107f240SMasahiro Yamada case ZYNQ_BM_NOR: 520107f240SMasahiro Yamada mode = BOOT_DEVICE_NOR; 530107f240SMasahiro Yamada break; 540107f240SMasahiro Yamada #ifdef CONFIG_SPL_MMC_SUPPORT 550107f240SMasahiro Yamada case ZYNQ_BM_SD: 560107f240SMasahiro Yamada puts("mmc boot\n"); 570107f240SMasahiro Yamada mode = BOOT_DEVICE_MMC1; 580107f240SMasahiro Yamada break; 590107f240SMasahiro Yamada #endif 600107f240SMasahiro Yamada case ZYNQ_BM_JTAG: 610107f240SMasahiro Yamada mode = BOOT_DEVICE_RAM; 620107f240SMasahiro Yamada break; 630107f240SMasahiro Yamada default: 640107f240SMasahiro Yamada puts("Unsupported boot mode selected\n"); 650107f240SMasahiro Yamada hang(); 660107f240SMasahiro Yamada } 670107f240SMasahiro Yamada 680107f240SMasahiro Yamada return mode; 690107f240SMasahiro Yamada } 700107f240SMasahiro Yamada 710107f240SMasahiro Yamada #ifdef CONFIG_SPL_MMC_SUPPORT spl_boot_mode(const u32 boot_device)72*2b1cdafaSMarek Vasutu32 spl_boot_mode(const u32 boot_device) 730107f240SMasahiro Yamada { 740107f240SMasahiro Yamada return MMCSD_MODE_FS; 750107f240SMasahiro Yamada } 760107f240SMasahiro Yamada #endif 770107f240SMasahiro Yamada 780107f240SMasahiro Yamada #ifdef CONFIG_SPL_OS_BOOT spl_start_uboot(void)790107f240SMasahiro Yamadaint spl_start_uboot(void) 800107f240SMasahiro Yamada { 810107f240SMasahiro Yamada /* boot linux */ 820107f240SMasahiro Yamada return 0; 830107f240SMasahiro Yamada } 840107f240SMasahiro Yamada #endif 850107f240SMasahiro Yamada ps7_init(void)860107f240SMasahiro Yamada__weak void ps7_init(void) 870107f240SMasahiro Yamada { 880107f240SMasahiro Yamada /* 890107f240SMasahiro Yamada * This function is overridden by the one in 9095b237ecSMasahiro Yamada * board/xilinx/zynq/(platform)/ps7_init_gpl.c, if it exists. 910107f240SMasahiro Yamada */ 920107f240SMasahiro Yamada } 939a23f458SMichal Simek ps7_post_config(void)94f44e603fSMichal Simek__weak int ps7_post_config(void) 95f44e603fSMichal Simek { 96f44e603fSMichal Simek /* 97f44e603fSMichal Simek * This function is overridden by the one in 98f44e603fSMichal Simek * board/xilinx/zynq/(platform)/ps7_init_gpl.c, if it exists. 99f44e603fSMichal Simek */ 100f44e603fSMichal Simek return 0; 101f44e603fSMichal Simek } 102f44e603fSMichal Simek spl_board_prepare_for_boot(void)103f44e603fSMichal Simekvoid spl_board_prepare_for_boot(void) 104f44e603fSMichal Simek { 105f44e603fSMichal Simek ps7_post_config(); 106f44e603fSMichal Simek debug("SPL bye\n"); 107f44e603fSMichal Simek } 108f44e603fSMichal Simek 1099a23f458SMichal Simek #ifdef CONFIG_SPL_LOAD_FIT board_fit_config_name_match(const char * name)1109a23f458SMichal Simekint board_fit_config_name_match(const char *name) 1119a23f458SMichal Simek { 1129a23f458SMichal Simek /* Just empty function now - can't decide what to choose */ 1139a23f458SMichal Simek debug("%s: %s\n", __func__, name); 1149a23f458SMichal Simek 1159a23f458SMichal Simek return 0; 1169a23f458SMichal Simek } 1179a23f458SMichal Simek #endif 118