mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-12 02:06:59 +02:00
arm: mach-k3: am625: 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: Wadim Egorov <w.egorov@phytec.de>
This commit is contained in:
parent
d1cba4a450
commit
2f9095e2bf
@ -25,3 +25,4 @@ obj-$(CONFIG_SOC_K3_J784S4) += j784s4_init.o
|
|||||||
obj-$(CONFIG_SOC_K3_AM62P5) += am62p5_init.o
|
obj-$(CONFIG_SOC_K3_AM62P5) += am62p5_init.o
|
||||||
endif
|
endif
|
||||||
obj-y += common.o security.o
|
obj-y += common.o security.o
|
||||||
|
obj-$(CONFIG_SOC_K3_AM625) += am62x/
|
||||||
|
@ -305,100 +305,7 @@ u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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_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 spl_boot_device(void)
|
||||||
{
|
{
|
||||||
u32 devstat = readl(CTRLMMR_MAIN_DEVSTAT);
|
return get_boot_device();
|
||||||
u32 bootmedia;
|
|
||||||
|
|
||||||
if (bootindex == K3_PRIMARY_BOOTMODE)
|
|
||||||
bootmedia = __get_primary_bootmedia(devstat);
|
|
||||||
else
|
|
||||||
bootmedia = __get_backup_bootmedia(devstat);
|
|
||||||
|
|
||||||
debug("am625_init: %s: devstat = 0x%x bootmedia = 0x%x bootindex = %d\n",
|
|
||||||
__func__, devstat, bootmedia, bootindex);
|
|
||||||
|
|
||||||
return bootmedia;
|
|
||||||
}
|
}
|
||||||
|
2
arch/arm/mach-k3/am62x/Makefile
Normal file
2
arch/arm/mach-k3/am62x/Makefile
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
obj-y += boot.o
|
103
arch/arm/mach-k3/am62x/boot.c
Normal file
103
arch/arm/mach-k3/am62x/boot.c
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
#include <asm/arch/am62_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_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;
|
||||||
|
}
|
@ -107,4 +107,5 @@ struct rom_extended_boot_data {
|
|||||||
u32 num_components;
|
u32 num_components;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
u32 get_boot_device(void);
|
||||||
#endif /* _ASM_ARCH_HARDWARE_H_ */
|
#endif /* _ASM_ARCH_HARDWARE_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user