1 /* 2 * Copyright 2015 - 2016 Xilinx, Inc. 3 * 4 * Michal Simek <michal.simek@xilinx.com> 5 * 6 * SPDX-License-Identifier: GPL-2.0+ 7 */ 8 9 #include <common.h> 10 #include <debug_uart.h> 11 #include <spl.h> 12 13 #include <asm/io.h> 14 #include <asm/spl.h> 15 #include <asm/arch/hardware.h> 16 #include <asm/arch/sys_proto.h> 17 18 void board_init_f(ulong dummy) 19 { 20 psu_init(); 21 board_early_init_r(); 22 23 #ifdef CONFIG_DEBUG_UART 24 /* Uart debug for sure */ 25 debug_uart_init(); 26 puts("Debug uart enabled\n"); /* or printch() */ 27 #endif 28 /* Delay is required for clocks to be propagated */ 29 udelay(1000000); 30 31 /* Clear the BSS */ 32 memset(__bss_start, 0, __bss_end - __bss_start); 33 34 /* No need to call timer init - it is empty for ZynqMP */ 35 board_init_r(NULL, 0); 36 } 37 38 #ifdef CONFIG_SPL_BOARD_INIT 39 void spl_board_init(void) 40 { 41 preloader_console_init(); 42 board_init(); 43 } 44 #endif 45 46 u32 spl_boot_device(void) 47 { 48 u32 reg = 0; 49 u8 bootmode; 50 51 reg = readl(&crlapb_base->boot_mode); 52 bootmode = reg & BOOT_MODES_MASK; 53 54 switch (bootmode) { 55 case JTAG_MODE: 56 return BOOT_DEVICE_RAM; 57 #ifdef CONFIG_SPL_MMC_SUPPORT 58 case EMMC_MODE: 59 case SD_MODE: 60 case SD_MODE1: 61 return BOOT_DEVICE_MMC1; 62 #endif 63 default: 64 printf("Invalid Boot Mode:0x%x\n", bootmode); 65 break; 66 } 67 68 return 0; 69 } 70 71 u32 spl_boot_mode(const u32 boot_device) 72 { 73 switch (spl_boot_device()) { 74 case BOOT_DEVICE_RAM: 75 return 0; 76 case BOOT_DEVICE_MMC1: 77 return MMCSD_MODE_FS; 78 default: 79 puts("spl: error: unsupported device\n"); 80 hang(); 81 } 82 } 83 84 __weak void psu_init(void) 85 { 86 /* 87 * This function is overridden by the one in 88 * board/xilinx/zynqmp/(platform)/psu_init_gpl.c, if it exists. 89 */ 90 } 91 92 #ifdef CONFIG_SPL_OS_BOOT 93 int spl_start_uboot(void) 94 { 95 return 0; 96 } 97 #endif 98 99 #ifdef CONFIG_SPL_LOAD_FIT 100 int board_fit_config_name_match(const char *name) 101 { 102 /* Just empty function now - can't decide what to choose */ 103 debug("%s: %s\n", __func__, name); 104 105 return 0; 106 } 107 #endif 108