19f3183d2SMingkai Hu /* 29f3183d2SMingkai Hu * Copyright 2014-2015 Freescale Semiconductor, Inc. 39f3183d2SMingkai Hu * 49f3183d2SMingkai Hu * SPDX-License-Identifier: GPL-2.0+ 59f3183d2SMingkai Hu */ 69f3183d2SMingkai Hu 79f3183d2SMingkai Hu #include <common.h> 89f3183d2SMingkai Hu #include <spl.h> 99f3183d2SMingkai Hu #include <asm/io.h> 109f3183d2SMingkai Hu #include <fsl_ifc.h> 119f3183d2SMingkai Hu #include <i2c.h> 129f3183d2SMingkai Hu 139f3183d2SMingkai Hu DECLARE_GLOBAL_DATA_PTR; 149f3183d2SMingkai Hu 159f3183d2SMingkai Hu u32 spl_boot_device(void) 169f3183d2SMingkai Hu { 179f3183d2SMingkai Hu #ifdef CONFIG_SPL_MMC_SUPPORT 189f3183d2SMingkai Hu return BOOT_DEVICE_MMC1; 199f3183d2SMingkai Hu #endif 209f3183d2SMingkai Hu #ifdef CONFIG_SPL_NAND_SUPPORT 219f3183d2SMingkai Hu return BOOT_DEVICE_NAND; 229f3183d2SMingkai Hu #endif 239f3183d2SMingkai Hu return 0; 249f3183d2SMingkai Hu } 259f3183d2SMingkai Hu 262b1cdafaSMarek Vasut u32 spl_boot_mode(const u32 boot_device) 279f3183d2SMingkai Hu { 289f3183d2SMingkai Hu switch (spl_boot_device()) { 299f3183d2SMingkai Hu case BOOT_DEVICE_MMC1: 309f3183d2SMingkai Hu #ifdef CONFIG_SPL_FAT_SUPPORT 31f504227cSQianyu Gong return MMCSD_MODE_FS; 329f3183d2SMingkai Hu #else 339f3183d2SMingkai Hu return MMCSD_MODE_RAW; 349f3183d2SMingkai Hu #endif 359f3183d2SMingkai Hu case BOOT_DEVICE_NAND: 369f3183d2SMingkai Hu return 0; 379f3183d2SMingkai Hu default: 389f3183d2SMingkai Hu puts("spl: error: unsupported device\n"); 399f3183d2SMingkai Hu hang(); 409f3183d2SMingkai Hu } 419f3183d2SMingkai Hu } 429f3183d2SMingkai Hu 439f3183d2SMingkai Hu #ifdef CONFIG_SPL_BUILD 4470f9661cSRuchika Gupta 4570f9661cSRuchika Gupta void spl_board_init(void) 4670f9661cSRuchika Gupta { 4770f9661cSRuchika Gupta #if defined(CONFIG_SECURE_BOOT) && defined(CONFIG_FSL_LSCH2) 4870f9661cSRuchika Gupta /* 4970f9661cSRuchika Gupta * In case of Secure Boot, the IBR configures the SMMU 5070f9661cSRuchika Gupta * to allow only Secure transactions. 5170f9661cSRuchika Gupta * SMMU must be reset in bypass mode. 5270f9661cSRuchika Gupta * Set the ClientPD bit and Clear the USFCFG Bit 5370f9661cSRuchika Gupta */ 5470f9661cSRuchika Gupta u32 val; 5570f9661cSRuchika Gupta val = (in_le32(SMMU_SCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK); 5670f9661cSRuchika Gupta out_le32(SMMU_SCR0, val); 5770f9661cSRuchika Gupta val = (in_le32(SMMU_NSCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK); 5870f9661cSRuchika Gupta out_le32(SMMU_NSCR0, val); 5970f9661cSRuchika Gupta #endif 6070f9661cSRuchika Gupta } 6170f9661cSRuchika Gupta 629f3183d2SMingkai Hu void board_init_f(ulong dummy) 639f3183d2SMingkai Hu { 649f3183d2SMingkai Hu /* Clear global data */ 659f3183d2SMingkai Hu memset((void *)gd, 0, sizeof(gd_t)); 669f3183d2SMingkai Hu board_early_init_f(); 679f3183d2SMingkai Hu timer_init(); 68*4a3ab193SYork Sun #ifdef CONFIG_ARCH_LS2080A 699f3183d2SMingkai Hu env_init(); 709f3183d2SMingkai Hu #endif 719f3183d2SMingkai Hu get_clocks(); 729f3183d2SMingkai Hu 739f3183d2SMingkai Hu preloader_console_init(); 749f3183d2SMingkai Hu 759f3183d2SMingkai Hu #ifdef CONFIG_SPL_I2C_SUPPORT 769f3183d2SMingkai Hu i2c_init_all(); 779f3183d2SMingkai Hu #endif 789f3183d2SMingkai Hu dram_init(); 799f3183d2SMingkai Hu } 809f3183d2SMingkai Hu #endif 81