
On 10/31/24 11:21 AM, Garrett Giordano wrote:
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
Seems similar enough to what has been done already for AM64x, might be good at some point to just do this for all the K3 SoCs. I wonder how much of the contents of these functions are common across them all..
For now, LGTM,
Reviewed-by: Andrew Davis afd@ti.com
v2: - Drop duplicate CONFIG_SOC_K3_AM62A7 entry from arch/arm/mach-k3/Makefile
arch/arm/mach-k3/am62ax/Makefile | 1 + arch/arm/mach-k3/am62ax/am62a7_init.c | 97 +---------------------- arch/arm/mach-k3/am62ax/boot.c | 106 ++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 96 deletions(-) create mode 100644 arch/arm/mach-k3/am62ax/boot.c
diff --git a/arch/arm/mach-k3/am62ax/Makefile b/arch/arm/mach-k3/am62ax/Makefile index e2ef88196f8..4e35e0c844d 100644 --- a/arch/arm/mach-k3/am62ax/Makefile +++ b/arch/arm/mach-k3/am62ax/Makefile @@ -5,3 +5,4 @@
obj-$(CONFIG_OF_SYSTEM_SETUP) += am62a7_fdt.o obj-$(CONFIG_XPL_BUILD) += am62a7_init.o +obj-y += boot.o diff --git a/arch/arm/mach-k3/am62ax/am62a7_init.c b/arch/arm/mach-k3/am62ax/am62a7_init.c index 0f62f39075b..5c0d3ee6869 100644 --- a/arch/arm/mach-k3/am62ax/am62a7_init.c +++ b/arch/arm/mach-k3/am62ax/am62a7_init.c @@ -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(); }
diff --git a/arch/arm/mach-k3/am62ax/boot.c b/arch/arm/mach-k3/am62ax/boot.c new file mode 100644 index 00000000000..af7fce1e5e9 --- /dev/null +++ b/arch/arm/mach-k3/am62ax/boot.c @@ -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;
+}
2.25.1