xref: /openbmc/u-boot/arch/arm/cpu/armv8/fsl-layerscape/spl.c (revision 4a3ab193222d495ad55b3902fde2654489ad767b)
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