1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2020 Engicam s.r.l. 4 * Copyright (C) 2020 Amarula Solutions(India) 5 * Author: Jagan Teki <jagan@amarulasolutions.com> 6 */ 7 8 #include <common.h> 9 #include <hang.h> 10 #include <init.h> 11 #include <log.h> 12 #include <spl.h> 13 #include <asm/mach-imx/iomux-v3.h> 14 #include <asm/arch/clock.h> 15 #include <asm/arch/imx8mm_pins.h> 16 #include <asm/arch/sys_proto.h> 17 #include <asm/mach-imx/boot_mode.h> 18 #include <asm/arch/ddr.h> 19 20 DECLARE_GLOBAL_DATA_PTR; 21 spl_board_boot_device(enum boot_device boot_dev_spl)22int spl_board_boot_device(enum boot_device boot_dev_spl) 23 { 24 switch (boot_dev_spl) { 25 case SD1_BOOT: 26 case SD2_BOOT: 27 case MMC2_BOOT: 28 return BOOT_DEVICE_MMC1; 29 case SD3_BOOT: 30 case MMC3_BOOT: 31 return BOOT_DEVICE_MMC2; 32 default: 33 return BOOT_DEVICE_NONE; 34 } 35 } 36 spl_dram_init(void)37static void spl_dram_init(void) 38 { 39 ddr_init(&dram_timing); 40 } 41 spl_board_init(void)42void spl_board_init(void) 43 { 44 debug("Normal Boot\n"); 45 } 46 47 #ifdef CONFIG_SPL_LOAD_FIT board_fit_config_name_match(const char * name)48int board_fit_config_name_match(const char *name) 49 { 50 /* Just empty function now - can't decide what to choose */ 51 debug("%s: %s\n", __func__, name); 52 53 return 0; 54 } 55 #endif 56 board_early_init_f(void)57int board_early_init_f(void) 58 { 59 return 0; 60 } 61 board_init_f(ulong dummy)62void board_init_f(ulong dummy) 63 { 64 int ret; 65 66 arch_cpu_init(); 67 68 init_uart_clk(1); 69 70 board_early_init_f(); 71 72 timer_init(); 73 74 /* Clear the BSS. */ 75 memset(__bss_start, 0, __bss_end - __bss_start); 76 77 ret = spl_early_init(); 78 if (ret) { 79 debug("spl_early_init() failed: %d\n", ret); 80 hang(); 81 } 82 83 preloader_console_init(); 84 85 enable_tzc380(); 86 87 /* DDR initialization */ 88 spl_dram_init(); 89 90 board_init_r(NULL, 0); 91 } 92