Merge branch 'master' of git://git.denx.de/u-boot-i2c
[oweals/u-boot.git] / arch / arm / cpu / armv8 / fsl-layerscape / soc.c
index c0a8e301a50e91cce9c892891bfeddfc6fe317e8..06f3edb302816345bed5a3f4db54a049dedb0e4a 100644 (file)
@@ -684,7 +684,7 @@ int qspi_ahb_init(void)
 #endif
 
 #ifdef CONFIG_TFABOOT
-#define MAX_BOOTCMD_SIZE       256
+#define MAX_BOOTCMD_SIZE       512
 
 int fsl_setenv_bootcmd(void)
 {
@@ -747,6 +747,54 @@ int fsl_setenv_bootcmd(void)
        }
        return 0;
 }
+
+int fsl_setenv_mcinitcmd(void)
+{
+       int ret = 0;
+       enum boot_src src = get_boot_src();
+
+       switch (src) {
+#ifdef IFC_MC_INIT_CMD
+       case BOOT_SOURCE_IFC_NAND:
+       case BOOT_SOURCE_IFC_NOR:
+       ret = env_set("mcinitcmd", IFC_MC_INIT_CMD);
+               break;
+#endif
+#ifdef QSPI_MC_INIT_CMD
+       case BOOT_SOURCE_QSPI_NAND:
+       case BOOT_SOURCE_QSPI_NOR:
+       ret = env_set("mcinitcmd", QSPI_MC_INIT_CMD);
+               break;
+#endif
+#ifdef XSPI_MC_INIT_CMD
+       case BOOT_SOURCE_XSPI_NAND:
+       case BOOT_SOURCE_XSPI_NOR:
+       ret = env_set("mcinitcmd", XSPI_MC_INIT_CMD);
+               break;
+#endif
+#ifdef SD_MC_INIT_CMD
+       case BOOT_SOURCE_SD_MMC:
+       ret = env_set("mcinitcmd", SD_MC_INIT_CMD);
+               break;
+#endif
+#ifdef SD2_MC_INIT_CMD
+       case BOOT_SOURCE_SD_MMC2:
+       ret = env_set("mcinitcmd", SD2_MC_INIT_CMD);
+               break;
+#endif
+       default:
+#ifdef QSPI_MC_INIT_CMD
+       ret = env_set("mcinitcmd", QSPI_MC_INIT_CMD);
+#endif
+               break;
+       }
+
+       if (ret) {
+               printf("Failed to set mcinitcmd: ret = %d\n", ret);
+               return ret;
+       }
+       return 0;
+}
 #endif
 
 #ifdef CONFIG_BOARD_LATE_INIT
@@ -758,9 +806,23 @@ int board_late_init(void)
 #ifdef CONFIG_TFABOOT
        /*
         * check if gd->env_addr is default_environment; then setenv bootcmd
+        * and mcinitcmd.
+        */
+       if (gd->env_addr + gd->reloc_off == (ulong)&default_environment[0]) {
+               fsl_setenv_bootcmd();
+               fsl_setenv_mcinitcmd();
+       }
+
+       /*
+        * If the boot mode is secure, default environment is not present then
+        * setenv command needs to be run by default
         */
-       if (gd->env_addr + gd->reloc_off == (ulong)&default_environment[0])
+#ifdef CONFIG_CHAIN_OF_TRUST
+       if ((fsl_check_boot_mode_secure() == 1)) {
                fsl_setenv_bootcmd();
+               fsl_setenv_mcinitcmd();
+       }
+#endif
 #endif
 #ifdef CONFIG_QSPI_AHB_INIT
        qspi_ahb_init();