1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright 2018, 2021 NXP 4 * 5 */ 6 7#include <common.h> 8#include <dm.h> 9#include <image.h> 10#include <init.h> 11#include <log.h> 12#include <spl.h> 13#include <asm/global_data.h> 14#include <dm/uclass.h> 15#include <dm/device.h> 16#include <dm/uclass-internal.h> 17#include <dm/device-internal.h> 18#include <dm/lists.h> 19#include <asm/io.h> 20#include <asm/gpio.h> 21#include <firmware/imx/sci/sci.h> 22#include <asm/arch/imx8-pins.h> 23#include <asm/arch/iomux.h> 24#include <asm/arch/sys_proto.h> 25#include <asm/sections.h> 26 27DECLARE_GLOBAL_DATA_PTR; 28 29#define GPIO_PAD_CTRL ((SC_PAD_CONFIG_NORMAL << PADRING_CONFIG_SHIFT) | \ 30 (SC_PAD_ISO_OFF << PADRING_LPCONFIG_SHIFT) | \ 31 (SC_PAD_28FDSOI_DSE_DV_HIGH << PADRING_DSE_SHIFT) | \ 32 (SC_PAD_28FDSOI_PS_PU << PADRING_PULL_SHIFT)) 33 34#define USDHC2_SD_PWR IMX_GPIO_NR(4, 19) 35static iomux_cfg_t usdhc2_sd_pwr[] = { 36 SC_P_USDHC1_RESET_B | MUX_PAD_CTRL(GPIO_PAD_CTRL), 37}; 38 39void spl_board_init(void) 40{ 41 struct udevice *dev; 42 43 uclass_get_device_by_driver(UCLASS_MISC, DM_DRIVER_GET(imx8_scu), &dev); 44 45 uclass_find_first_device(UCLASS_MISC, &dev); 46 47 for (; dev; uclass_find_next_device(&dev)) { 48 if (device_probe(dev)) 49 continue; 50 } 51 52 arch_cpu_init(); 53 54 board_early_init_f(); 55 56 timer_init(); 57 58 imx8_iomux_setup_multiple_pads(usdhc2_sd_pwr, ARRAY_SIZE(usdhc2_sd_pwr)); 59 gpio_direction_output(USDHC2_SD_PWR, 0); 60 61 preloader_console_init(); 62 63 puts("Normal Boot\n"); 64} 65 66void spl_board_prepare_for_boot(void) 67{ 68 imx8_power_off_pd_devices(NULL, 0); 69} 70 71#ifdef CONFIG_SPL_LOAD_FIT 72int board_fit_config_name_match(const char *name) 73{ 74 /* Just empty function now - can't decide what to choose */ 75 debug("%s: %s\n", __func__, name); 76 77 return 0; 78} 79#endif 80 81void board_init_f(ulong dummy) 82{ 83 /* Clear global data */ 84 memset((void *)gd, 0, sizeof(gd_t)); 85 86 /* Clear the BSS. */ 87 memset(__bss_start, 0, __bss_end - __bss_start); 88 89 board_init_r(NULL, 0); 90} 91