arm: mach-rockchip: bind sub-nodes for rk3399_syscon
[oweals/u-boot.git] / arch / arm / mach-imx / spl.c
index e82eaa5682463dfffb179e0cc4f5cdc4cd94899b..1a231c67f5accb032a6a691d9b2ad2c07229f33d 100644 (file)
@@ -7,6 +7,9 @@
  */
 
 #include <common.h>
+#include <hang.h>
+#include <init.h>
+#include <log.h>
 #include <asm/io.h>
 #include <asm/arch/imx-regs.h>
 #include <asm/arch/sys_proto.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
+__weak int spl_board_boot_device(enum boot_device boot_dev_spl)
+{
+       return 0;
+}
+
 #if defined(CONFIG_MX6)
 /* determine boot device from SRC_SBMR1 (BOOT_CFG[4:1]) or SRC_GPR9 register */
 u32 spl_boot_device(void)
@@ -92,11 +100,16 @@ u32 spl_boot_device(void)
        /* NAND Flash: 8.5.2, Table 8-10 */
        case IMX6_BMODE_NAND_MIN ... IMX6_BMODE_NAND_MAX:
                return BOOT_DEVICE_NAND;
+#if defined(CONFIG_MX6UL) || defined(CONFIG_MX6ULL)
+       /* QSPI boot */
+       case IMX6_BMODE_QSPI:
+               return BOOT_DEVICE_SPI;
+#endif
        }
        return BOOT_DEVICE_NONE;
 }
 
-#elif defined(CONFIG_MX7) || defined(CONFIG_IMX8M)
+#elif defined(CONFIG_MX7) || defined(CONFIG_IMX8M) || defined(CONFIG_IMX8)
 /* Translate iMX7/i.MX8M boot device to the SPL boot device enumeration */
 u32 spl_boot_device(void)
 {
@@ -125,7 +138,12 @@ u32 spl_boot_device(void)
 
        enum boot_device boot_device_spl = get_boot_device();
 
+       if (IS_ENABLED(CONFIG_IMX8MM) || IS_ENABLED(CONFIG_IMX8MN) ||
+           IS_ENABLED(CONFIG_IMX8MP))
+               return spl_board_boot_device(boot_device_spl);
+
        switch (boot_device_spl) {
+#if defined(CONFIG_MX7)
        case SD1_BOOT:
        case MMC1_BOOT:
        case SD2_BOOT:
@@ -133,6 +151,23 @@ u32 spl_boot_device(void)
        case SD3_BOOT:
        case MMC3_BOOT:
                return BOOT_DEVICE_MMC1;
+#elif defined(CONFIG_IMX8)
+       case MMC1_BOOT:
+               return BOOT_DEVICE_MMC1;
+       case SD2_BOOT:
+               return BOOT_DEVICE_MMC2_2;
+       case SD3_BOOT:
+               return BOOT_DEVICE_MMC1;
+       case FLEXSPI_BOOT:
+               return BOOT_DEVICE_SPI;
+#elif defined(CONFIG_IMX8M)
+       case SD1_BOOT:
+       case MMC1_BOOT:
+               return BOOT_DEVICE_MMC1;
+       case SD2_BOOT:
+       case MMC2_BOOT:
+               return BOOT_DEVICE_MMC2;
+#endif
        case NAND_BOOT:
                return BOOT_DEVICE_NAND;
        case SPI_NOR_BOOT:
@@ -143,9 +178,9 @@ u32 spl_boot_device(void)
                return BOOT_DEVICE_NONE;
        }
 }
-#endif /* CONFIG_MX6 || CONFIG_MX7 || CONFIG_IMX8M */
+#endif /* CONFIG_MX7 || CONFIG_IMX8M || CONFIG_IMX8 */
 
-#ifdef CONFIG_SPL_USB_GADGET_SUPPORT
+#ifdef CONFIG_SPL_USB_GADGET
 int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
 {
        put_unaligned(CONFIG_USB_GADGET_PRODUCT_NUM + 0xfff, &dev->idProduct);
@@ -156,28 +191,52 @@ int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
 
 #if defined(CONFIG_SPL_MMC_SUPPORT)
 /* called from spl_mmc to see type of boot mode for storage (RAW or FAT) */
-u32 spl_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(const u32 boot_device)
 {
-       switch (spl_boot_device()) {
+#if defined(CONFIG_MX7) || defined(CONFIG_IMX8M) || defined(CONFIG_IMX8)
+       switch (get_boot_device()) {
+       /* for MMC return either RAW or FAT mode */
+       case SD1_BOOT:
+       case SD2_BOOT:
+       case SD3_BOOT:
+               if (IS_ENABLED(CONFIG_SPL_FS_FAT))
+                       return MMCSD_MODE_FS;
+               else
+                       return MMCSD_MODE_RAW;
+       case MMC1_BOOT:
+       case MMC2_BOOT:
+       case MMC3_BOOT:
+               if (IS_ENABLED(CONFIG_SPL_FS_FAT))
+                       return MMCSD_MODE_FS;
+               else if (IS_ENABLED(CONFIG_SUPPORT_EMMC_BOOT))
+                       return MMCSD_MODE_EMMCBOOT;
+               else
+                       return MMCSD_MODE_RAW;
+       default:
+               puts("spl: ERROR:  unsupported device\n");
+               hang();
+       }
+#else
+       switch (boot_device) {
        /* for MMC return either RAW or FAT mode */
        case BOOT_DEVICE_MMC1:
        case BOOT_DEVICE_MMC2:
-#if defined(CONFIG_SPL_FAT_SUPPORT)
-               return MMCSD_MODE_FS;
-#elif defined(CONFIG_SUPPORT_EMMC_BOOT)
-               return MMCSD_MODE_EMMCBOOT;
-#else
-               return MMCSD_MODE_RAW;
-#endif
-               break;
+       case BOOT_DEVICE_MMC2_2:
+               if (IS_ENABLED(CONFIG_SPL_FS_FAT))
+                       return MMCSD_MODE_FS;
+               else if (IS_ENABLED(CONFIG_SUPPORT_EMMC_BOOT))
+                       return MMCSD_MODE_EMMCBOOT;
+               else
+                       return MMCSD_MODE_RAW;
        default:
                puts("spl: ERROR:  unsupported device\n");
                hang();
        }
+#endif
 }
 #endif
 
-#if defined(CONFIG_SECURE_BOOT)
+#if defined(CONFIG_IMX_HAB)
 
 /*
  * +------------+  0x0 (DDR_UIMAGE_START) -
@@ -240,6 +299,7 @@ __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
        }
 }
 
+#if !defined(CONFIG_SPL_FIT_SIGNATURE)
 ulong board_spl_fit_size_align(ulong size)
 {
        /*
@@ -264,6 +324,7 @@ void board_spl_fit_post_load(ulong load_addr, size_t length)
                hang();
        }
 }
+#endif
 
 #endif