xref: /openbmc/u-boot/arch/arm/mach-stm32mp/spl.c (revision 3eceff64)
1*4549e789STom Rini // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
22514c2d0SPatrick Delaunay /*
32514c2d0SPatrick Delaunay  * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
42514c2d0SPatrick Delaunay  */
52514c2d0SPatrick Delaunay 
62514c2d0SPatrick Delaunay #include <common.h>
72514c2d0SPatrick Delaunay #include <dm.h>
82514c2d0SPatrick Delaunay #include <spl.h>
911dfd1a3SPatrick Delaunay #include <asm/io.h>
102514c2d0SPatrick Delaunay 
spl_boot_device(void)112514c2d0SPatrick Delaunay u32 spl_boot_device(void)
122514c2d0SPatrick Delaunay {
1311dfd1a3SPatrick Delaunay 	u32 boot_mode;
1411dfd1a3SPatrick Delaunay 
1511dfd1a3SPatrick Delaunay 	boot_mode = (readl(TAMP_BOOT_CONTEXT) & TAMP_BOOT_MODE_MASK) >>
1611dfd1a3SPatrick Delaunay 		    TAMP_BOOT_MODE_SHIFT;
1711dfd1a3SPatrick Delaunay 
1811dfd1a3SPatrick Delaunay 	switch (boot_mode) {
1911dfd1a3SPatrick Delaunay 	case BOOT_FLASH_SD_1:
2011dfd1a3SPatrick Delaunay 	case BOOT_FLASH_EMMC_1:
2111dfd1a3SPatrick Delaunay 		return BOOT_DEVICE_MMC1;
2211dfd1a3SPatrick Delaunay 	case BOOT_FLASH_SD_2:
2311dfd1a3SPatrick Delaunay 	case BOOT_FLASH_EMMC_2:
2411dfd1a3SPatrick Delaunay 		return BOOT_DEVICE_MMC2;
2511dfd1a3SPatrick Delaunay 	}
2611dfd1a3SPatrick Delaunay 
272514c2d0SPatrick Delaunay 	return BOOT_DEVICE_MMC1;
282514c2d0SPatrick Delaunay }
292514c2d0SPatrick Delaunay 
spl_boot_mode(const u32 boot_device)302514c2d0SPatrick Delaunay u32 spl_boot_mode(const u32 boot_device)
312514c2d0SPatrick Delaunay {
322514c2d0SPatrick Delaunay 	return MMCSD_MODE_RAW;
332514c2d0SPatrick Delaunay }
342514c2d0SPatrick Delaunay 
spl_boot_partition(const u32 boot_device)3511dfd1a3SPatrick Delaunay int spl_boot_partition(const u32 boot_device)
3611dfd1a3SPatrick Delaunay {
3711dfd1a3SPatrick Delaunay 	switch (boot_device) {
3811dfd1a3SPatrick Delaunay 	case BOOT_DEVICE_MMC1:
3911dfd1a3SPatrick Delaunay 		return CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION;
4011dfd1a3SPatrick Delaunay 	case BOOT_DEVICE_MMC2:
4111dfd1a3SPatrick Delaunay 		return CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_MMC2;
4211dfd1a3SPatrick Delaunay 	default:
4311dfd1a3SPatrick Delaunay 		return -EINVAL;
4411dfd1a3SPatrick Delaunay 	}
4511dfd1a3SPatrick Delaunay }
4611dfd1a3SPatrick Delaunay 
board_init_f(ulong dummy)472514c2d0SPatrick Delaunay void board_init_f(ulong dummy)
482514c2d0SPatrick Delaunay {
492514c2d0SPatrick Delaunay 	struct udevice *dev;
502514c2d0SPatrick Delaunay 	int ret;
512514c2d0SPatrick Delaunay 
522514c2d0SPatrick Delaunay 	arch_cpu_init();
532514c2d0SPatrick Delaunay 
542514c2d0SPatrick Delaunay 	ret = spl_early_init();
552514c2d0SPatrick Delaunay 	if (ret) {
562514c2d0SPatrick Delaunay 		debug("spl_early_init() failed: %d\n", ret);
572514c2d0SPatrick Delaunay 		hang();
582514c2d0SPatrick Delaunay 	}
592514c2d0SPatrick Delaunay 
602514c2d0SPatrick Delaunay 	ret = uclass_get_device(UCLASS_CLK, 0, &dev);
612514c2d0SPatrick Delaunay 	if (ret) {
622514c2d0SPatrick Delaunay 		debug("Clock init failed: %d\n", ret);
632514c2d0SPatrick Delaunay 		return;
642514c2d0SPatrick Delaunay 	}
652514c2d0SPatrick Delaunay 
662514c2d0SPatrick Delaunay 	ret = uclass_get_device(UCLASS_RESET, 0, &dev);
672514c2d0SPatrick Delaunay 	if (ret) {
682514c2d0SPatrick Delaunay 		debug("Reset init failed: %d\n", ret);
692514c2d0SPatrick Delaunay 		return;
702514c2d0SPatrick Delaunay 	}
712514c2d0SPatrick Delaunay 
722514c2d0SPatrick Delaunay 	ret = uclass_get_device(UCLASS_PINCTRL, 0, &dev);
732514c2d0SPatrick Delaunay 	if (ret) {
742514c2d0SPatrick Delaunay 		debug("%s: Cannot find pinctrl device\n", __func__);
752514c2d0SPatrick Delaunay 		return;
762514c2d0SPatrick Delaunay 	}
772514c2d0SPatrick Delaunay 
782514c2d0SPatrick Delaunay 	/* enable console uart printing */
792514c2d0SPatrick Delaunay 	preloader_console_init();
802514c2d0SPatrick Delaunay 
812514c2d0SPatrick Delaunay 	ret = uclass_get_device(UCLASS_RAM, 0, &dev);
822514c2d0SPatrick Delaunay 	if (ret) {
832514c2d0SPatrick Delaunay 		debug("DRAM init failed: %d\n", ret);
842514c2d0SPatrick Delaunay 		return;
852514c2d0SPatrick Delaunay 	}
862514c2d0SPatrick Delaunay }
87