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