SPL: Adjust more debug prints for ulong entry_point
[oweals/u-boot.git] / arch / arm / imx-common / spl.c
index ac6e40e83b807bfc29a7979bc15962b982accc87..60c4adf237517706bdc8df7b7e3f54dda47306b2 100644 (file)
@@ -12,6 +12,7 @@
 #include <asm/arch/imx-regs.h>
 #include <asm/spl.h>
 #include <spl.h>
+#include <asm/imx-common/hab.h>
 
 #if defined(CONFIG_MX6)
 /* determine boot device from SRC_SBMR1 (BOOT_CFG[4:1]) or SRC_GPR9 register */
@@ -20,7 +21,15 @@ u32 spl_boot_device(void)
        struct src *psrc = (struct src *)SRC_BASE_ADDR;
        unsigned int gpr10_boot = readl(&psrc->gpr10) & (1 << 28);
        unsigned reg = gpr10_boot ? readl(&psrc->gpr9) : readl(&psrc->sbmr1);
+       unsigned int bmode = readl(&psrc->sbmr2);
 
+       /*
+        * Check for BMODE if serial downloader is enabled
+        * BOOT_MODE - see IMX6DQRM Table 8-1
+        */
+       if ((((bmode >> 24) & 0x03)  == 0x01) || /* Serial Downloader */
+               (gpr10_boot && (reg == 1)))
+               return BOOT_DEVICE_UART;
        /* BOOT_CFG1[7:4] - see IMX6DQRM Table 8-8 */
        switch ((reg & 0x000000FF) >> 4) {
         /* EIM: See 8.5.1, Table 8-9 */
@@ -62,7 +71,7 @@ u32 spl_boot_device(void)
 
 #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(void)
+u32 spl_boot_mode(const u32 boot_device)
 {
        switch (spl_boot_device()) {
        /* for MMC return either RAW or FAT mode */
@@ -82,3 +91,27 @@ u32 spl_boot_mode(void)
        }
 }
 #endif
+
+#if defined(CONFIG_SECURE_BOOT)
+
+__weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
+{
+       typedef void __noreturn (*image_entry_noargs_t)(void);
+
+       image_entry_noargs_t image_entry =
+               (image_entry_noargs_t)(unsigned long)spl_image->entry_point;
+
+       debug("image entry point: 0x%lX\n", spl_image->entry_point);
+
+       /* HAB looks for the CSF at the end of the authenticated data therefore,
+        * we need to subtract the size of the CSF from the actual filesize */
+       if (authenticate_image(spl_image->load_addr,
+                              spl_image->size - CONFIG_CSF_SIZE)) {
+               image_entry();
+       } else {
+               puts("spl: ERROR:  image authentication unsuccessful\n");
+               hang();
+       }
+}
+
+#endif