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 <ggiord...@phytec.com>
---
 arch/arm/mach-k3/Makefile             |   1 +
 arch/arm/mach-k3/am62ax/Makefile      |   1 +
 arch/arm/mach-k3/am62ax/am62a7_init.c |  97 +----------------------
 arch/arm/mach-k3/am62ax/boot.c        | 106 ++++++++++++++++++++++++++
 4 files changed, 109 insertions(+), 96 deletions(-)
 create mode 100644 arch/arm/mach-k3/am62ax/boot.c

diff --git a/arch/arm/mach-k3/Makefile b/arch/arm/mach-k3/Makefile
index 8c4f6786a5b..ce09a30e58f 100644
--- a/arch/arm/mach-k3/Makefile
+++ b/arch/arm/mach-k3/Makefile
@@ -10,6 +10,7 @@ obj-y += common.o security.o
 obj-$(CONFIG_SOC_K3_AM62A7) += am62ax/
 obj-$(CONFIG_SOC_K3_AM62P5) += am62px/
 obj-$(CONFIG_SOC_K3_AM625) += am62x/
+obj-$(CONFIG_SOC_K3_AM62A7) += am62ax/
 obj-$(CONFIG_SOC_K3_AM642) += am64x/
 obj-$(CONFIG_SOC_K3_AM654) += am65x/
 obj-$(CONFIG_SOC_K3_J721E) += j721e/
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

Reply via email to