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 44*70f9661cSRuchika Gupta 45*70f9661cSRuchika Gupta void spl_board_init(void) 46*70f9661cSRuchika Gupta { 47*70f9661cSRuchika Gupta #if defined(CONFIG_SECURE_BOOT) && defined(CONFIG_FSL_LSCH2) 48*70f9661cSRuchika Gupta /* 49*70f9661cSRuchika Gupta * In case of Secure Boot, the IBR configures the SMMU 50*70f9661cSRuchika Gupta * to allow only Secure transactions. 51*70f9661cSRuchika Gupta * SMMU must be reset in bypass mode. 52*70f9661cSRuchika Gupta * Set the ClientPD bit and Clear the USFCFG Bit 53*70f9661cSRuchika Gupta */ 54*70f9661cSRuchika Gupta u32 val; 55*70f9661cSRuchika Gupta val = (in_le32(SMMU_SCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK); 56*70f9661cSRuchika Gupta out_le32(SMMU_SCR0, val); 57*70f9661cSRuchika Gupta val = (in_le32(SMMU_NSCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK); 58*70f9661cSRuchika Gupta out_le32(SMMU_NSCR0, val); 59*70f9661cSRuchika Gupta #endif 60*70f9661cSRuchika Gupta } 61*70f9661cSRuchika 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(); 683c1d218aSYork Sun #ifdef CONFIG_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