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 20DECLARE_GLOBAL_DATA_PTR; 21 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 37static void spl_dram_init(void) 38{ 39 ddr_init(&dram_timing); 40} 41 42void spl_board_init(void) 43{ 44 debug("Normal Boot\n"); 45} 46 47#ifdef CONFIG_SPL_LOAD_FIT 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 57int board_early_init_f(void) 58{ 59 return 0; 60} 61 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