mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 09:54:35 +00:00
arm: mach-k3: am62a7: Provide a way to obtain boot device for non SPLs
Introduce get_boot_device() to obtain the booting device. Make it also available for non SPL builds so u-boot can also know the device it is booting from. Signed-off-by: Garrett Giordano <ggiordano@phytec.com> Reviewed-by: Bryan Brattlof <bb@ti.com> Reviewed-by: Andrew Davis <afd@ti.com>
This commit is contained in:
parent
53d5f896e9
commit
5c54452042
3 changed files with 108 additions and 96 deletions
|
@ -5,3 +5,4 @@
|
|||
|
||||
obj-$(CONFIG_OF_SYSTEM_SETUP) += am62a7_fdt.o
|
||||
obj-$(CONFIG_XPL_BUILD) += am62a7_init.o
|
||||
obj-y += boot.o
|
||||
|
|
|
@ -171,102 +171,7 @@ void board_init_f(ulong dummy)
|
|||
debug("am62a_init: %s done\n", __func__);
|
||||
}
|
||||
|
||||
static u32 __get_backup_bootmedia(u32 devstat)
|
||||
{
|
||||
u32 bkup_bootmode = (devstat & MAIN_DEVSTAT_BACKUP_BOOTMODE_MASK) >>
|
||||
MAIN_DEVSTAT_BACKUP_BOOTMODE_SHIFT;
|
||||
u32 bkup_bootmode_cfg =
|
||||
(devstat & MAIN_DEVSTAT_BACKUP_BOOTMODE_CFG_MASK) >>
|
||||
MAIN_DEVSTAT_BACKUP_BOOTMODE_CFG_SHIFT;
|
||||
|
||||
switch (bkup_bootmode) {
|
||||
case BACKUP_BOOT_DEVICE_UART:
|
||||
return BOOT_DEVICE_UART;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_USB:
|
||||
return BOOT_DEVICE_USB;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_ETHERNET:
|
||||
return BOOT_DEVICE_ETHERNET;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_MMC:
|
||||
if (bkup_bootmode_cfg)
|
||||
return BOOT_DEVICE_MMC2;
|
||||
return BOOT_DEVICE_MMC1;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_SPI:
|
||||
return BOOT_DEVICE_SPI;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_I2C:
|
||||
return BOOT_DEVICE_I2C;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_DFU:
|
||||
if (bkup_bootmode_cfg & MAIN_DEVSTAT_BACKUP_USB_MODE_MASK)
|
||||
return BOOT_DEVICE_USB;
|
||||
return BOOT_DEVICE_DFU;
|
||||
};
|
||||
|
||||
return BOOT_DEVICE_RAM;
|
||||
}
|
||||
|
||||
static u32 __get_primary_bootmedia(u32 devstat)
|
||||
{
|
||||
u32 bootmode = (devstat & MAIN_DEVSTAT_PRIMARY_BOOTMODE_MASK) >>
|
||||
MAIN_DEVSTAT_PRIMARY_BOOTMODE_SHIFT;
|
||||
u32 bootmode_cfg = (devstat & MAIN_DEVSTAT_PRIMARY_BOOTMODE_CFG_MASK) >>
|
||||
MAIN_DEVSTAT_PRIMARY_BOOTMODE_CFG_SHIFT;
|
||||
|
||||
switch (bootmode) {
|
||||
case BOOT_DEVICE_OSPI:
|
||||
fallthrough;
|
||||
case BOOT_DEVICE_QSPI:
|
||||
fallthrough;
|
||||
case BOOT_DEVICE_XSPI:
|
||||
fallthrough;
|
||||
case BOOT_DEVICE_SPI:
|
||||
return BOOT_DEVICE_SPI;
|
||||
|
||||
case BOOT_DEVICE_ETHERNET_RGMII:
|
||||
fallthrough;
|
||||
case BOOT_DEVICE_ETHERNET_RMII:
|
||||
return BOOT_DEVICE_ETHERNET;
|
||||
|
||||
case BOOT_DEVICE_EMMC:
|
||||
return BOOT_DEVICE_MMC1;
|
||||
|
||||
case BOOT_DEVICE_SPI_NAND:
|
||||
return BOOT_DEVICE_SPINAND;
|
||||
|
||||
case BOOT_DEVICE_MMC:
|
||||
if ((bootmode_cfg & MAIN_DEVSTAT_PRIMARY_MMC_PORT_MASK) >>
|
||||
MAIN_DEVSTAT_PRIMARY_MMC_PORT_SHIFT)
|
||||
return BOOT_DEVICE_MMC2;
|
||||
return BOOT_DEVICE_MMC1;
|
||||
|
||||
case BOOT_DEVICE_DFU:
|
||||
if ((bootmode_cfg & MAIN_DEVSTAT_PRIMARY_USB_MODE_MASK) >>
|
||||
MAIN_DEVSTAT_PRIMARY_USB_MODE_SHIFT)
|
||||
return BOOT_DEVICE_USB;
|
||||
return BOOT_DEVICE_DFU;
|
||||
|
||||
case BOOT_DEVICE_NOBOOT:
|
||||
return BOOT_DEVICE_RAM;
|
||||
}
|
||||
|
||||
return bootmode;
|
||||
}
|
||||
|
||||
u32 spl_boot_device(void)
|
||||
{
|
||||
u32 devstat = readl(CTRLMMR_MAIN_DEVSTAT);
|
||||
u32 bootmedia;
|
||||
|
||||
if (bootindex == K3_PRIMARY_BOOTMODE)
|
||||
bootmedia = __get_primary_bootmedia(devstat);
|
||||
else
|
||||
bootmedia = __get_backup_bootmedia(devstat);
|
||||
|
||||
debug("am62a_init: %s: devstat = 0x%x bootmedia = 0x%x bootindex = %d\n",
|
||||
__func__, devstat, bootmedia, bootindex);
|
||||
return bootmedia;
|
||||
return get_boot_device();
|
||||
}
|
||||
|
|
106
arch/arm/mach-k3/am62ax/boot.c
Normal file
106
arch/arm/mach-k3/am62ax/boot.c
Normal file
|
@ -0,0 +1,106 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
#include <asm/arch/am62a_spl.h>
|
||||
|
||||
static u32 __get_backup_bootmedia(u32 devstat)
|
||||
{
|
||||
u32 bkup_bootmode = (devstat & MAIN_DEVSTAT_BACKUP_BOOTMODE_MASK) >>
|
||||
MAIN_DEVSTAT_BACKUP_BOOTMODE_SHIFT;
|
||||
u32 bkup_bootmode_cfg =
|
||||
(devstat & MAIN_DEVSTAT_BACKUP_BOOTMODE_CFG_MASK) >>
|
||||
MAIN_DEVSTAT_BACKUP_BOOTMODE_CFG_SHIFT;
|
||||
|
||||
switch (bkup_bootmode) {
|
||||
case BACKUP_BOOT_DEVICE_UART:
|
||||
return BOOT_DEVICE_UART;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_USB:
|
||||
return BOOT_DEVICE_USB;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_ETHERNET:
|
||||
return BOOT_DEVICE_ETHERNET;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_MMC:
|
||||
if (bkup_bootmode_cfg)
|
||||
return BOOT_DEVICE_MMC2;
|
||||
return BOOT_DEVICE_MMC1;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_SPI:
|
||||
return BOOT_DEVICE_SPI;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_I2C:
|
||||
return BOOT_DEVICE_I2C;
|
||||
|
||||
case BACKUP_BOOT_DEVICE_DFU:
|
||||
if (bkup_bootmode_cfg & MAIN_DEVSTAT_BACKUP_USB_MODE_MASK)
|
||||
return BOOT_DEVICE_USB;
|
||||
return BOOT_DEVICE_DFU;
|
||||
};
|
||||
|
||||
return BOOT_DEVICE_RAM;
|
||||
}
|
||||
|
||||
static u32 __get_primary_bootmedia(u32 devstat)
|
||||
{
|
||||
u32 bootmode = (devstat & MAIN_DEVSTAT_PRIMARY_BOOTMODE_MASK) >>
|
||||
MAIN_DEVSTAT_PRIMARY_BOOTMODE_SHIFT;
|
||||
u32 bootmode_cfg = (devstat & MAIN_DEVSTAT_PRIMARY_BOOTMODE_CFG_MASK) >>
|
||||
MAIN_DEVSTAT_PRIMARY_BOOTMODE_CFG_SHIFT;
|
||||
|
||||
switch (bootmode) {
|
||||
case BOOT_DEVICE_OSPI:
|
||||
fallthrough;
|
||||
case BOOT_DEVICE_QSPI:
|
||||
fallthrough;
|
||||
case BOOT_DEVICE_XSPI:
|
||||
fallthrough;
|
||||
case BOOT_DEVICE_SPI:
|
||||
return BOOT_DEVICE_SPI;
|
||||
|
||||
case BOOT_DEVICE_ETHERNET_RGMII:
|
||||
fallthrough;
|
||||
case BOOT_DEVICE_ETHERNET_RMII:
|
||||
return BOOT_DEVICE_ETHERNET;
|
||||
|
||||
case BOOT_DEVICE_EMMC:
|
||||
return BOOT_DEVICE_MMC1;
|
||||
|
||||
case BOOT_DEVICE_SPI_NAND:
|
||||
return BOOT_DEVICE_SPINAND;
|
||||
|
||||
case BOOT_DEVICE_MMC:
|
||||
if ((bootmode_cfg & MAIN_DEVSTAT_PRIMARY_MMC_PORT_MASK) >>
|
||||
MAIN_DEVSTAT_PRIMARY_MMC_PORT_SHIFT)
|
||||
return BOOT_DEVICE_MMC2;
|
||||
return BOOT_DEVICE_MMC1;
|
||||
|
||||
case BOOT_DEVICE_DFU:
|
||||
if ((bootmode_cfg & MAIN_DEVSTAT_PRIMARY_USB_MODE_MASK) >>
|
||||
MAIN_DEVSTAT_PRIMARY_USB_MODE_SHIFT)
|
||||
return BOOT_DEVICE_USB;
|
||||
return BOOT_DEVICE_DFU;
|
||||
|
||||
case BOOT_DEVICE_NOBOOT:
|
||||
return BOOT_DEVICE_RAM;
|
||||
}
|
||||
|
||||
return bootmode;
|
||||
}
|
||||
|
||||
u32 get_boot_device(void)
|
||||
{
|
||||
u32 devstat = readl(CTRLMMR_MAIN_DEVSTAT);
|
||||
u32 bootmode = *(u32 *)(K3_BOOT_PARAM_TABLE_INDEX_OCRAM);
|
||||
u32 bootmedia;
|
||||
|
||||
if (bootmode == K3_PRIMARY_BOOTMODE)
|
||||
bootmedia = __get_primary_bootmedia(devstat);
|
||||
else
|
||||
bootmedia = __get_backup_bootmedia(devstat);
|
||||
|
||||
debug("%s: devstat = 0x%x bootmedia = 0x%x bootmode = %d\n",
|
||||
__func__, devstat, bootmedia, bootmode);
|
||||
|
||||
return bootmedia;
|
||||
}
|
Loading…
Add table
Reference in a new issue