MLK-16753-8 imx: mx6ul/ull: add optee support
authorPeng Fan <peng.fan@nxp.com>
Fri, 10 Nov 2017 05:29:49 +0000 (13:29 +0800)
committerPeng Fan <peng.fan@nxp.com>
Fri, 10 Nov 2017 05:29:49 +0000 (13:29 +0800)
Add different defconfigs.
Enable Trustzone.
Update env to runtime boot OP-TEE.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
13 files changed:
board/freescale/mx6ul_14x14_evk/imximage.cfg
board/freescale/mx6ul_14x14_evk/imximage_lpddr2.cfg
board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c
board/freescale/mx6ul_14x14_evk/plugin.S
board/freescale/mx6ullevk/imximage.cfg
board/freescale/mx6ullevk/imximage_lpddr2.cfg
board/freescale/mx6ullevk/mx6ullevk.c
board/freescale/mx6ullevk/plugin.S
configs/mx6ul_14x14_evk_optee_defconfig [new file with mode: 0644]
configs/mx6ul_9x9_evk_optee_defconfig [new file with mode: 0644]
configs/mx6ull_14x14_evk_optee_defconfig [new file with mode: 0644]
include/configs/mx6ul_14x14_evk.h
include/configs/mx6ullevk.h

index 7525813..12bb9fa 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  *
  * SPDX-License-Identifier:    GPL-2.0+
  *
@@ -63,6 +64,11 @@ DATA 4 0x020c4078 0xffffffff
 DATA 4 0x020c407c 0xffffffff
 DATA 4 0x020c4080 0xffffffff
 
+#ifdef CONFIG_IMX_OPTEE
+DATA 4 0x20e4024 0x00000001
+CHECK_BITS_SET 4 0x20e4024 0x1
+#endif
+
 DATA 4 0x020E04B4 0x000C0000
 DATA 4 0x020E04AC 0x00000000
 DATA 4 0x020E027C 0x00000030
@@ -129,6 +135,11 @@ DATA 4 0x020c4078 0xffffffff
 DATA 4 0x020c407c 0xffffffff
 DATA 4 0x020c4080 0xffffffff
 
+#ifdef CONFIG_IMX_OPTEE
+DATA 4 0x20e4024 0x00000001
+CHECK_BITS_SET 4 0x20e4024 0x1
+#endif
+
 DATA 4 0x020E04B4 0x000C0000
 DATA 4 0x020E04AC 0x00000000
 DATA 4 0x020E027C 0x00000030
index c112e82..2c35a7d 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  *
  * SPDX-License-Identifier:    GPL-2.0+
  *
@@ -59,6 +60,11 @@ DATA 4 0x020c407c 0xffffffff
 DATA 4 0x020c4080 0xffffffff
 DATA 4 0x020c4084 0xffffffff
 
+#ifdef CONFIG_IMX_OPTEE
+DATA 4 0x20e4024 0x00000001
+CHECK_BITS_SET 4 0x20e4024 0x1
+#endif
+
 DATA 4 0x020E04B4 0x00080000
 DATA 4 0x020E04AC 0x00000000
 DATA 4 0x020E027C 0x00000030
index 325b6df..6a43337 100644 (file)
@@ -900,6 +900,11 @@ int board_late_init(void)
        add_board_boot_modes(board_boot_modes);
 #endif
 
+       setenv("tee", "no");
+#ifdef CONFIG_IMX_OPTEE
+       setenv("tee", "yes");
+#endif
+
 #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
        setenv("board_name", "EVK");
 
index f04b964..e420d5d 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015-2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
        str r1, [r0, #0x78]
        str r1, [r0, #0x7C]
        str r1, [r0, #0x80]
+
+#ifdef CONFIG_IMX_OPTEE
+       ldr r0, =0x20e4024
+       ldr r1, =1
+       str r1, [r0]
+#endif
 .endm
 
 .macro imx6_qos_setting
index 80cb038..e77b18c 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  *
  * SPDX-License-Identifier:    GPL-2.0+
  *
@@ -59,6 +60,11 @@ DATA 4 0x020c4078 0xffffffff
 DATA 4 0x020c407c 0xffffffff
 DATA 4 0x020c4080 0xffffffff
 
+#ifdef CONFIG_IMX_OPTEE
+DATA 4 0x20e4024 0x00000001
+CHECK_BITS_SET 4 0x20e4024 0x1
+#endif
+
 DATA 4 0x020E04B4 0x000C0000
 DATA 4 0x020E04AC 0x00000000
 DATA 4 0x020E027C 0x00000030
index 4fa9103..3e3ad26 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  *
  * SPDX-License-Identifier:    GPL-2.0+
  *
@@ -58,6 +59,11 @@ DATA 4 0x020c4078 0xffffffff
 DATA 4 0x020c407c 0xffffffff
 DATA 4 0x020c4080 0xffffffff
 
+#ifdef CONFIG_IMX_OPTEE
+DATA 4 0x20e4024 0x00000001
+CHECK_BITS_SET 4 0x20e4024 0x1
+#endif
+
 DATA 4 0x020E04B4 0x00080000
 DATA 4 0x020E04AC 0x00000000
 DATA 4 0x020E027C 0x00000030
index 507343e..d85873d 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
@@ -488,6 +489,11 @@ int board_late_init(void)
        add_board_boot_modes(board_boot_modes);
 #endif
 
+       setenv("tee", "no");
+#ifdef CONFIG_IMX_OPTEE
+       setenv("tee", "yes");
+#endif
+
 #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
        setenv("board_name", "EVK");
 
index 6b3870d..6b78df5 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
        str r1, [r0, #0x78]
        str r1, [r0, #0x7C]
        str r1, [r0, #0x80]
+
+#ifdef CONFIG_IMX_OPTEE
+       ldr r0, =0x20e4024
+       ldr r1, =0x1
+       str r1, [r0]
+#endif
 .endm
 
 .macro imx6_qos_setting
diff --git a/configs/mx6ul_14x14_evk_optee_defconfig b/configs/mx6ul_14x14_evk_optee_defconfig
new file mode 100644 (file)
index 0000000..af44748
--- /dev/null
@@ -0,0 +1,50 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX6=y
+CONFIG_TARGET_MX6UL_14X14_EVK=y
+CONFIG_VIDEO=y
+CONFIG_DEFAULT_DEVICE_TREE="imx6ul-14x14-evk"
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ul_14x14_evk/imximage.cfg"
+CONFIG_IMX_OPTEE=y
+CONFIG_BOOTDELAY=3
+CONFIG_BOARD_EARLY_INIT_F=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_NET=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_OF_CONTROL=y
+# CONFIG_BLK is not set
+CONFIG_DM_GPIO=y
+CONFIG_DM_74X164=y
+CONFIG_DM_I2C=y
+CONFIG_DM_MMC=y
+CONFIG_DM_SPI=y
+CONFIG_DM_SPI_FLASH=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_FLASH_STMICRO=y
+# CONFIG_DM_MMC_OPS is not set
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_IMX6=y
+CONFIG_DM_REGULATOR=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_GPIO=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_STORAGE=y
+CONFIG_FSL_QSPI=y
+CONFIG_DM_ETH=y
diff --git a/configs/mx6ul_9x9_evk_optee_defconfig b/configs/mx6ul_9x9_evk_optee_defconfig
new file mode 100644 (file)
index 0000000..402dffb
--- /dev/null
@@ -0,0 +1,53 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX6=y
+CONFIG_TARGET_MX6UL_9X9_EVK=y
+CONFIG_VIDEO=y
+CONFIG_DEFAULT_DEVICE_TREE="imx6ul-9x9-evk"
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ul_14x14_evk/imximage_lpddr2.cfg"
+CONFIG_IMX_OPTEE=y
+CONFIG_BOOTDELAY=3
+CONFIG_BOARD_EARLY_INIT_F=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_NET=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_OF_CONTROL=y
+# CONFIG_BLK is not set
+CONFIG_DM_GPIO=y
+CONFIG_DM_74X164=y
+CONFIG_DM_I2C=y
+CONFIG_DM_MMC=y
+CONFIG_DM_SPI=y
+CONFIG_DM_SPI_FLASH=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_FLASH_STMICRO=y
+# CONFIG_DM_MMC_OPS is not set
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_IMX6=y
+CONFIG_DM_PMIC=y
+CONFIG_DM_PMIC_PFUZE100=y
+CONFIG_DM_REGULATOR=y
+CONFIG_DM_REGULATOR_PFUZE100=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_GPIO=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_STORAGE=y
+CONFIG_FSL_QSPI=y
+CONFIG_DM_ETH=y
diff --git a/configs/mx6ull_14x14_evk_optee_defconfig b/configs/mx6ull_14x14_evk_optee_defconfig
new file mode 100644 (file)
index 0000000..0bf910a
--- /dev/null
@@ -0,0 +1,50 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX6=y
+CONFIG_TARGET_MX6ULL_14X14_EVK=y
+CONFIG_VIDEO=y
+CONFIG_DEFAULT_DEVICE_TREE="imx6ull-14x14-evk"
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage.cfg"
+CONFIG_IMX_OPTEE=y
+CONFIG_BOOTDELAY=3
+CONFIG_BOARD_EARLY_INIT_F=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_NET=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_FS_GENERIC=y
+CONFIG_OF_CONTROL=y
+# CONFIG_BLK is not set
+CONFIG_DM_GPIO=y
+CONFIG_DM_74X164=y
+CONFIG_DM_I2C=y
+CONFIG_DM_MMC=y
+CONFIG_DM_SPI=y
+CONFIG_DM_SPI_FLASH=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_BAR=y
+CONFIG_SPI_FLASH_STMICRO=y
+# CONFIG_DM_MMC_OPS is not set
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_IMX6=y
+CONFIG_DM_REGULATOR=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_GPIO=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_STORAGE=y
+CONFIG_FSL_QSPI=y
+CONFIG_DM_ETH=y
index fcac8a0..d3012ea 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015-2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  *
  * Configuration settings for the Freescale i.MX6UL 14x14 EVK board.
  *
 
 #define CONFIG_SYS_MMC_IMG_LOAD_PART   1
 
+#ifdef CONFIG_IMX_OPTEE
+#ifdef CONFIG_NAND_BOOT
+#define MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(tee),16m(kernel),16m(dtb),1m(misc),-(rootfs) "
+#else
+#define MFG_NAND_PARTITION ""
+#endif
+
+#else
 #ifdef CONFIG_NAND_BOOT
 #define MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) "
 #else
 #define MFG_NAND_PARTITION ""
 #endif
+#endif
 
 #define CONFIG_MFG_ENV_SETTINGS \
        "mfgtool_args=setenv bootargs console=${console},${baudrate} " \
                "\0" \
        "initrd_addr=0x83800000\0" \
        "initrd_high=0xffffffff\0" \
-       "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \
+       "bootcmd_mfg=run mfgtool_args; " \
+               "if test ${tee} = yes; then " \
+                       "bootm ${tee_addr} ${initrd_addr} ${fdt_addr}; " \
+               "else " \
+                       "bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \
 
 #if defined(CONFIG_NAND_BOOT)
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "bootargs=console=ttymxc0,115200 ubi.mtd=4 "  \
                "root=ubi0:rootfs rootfstype=ubifs "                 \
                BOOTARGS_CMA_SIZE \
-               "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs)\0"\
-       "bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
-               "nand read ${fdt_addr} 0x5000000 0x100000;"\
-               "bootz ${loadaddr} - ${fdt_addr}\0"
+               MFG_NAND_PARTITION \
+               "\0" \
+       "bootcmd=nand read ${loadaddr} 0x5000000 0x800000;"\
+               "nand read ${fdt_addr} 0x6000000 0x100000;"\
+               "if test ${tee} = yes; then " \
+                       "nand read ${tee_addr} 0x4000000 0x400000;"\
+                       "bootm ${teeaddr} - ${fdt_addr};" \
+               "else " \
+                       "bootz ${loadaddr} - ${fdt_addr};" \
+               "fi\0"
 
 #else
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "initrd_high=0xffffffff\0" \
        "fdt_file=undefined\0" \
        "fdt_addr=0x83000000\0" \
+       "tee_addr=0x84000000\0" \
+       "tee_file=undefined\0" \
        "boot_fdt=try\0" \
        "ip_dyn=yes\0" \
        "panel=TFT43AB\0" \
                "source\0" \
        "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
        "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
+       "loadtee=fatload mmc ${mmcdev}:${mmcpart} ${tee_addr} ${tee_file}\0" \
        "mmcboot=echo Booting from mmc ...; " \
                "run mmcargs; " \
-               "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
-                       "if run loadfdt; then " \
-                               "bootz ${loadaddr} - ${fdt_addr}; " \
-                       "else " \
-                               "if test ${boot_fdt} = try; then " \
-                                       "bootz; " \
+               "if test ${tee} = yes; then " \
+                       "run loadfdt; run loadtee; bootm ${tee_addr} - ${fdt_addr}; " \
+               "else " \
+                       "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+                               "if run loadfdt; then " \
+                                       "bootz ${loadaddr} - ${fdt_addr}; " \
                                "else " \
-                                       "echo WARN: Cannot load the DT; " \
+                                       "if test ${boot_fdt} = try; then " \
+                                               "bootz; " \
+                                       "else " \
+                                               "echo WARN: Cannot load the DT; " \
+                                       "fi; " \
                                "fi; " \
+                       "else " \
+                               "bootz; " \
                        "fi; " \
-               "else " \
-                       "bootz; " \
                "fi;\0" \
        "netargs=setenv bootargs console=${console},${baudrate} " \
                BOOTARGS_CMA_SIZE \
                        "setenv get_cmd tftp; " \
                "fi; " \
                "${get_cmd} ${image}; " \
-               "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
-                       "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
-                               "bootz ${loadaddr} - ${fdt_addr}; " \
-                       "else " \
-                               "if test ${boot_fdt} = try; then " \
-                                       "bootz; " \
+               "if test ${tee} = yes; then " \
+                       "${get_cmd} ${tee_addr} ${tee_file}; " \
+                       "${get_cmd} ${fdt_addr} ${fdt_file}; " \
+                       "bootm ${tee_addr} - ${fdt_addr}; " \
+               "else " \
+                       "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+                               "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
+                                       "bootz ${loadaddr} - ${fdt_addr}; " \
                                "else " \
-                                       "echo WARN: Cannot load the DT; " \
+                                       "if test ${boot_fdt} = try; then " \
+                                               "bootz; " \
+                                       "else " \
+                                               "echo WARN: Cannot load the DT; " \
+                                       "fi; " \
                                "fi; " \
+                       "else " \
+                               "bootz; " \
                        "fi; " \
-               "else " \
-                       "bootz; " \
                "fi;\0" \
+               "findtee="\
+                       "if test $tee_file = undefined; then " \
+                               "if test $board_name = EVK && test $board_rev = 9X9; then " \
+                                       "setenv tee_file uTee-6ul9x9; fi; " \
+                               "if test $board_name = EVK && test $board_rev = 14X14; then " \
+                                       "setenv tee_file uTee-6ul; fi; " \
+                               "if test $fdt_file = undefined; then " \
+                                       "echo WARNING: Could not determine tee to use; fi; " \
+                       "fi;\0" \
                "findfdt="\
                        "if test $fdt_file = undefined; then " \
                                "if test $board_name = EVK && test $board_rev = 9X9; then " \
index d9f03dd..d598656 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  *
  * Configuration settings for the Freescale i.MX6UL 14x14 EVK board.
  *
 
 #define CONFIG_SYS_MMC_IMG_LOAD_PART   1
 
+#ifdef CONFIG_IMX_OPTEE
+#ifdef CONFIG_NAND_BOOT
+#define MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(tee),16m(kernel),16m(dtb),1m(misc),-(rootfs) "
+#else
+#define MFG_NAND_PARTITION ""
+#endif
+
+#else
 #ifdef CONFIG_NAND_BOOT
 #define MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) "
 #else
 #define MFG_NAND_PARTITION ""
 #endif
+#endif
 
 #define CONFIG_MFG_ENV_SETTINGS \
        "mfgtool_args=setenv bootargs console=${console},${baudrate} " \
                "\0" \
        "initrd_addr=0x83800000\0" \
        "initrd_high=0xffffffff\0" \
-       "bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \
+       "bootcmd_mfg=run mfgtool_args; " \
+               "if test ${tee} = yes; then " \
+                       "bootm ${tee_addr} ${initrd_addr} ${fdt_addr}; " \
+               "else " \
+                       "bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \
 
 #if defined(CONFIG_NAND_BOOT)
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "bootargs=console=ttymxc0,115200 ubi.mtd=4 "  \
                "root=ubi0:rootfs rootfstype=ubifs "                 \
                BOOTARGS_CMA_SIZE \
-               "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs)\0"\
-       "bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
-               "nand read ${fdt_addr} 0x5000000 0x100000;"\
-               "bootz ${loadaddr} - ${fdt_addr}\0"
+               MFG_NAND_PARTITION \
+               "\0" \
+       "bootcmd=nand read ${loadaddr} 0x5000000 0x800000;"\
+               "nand read ${fdt_addr} 0x6000000 0x100000;"\
+               "if test ${tee} = yes; then " \
+                       "nand read ${tee_addr} 0x4000000 0x400000;"\
+                       "bootm ${teeaddr} - ${fdt_addr};" \
+               "else " \
+                       "bootz ${loadaddr} - ${fdt_addr};" \
+               "fi\0"
 
 #else
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "initrd_high=0xffffffff\0" \
        "fdt_file=undefined\0" \
        "fdt_addr=0x83000000\0" \
+       "tee_addr=0x84000000\0" \
+       "tee_file=uTee-6ullevk\0" \
        "boot_fdt=try\0" \
        "ip_dyn=yes\0" \
        "panel=TFT43AB\0" \
                "source\0" \
        "loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \
        "loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \
+       "loadtee=fatload mmc ${mmcdev}:${mmcpart} ${tee_addr} ${tee_file}\0" \
        "mmcboot=echo Booting from mmc ...; " \
                "run mmcargs; " \
-               "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
-                       "if run loadfdt; then " \
-                               "bootz ${loadaddr} - ${fdt_addr}; " \
-                       "else " \
-                               "if test ${boot_fdt} = try; then " \
-                                       "bootz; " \
+               "if test ${tee} = yes; then " \
+                       "run loadfdt; run loadtee; bootm ${tee_addr} - ${fdt_addr}; " \
+               "else " \
+                       "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+                               "if run loadfdt; then " \
+                                       "bootz ${loadaddr} - ${fdt_addr}; " \
                                "else " \
-                                       "echo WARN: Cannot load the DT; " \
+                                       "if test ${boot_fdt} = try; then " \
+                                               "bootz; " \
+                                       "else " \
+                                               "echo WARN: Cannot load the DT; " \
+                                       "fi; " \
                                "fi; " \
+                       "else " \
+                               "bootz; " \
                        "fi; " \
-               "else " \
-                       "bootz; " \
                "fi;\0" \
        "netargs=setenv bootargs console=${console},${baudrate} " \
                BOOTARGS_CMA_SIZE \
                        "setenv get_cmd tftp; " \
                "fi; " \
                "${get_cmd} ${image}; " \
-               "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
-                       "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
-                               "bootz ${loadaddr} - ${fdt_addr}; " \
-                       "else " \
-                               "if test ${boot_fdt} = try; then " \
-                                       "bootz; " \
+               "if test ${tee} = yes; then " \
+                       "${get_cmd} ${tee_addr} ${tee_file}; " \
+                       "${get_cmd} ${fdt_addr} ${fdt_file}; " \
+                       "bootm ${tee_addr} - ${fdt_addr}; " \
+               "else " \
+                       "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \
+                               "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \
+                                       "bootz ${loadaddr} - ${fdt_addr}; " \
                                "else " \
-                                       "echo WARN: Cannot load the DT; " \
+                                       "if test ${boot_fdt} = try; then " \
+                                               "bootz; " \
+                                       "else " \
+                                               "echo WARN: Cannot load the DT; " \
+                                       "fi; " \
                                "fi; " \
+                       "else " \
+                               "bootz; " \
                        "fi; " \
-               "else " \
-                       "bootz; " \
                "fi;\0" \
                "findfdt="\
                        "if test $fdt_file = undefined; then " \