1 // SPDX-License-Identifier: GPL-2.0+
3 * K3: Architecture initialization
5 * Copyright (C) 2017-2018 Texas Instruments Incorporated - http://www.ti.com/
6 * Lokesh Vutla <lokeshvutla@ti.com>
12 #include <asm/arch/hardware.h>
14 #ifdef CONFIG_SPL_BUILD
15 static void store_boot_index_from_rom(void)
17 u32 *boot_index = (u32 *)K3_BOOT_PARAM_TABLE_INDEX_VAL;
19 *boot_index = *(u32 *)(CONFIG_SYS_K3_BOOT_PARAM_TABLE_INDEX);
22 void board_init_f(ulong dummy)
25 * Cannot delay this further as there is a chance that
26 * K3_BOOT_PARAM_TABLE_INDEX can be over written by SPL MALLOC section.
28 store_boot_index_from_rom();
30 /* Init DM early in-order to invoke system controller */
33 /* Prepare console output */
34 preloader_console_init();
37 static u32 __get_backup_bootmedia(u32 devstat)
39 u32 bkup_boot = (devstat & CTRLMMR_MAIN_DEVSTAT_BKUP_BOOTMODE_MASK) >>
40 CTRLMMR_MAIN_DEVSTAT_BKUP_BOOTMODE_SHIFT;
43 case BACKUP_BOOT_DEVICE_USB:
44 return BOOT_DEVICE_USB;
45 case BACKUP_BOOT_DEVICE_UART:
46 return BOOT_DEVICE_UART;
47 case BACKUP_BOOT_DEVICE_ETHERNET:
48 return BOOT_DEVICE_ETHERNET;
49 case BACKUP_BOOT_DEVICE_MMC2:
50 return BOOT_DEVICE_MMC2;
51 case BACKUP_BOOT_DEVICE_SPI:
52 return BOOT_DEVICE_SPI;
53 case BACKUP_BOOT_DEVICE_HYPERFLASH:
54 return BOOT_DEVICE_HYPERFLASH;
55 case BACKUP_BOOT_DEVICE_I2C:
56 return BOOT_DEVICE_I2C;
59 return BOOT_DEVICE_RAM;
62 static u32 __get_primary_bootmedia(u32 devstat)
64 u32 bootmode = devstat & CTRLMMR_MAIN_DEVSTAT_BOOTMODE_MASK;
66 if (bootmode == BOOT_DEVICE_OSPI || bootmode == BOOT_DEVICE_QSPI)
67 bootmode = BOOT_DEVICE_SPI;
72 u32 spl_boot_device(void)
74 u32 devstat = readl(CTRLMMR_MAIN_DEVSTAT);
75 u32 bootindex = readl(K3_BOOT_PARAM_TABLE_INDEX_VAL);
77 if (bootindex == K3_PRIMARY_BOOTMODE)
78 return __get_primary_bootmedia(devstat);
80 return __get_backup_bootmedia(devstat);
84 #ifndef CONFIG_SYSRESET
85 void reset_cpu(ulong ignored)