1 /* 2 * (C) Copyright ASPEED Technology Inc. 3 * 4 * SPDX-License-Identifier: GPL-2.0+ 5 */ 6 #include <common.h> 7 #include <debug_uart.h> 8 #include <spl.h> 9 10 #include <asm/io.h> 11 #include <asm/spl.h> 12 #include <asm/arch/aspeed_verify.h> 13 14 DECLARE_GLOBAL_DATA_PTR; 15 16 #define AST_BOOTMODE_SPI 0 17 #define AST_BOOTMODE_EMMC 1 18 #define AST_BOOTMODE_UART 2 19 20 u32 aspeed_bootmode(void); 21 void aspeed_mmc_init(void); 22 23 void board_init_f(ulong dummy) 24 { 25 #ifndef CONFIG_SPL_TINY 26 spl_early_init(); 27 timer_init(); 28 preloader_console_init(); 29 dram_init(); 30 aspeed_mmc_init(); 31 #endif 32 } 33 34 u32 spl_boot_device(void) 35 { 36 switch(aspeed_bootmode()) { 37 case AST_BOOTMODE_EMMC: 38 return BOOT_DEVICE_MMC1; 39 case AST_BOOTMODE_SPI: 40 return BOOT_DEVICE_RAM; 41 case AST_BOOTMODE_UART: 42 return BOOT_DEVICE_UART; 43 default: 44 break; 45 } 46 return BOOT_DEVICE_NONE; 47 } 48 49 struct image_header *spl_get_load_buffer(ssize_t offset, size_t size) 50 { 51 #ifdef CONFIG_SECURE_BOOT 52 void *dst = (void*)CONFIG_SYS_UBOOT_START; 53 void *src = (void*)CONFIG_SYS_TEXT_BASE; 54 u32 count = CONFIG_SYS_MONITOR_LEN; 55 memmove(dst, src, count); 56 #endif 57 return (struct image_header *)(CONFIG_SYS_LOAD_ADDR); 58 } 59 60 #ifdef CONFIG_SECURE_BOOT 61 void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image) 62 { 63 typedef void __noreturn (*image_entry_noargs_t)(void); 64 65 image_entry_noargs_t image_entry = 66 (image_entry_noargs_t)spl_image->entry_point; 67 if (aspeed_bl2_verify((void*)spl_image->entry_point, CONFIG_SPL_TEXT_BASE) != 0) 68 hang(); 69 image_entry(); 70 } 71 #endif 72 73 #ifdef CONFIG_SPL_MMC_SUPPORT 74 u32 spl_boot_mode(const u32 boot_device) 75 { 76 return MMCSD_MODE_RAW; 77 } 78 #endif 79 80 #ifdef CONFIG_SPL_OS_BOOT 81 int spl_start_uboot(void) 82 { 83 /* boot linux */ 84 return 0; 85 } 86 #endif 87 88 #ifdef CONFIG_SPL_LOAD_FIT 89 int board_fit_config_name_match(const char *name) 90 { 91 /* we always use the default configuration */ 92 debug("%s: %s\n", __func__, name); 93 return 0; 94 } 95 #endif 96