1*9f3183d2SMingkai Hu /* 2*9f3183d2SMingkai Hu * Copyright 2014-2015 Freescale Semiconductor, Inc. 3*9f3183d2SMingkai Hu * 4*9f3183d2SMingkai Hu * SPDX-License-Identifier: GPL-2.0+ 5*9f3183d2SMingkai Hu */ 6*9f3183d2SMingkai Hu 7*9f3183d2SMingkai Hu #include <common.h> 8*9f3183d2SMingkai Hu #include <spl.h> 9*9f3183d2SMingkai Hu #include <asm/io.h> 10*9f3183d2SMingkai Hu #include <fsl_ifc.h> 11*9f3183d2SMingkai Hu #include <fsl_csu.h> 12*9f3183d2SMingkai Hu #include <i2c.h> 13*9f3183d2SMingkai Hu 14*9f3183d2SMingkai Hu DECLARE_GLOBAL_DATA_PTR; 15*9f3183d2SMingkai Hu 16*9f3183d2SMingkai Hu u32 spl_boot_device(void) 17*9f3183d2SMingkai Hu { 18*9f3183d2SMingkai Hu #ifdef CONFIG_SPL_MMC_SUPPORT 19*9f3183d2SMingkai Hu return BOOT_DEVICE_MMC1; 20*9f3183d2SMingkai Hu #endif 21*9f3183d2SMingkai Hu #ifdef CONFIG_SPL_NAND_SUPPORT 22*9f3183d2SMingkai Hu return BOOT_DEVICE_NAND; 23*9f3183d2SMingkai Hu #endif 24*9f3183d2SMingkai Hu return 0; 25*9f3183d2SMingkai Hu } 26*9f3183d2SMingkai Hu 27*9f3183d2SMingkai Hu u32 spl_boot_mode(void) 28*9f3183d2SMingkai Hu { 29*9f3183d2SMingkai Hu switch (spl_boot_device()) { 30*9f3183d2SMingkai Hu case BOOT_DEVICE_MMC1: 31*9f3183d2SMingkai Hu #ifdef CONFIG_SPL_FAT_SUPPORT 32*9f3183d2SMingkai Hu return MMCSD_MODE_FAT; 33*9f3183d2SMingkai Hu #else 34*9f3183d2SMingkai Hu return MMCSD_MODE_RAW; 35*9f3183d2SMingkai Hu #endif 36*9f3183d2SMingkai Hu case BOOT_DEVICE_NAND: 37*9f3183d2SMingkai Hu return 0; 38*9f3183d2SMingkai Hu default: 39*9f3183d2SMingkai Hu puts("spl: error: unsupported device\n"); 40*9f3183d2SMingkai Hu hang(); 41*9f3183d2SMingkai Hu } 42*9f3183d2SMingkai Hu } 43*9f3183d2SMingkai Hu 44*9f3183d2SMingkai Hu #ifdef CONFIG_SPL_BUILD 45*9f3183d2SMingkai Hu void board_init_f(ulong dummy) 46*9f3183d2SMingkai Hu { 47*9f3183d2SMingkai Hu /* Set global data pointer */ 48*9f3183d2SMingkai Hu gd = &gdata; 49*9f3183d2SMingkai Hu /* Clear global data */ 50*9f3183d2SMingkai Hu memset((void *)gd, 0, sizeof(gd_t)); 51*9f3183d2SMingkai Hu #ifdef CONFIG_LS2085A 52*9f3183d2SMingkai Hu arch_cpu_init(); 53*9f3183d2SMingkai Hu #endif 54*9f3183d2SMingkai Hu #ifdef CONFIG_FSL_IFC 55*9f3183d2SMingkai Hu init_early_memctl_regs(); 56*9f3183d2SMingkai Hu #endif 57*9f3183d2SMingkai Hu board_early_init_f(); 58*9f3183d2SMingkai Hu timer_init(); 59*9f3183d2SMingkai Hu #ifdef CONFIG_LS2085A 60*9f3183d2SMingkai Hu env_init(); 61*9f3183d2SMingkai Hu #endif 62*9f3183d2SMingkai Hu get_clocks(); 63*9f3183d2SMingkai Hu 64*9f3183d2SMingkai Hu preloader_console_init(); 65*9f3183d2SMingkai Hu 66*9f3183d2SMingkai Hu #ifdef CONFIG_SPL_I2C_SUPPORT 67*9f3183d2SMingkai Hu i2c_init_all(); 68*9f3183d2SMingkai Hu #endif 69*9f3183d2SMingkai Hu dram_init(); 70*9f3183d2SMingkai Hu 71*9f3183d2SMingkai Hu /* Clear the BSS */ 72*9f3183d2SMingkai Hu memset(__bss_start, 0, __bss_end - __bss_start); 73*9f3183d2SMingkai Hu 74*9f3183d2SMingkai Hu board_init_r(NULL, 0); 75*9f3183d2SMingkai Hu } 76*9f3183d2SMingkai Hu #endif 77