MLK-16753-9 imx: mx7: add optee support
authorPeng Fan <peng.fan@nxp.com>
Fri, 10 Nov 2017 05:31:43 +0000 (13:31 +0800)
committerYe Li <ye.li@nxp.com>
Thu, 29 Apr 2021 07:56:06 +0000 (00:56 -0700)
Add different defconfigs.
Enable Trustzone.
Update env to runtime boot OP-TEE.
mx7d arm2 board not supported now.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
(cherry picked from commit 435807b41ae99bb9f4e0b2c7b9e5287c2bd520c0)
(cherry picked from commit b78124c2f68b9aa4ec2f160d99364bfab72ab5e3)
(cherry picked from commit 641b195a5633cfc3960a42bbb332dd8fead9f939)
(cherry picked from commit 4ca1af73ade293f135ccf44686f87e39b1f494ec)
(cherry picked from commit eaff76c0f64ca756952c91a923a7bbeeffa36107)
(cherry picked from commit 44b2dafa6b97cc6b4ac0fe6a16010212f6dc9a81)

board/freescale/mx7dsabresd/imximage.cfg
board/freescale/mx7dsabresd/mx7dsabresd.c
board/freescale/mx7dsabresd/plugin.S
board/freescale/mx7ulp_evk/mx7ulp_evk.c
configs/mx7dsabresd_optee_defconfig [new file with mode: 0644]
configs/mx7ulp_evk_optee_defconfig [new file with mode: 0644]
include/configs/mx7dsabresd.h
include/configs/mx7ulp_evk.h

index ce0b1c0..c587e10 100644 (file)
@@ -45,6 +45,10 @@ CSF CONFIG_CSF_SIZE
  *     value     value to be stored in the register
  */
 
+#ifdef CONFIG_IMX_OPTEE
+DATA 4 0x30340024 0x1
+CHECK_BITS_SET 4 0x30340024 0x1
+#endif
 DATA 4 0x30340004 0x4F400005
 /* Clear then set bit30 to ensure exit from DDR retention */
 DATA 4 0x30360388 0x40000000
index de7c4da..7c3b5bb 100644 (file)
@@ -678,6 +678,11 @@ int board_late_init(void)
 {
        struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
 
+       env_set("tee", "no");
+#ifdef CONFIG_IMX_OPTEE
+       env_set("tee", "yes");
+#endif
+
 #ifdef CONFIG_ENV_IS_IN_MMC
        board_late_mmc_env_init();
 #endif
index 025f50a..1f64e46 100644 (file)
@@ -215,6 +215,11 @@ wait_stat:
 .endm
 
 .macro imx7_clock_gating
+#ifdef CONFIG_IMX_OPTEE
+       ldr r0, =0x30340024
+       ldr r1, =0x1
+       str r1, [r0]
+#endif
 .endm
 
 .macro imx7_qos_setting
index 5145546..82a4bd8 100644 (file)
@@ -15,6 +15,7 @@
 #include <asm/gpio.h>
 #include <usb.h>
 #include <dm.h>
+#include <env.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -145,6 +146,11 @@ int board_mmc_get_env_dev(int devno)
 
 int board_late_init(void)
 {
+       env_set("tee", "no");
+#ifdef CONFIG_IMX_OPTEE
+       env_set("tee", "yes");
+#endif
+
 #ifdef CONFIG_ENV_IS_IN_MMC
        board_late_mmc_env_init();
 #endif
diff --git a/configs/mx7dsabresd_optee_defconfig b/configs/mx7dsabresd_optee_defconfig
new file mode 100644 (file)
index 0000000..b3b9e7f
--- /dev/null
@@ -0,0 +1,97 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX7=y
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_SYS_MEMTEST_START=0x80000000
+CONFIG_SYS_MEMTEST_END=0xa0000000
+CONFIG_ENV_SIZE=0x2000
+CONFIG_ENV_OFFSET=0xE0000
+CONFIG_DM_GPIO=y
+CONFIG_TARGET_MX7DSABRESD=y
+CONFIG_ARMV7_BOOT_SEC_DEFAULT=y
+# CONFIG_ARMV7_VIRT is not set
+CONFIG_IMX_RDC=y
+CONFIG_IMX_BOOTAUX=y
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx7dsabresd/imximage.cfg"
+CONFIG_IMX_OPTEE=y
+CONFIG_BOOTDELAY=3
+# CONFIG_CONSOLE_MUX is not set
+CONFIG_SYS_CONSOLE_IS_IN_ENV=y
+CONFIG_BOUNCE_BUFFER=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+# CONFIG_BOOTM_NETBSD is not set
+# CONFIG_BOOTM_PLAN9 is not set
+# CONFIG_BOOTM_RTEMS is not set
+# CONFIG_CMD_IMLS is not set
+# CONFIG_CMD_XIMG is not set
+# CONFIG_CMD_EXPORTENV is not set
+# CONFIG_CMD_IMPORTENV is not set
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_DFU=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+CONFIG_CMD_USB_MASS_STORAGE=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_BMP=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_PMIC=y
+CONFIG_CMD_REGULATOR=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_EXT4=y
+CONFIG_CMD_EXT4_WRITE=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_DEFAULT_DEVICE_TREE="imx7d-sdb"
+CONFIG_ENV_OVERWRITE=y
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_DFU_MMC=y
+CONFIG_DFU_RAM=y
+CONFIG_DM_74X164=y
+CONFIG_DM_I2C=y
+CONFIG_DM_MMC=y
+CONFIG_SUPPORT_EMMC_BOOT=y
+CONFIG_MMC_IO_VOLTAGE=y
+CONFIG_MMC_UHS_SUPPORT=y
+CONFIG_MMC_HS200_SUPPORT=y
+CONFIG_FSL_USDHC=y
+CONFIG_PHYLIB=y
+CONFIG_PHY_BROADCOM=y
+CONFIG_DM_ETH=y
+CONFIG_DM_ETH_PHY=y
+CONFIG_FEC_MXC=y
+CONFIG_RGMII=y
+CONFIG_MII=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_IMX7=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_MXC_UART=y
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_SOFT_SPI=y
+CONFIG_IMX_THERMAL=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_MXC_USB_OTG_HACTIVE=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_MANUFACTURER="FSL"
+CONFIG_USB_GADGET_VENDOR_NUM=0x0525
+CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
+CONFIG_CI_UDC=y
+CONFIG_USB_GADGET_DOWNLOAD=y
+CONFIG_USB_HOST_ETHER=y
+CONFIG_USB_ETHER_ASIX=y
+CONFIG_SPLASH_SCREEN=y
+CONFIG_SPLASH_SCREEN_ALIGN=y
+CONFIG_ERRNO_STR=y
diff --git a/configs/mx7ulp_evk_optee_defconfig b/configs/mx7ulp_evk_optee_defconfig
new file mode 100644 (file)
index 0000000..af2d277
--- /dev/null
@@ -0,0 +1,71 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX7ULP=y
+CONFIG_SYS_TEXT_BASE=0x67800000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_SYS_MEMTEST_START=0x60000000
+CONFIG_SYS_MEMTEST_END=0x80000000
+CONFIG_ENV_SIZE=0x2000
+CONFIG_ENV_OFFSET=0xE0000
+CONFIG_DM_GPIO=y
+CONFIG_TARGET_MX7ULP_EVK=y
+CONFIG_DEFAULT_DEVICE_TREE="imx7ulp-evk-qspi"
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_DEFAULT_FDT_FILE="imx7ulp-evk"
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx7ulp_evk/imximage.cfg"
+CONFIG_IMX_OPTEE=y
+CONFIG_BOARD_LATE_INIT=y
+CONFIG_BOARD_EARLY_INIT_F=y
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_FUSE=y
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_DHCP=y
+CONFIG_OF_CONTROL=y
+CONFIG_ENV_OVERWRITE=y
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_DM=y
+CONFIG_BOUNCE_BUFFER=y
+CONFIG_IMX_RGPIO2P=y
+# CONFIG_MXC_GPIO is not set
+CONFIG_DM_I2C=y
+CONFIG_SYS_I2C_IMX_LPI2C=y
+CONFIG_DM_MMC=y
+CONFIG_SUPPORT_EMMC_BOOT=y
+CONFIG_FSL_USDHC=y
+CONFIG_MTD=y
+CONFIG_PINCTRL=y
+CONFIG_PINCTRL_IMX7ULP=y
+CONFIG_DM_REGULATOR=y
+CONFIG_DM_REGULATOR_FIXED=y
+CONFIG_DM_REGULATOR_GPIO=y
+CONFIG_DM_SERIAL=y
+CONFIG_FSL_LPUART=y
+CONFIG_CMD_SF=y
+CONFIG_FSL_QSPI=y
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_DM_SPI_FLASH=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_MACRONIX=y
+CONFIG_SF_DEFAULT_BUS=0
+CONFIG_SF_DEFAULT_CS=0
+CONFIG_SF_DEFAULT_SPEED=40000000
+CONFIG_SF_DEFAULT_MODE=0
+CONFIG_ULP_WATCHDOG=y
+CONFIG_CMD_USB=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_MXC_USB_OTG_HACTIVE=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_HOST_ETHER=y
+CONFIG_USB_ETHER_ASIX=y
+CONFIG_USB_ETHER_RTL8152=y
+CONFIG_DM_ETH=y
index e763ed6..7c62acf 100644 (file)
@@ -58,7 +58,7 @@
 #endif
 
 #ifdef CONFIG_NAND_BOOT
-#define MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),1m(misc),-(rootfs) "
+#define MFG_NAND_PARTITION "mtdparts=gpmi-nand:64m(boot),16m(kernel),16m(dtb),16m(tee),-(rootfs) "
 #else
 #define MFG_NAND_PARTITION ""
 #endif
                "\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}; " \
+               "fi;\0"
 
 #define CONFIG_DFU_ENV_SETTINGS \
        "dfu_alt_info=image raw 0 0x800000;"\
 #if defined(CONFIG_NAND_BOOT)
 #define CONFIG_EXTRA_ENV_SETTINGS \
        CONFIG_MFG_ENV_SETTINGS \
+       TEE_ENV \
        "panel=TFT43AB\0" \
        "fdt_addr=0x83000000\0" \
+       "tee_addr=0x84000000\0" \
        "fdt_high=0xffffffff\0"   \
        "console=ttymxc0\0" \
        "bootargs=console=ttymxc0,115200 ubi.mtd=4 "  \
                "\0" \
        "bootcmd=nand read ${loadaddr} 0x4000000 0xc00000;"\
                "nand read ${fdt_addr} 0x5000000 0x100000;"\
-               "bootz ${loadaddr} - ${fdt_addr}\0"
+               "if test ${tee} = yes; then " \
+                       "nand read ${tee_addr} 0x6000000 0x400000;"\
+                       "bootm ${tee_addr} - ${fdt_addr};" \
+               "else " \
+                       "bootz ${loadaddr} - ${fdt_addr};" \
+               "fi\0"
 
 #else
 #define CONFIG_EXTRA_ENV_SETTINGS \
        UPDATE_M4_ENV \
        CONFIG_MFG_ENV_SETTINGS \
+       TEE_ENV \
        CONFIG_DFU_ENV_SETTINGS \
        "script=boot.scr\0" \
        "image=zImage\0" \
        "initrd_high=0xffffffff\0" \
        "fdt_file=undefined\0" \
        "fdt_addr=0x83000000\0" \
+       "tee_addr=0x84000000\0" \
+       "tee_file=uTee-7dsdb\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} " \
                "root=/dev/nfs " \
                        "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 " \
index 5bc1af8..956a4c8 100644 (file)
 
 #define CONFIG_LOADADDR             0x60800000
 
+#define CONFIG_MFG_ENV_SETTINGS \
+       "mfgtool_args=setenv bootargs console=${console},${baudrate} " \
+               "rdinit=/linuxrc " \
+               "g_mass_storage.stall=0 g_mass_storage.removable=1 " \
+               "g_mass_storage.file=/fat g_mass_storage.ro=1 " \
+               "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\
+               "g_mass_storage.iSerialNumber=\"\" "\
+               "\0" \
+               "initrd_addr=0x63800000\0" \
+               "initrd_high=0xffffffff\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}; " \
+                       "fi;\0"
+
 #define CONFIG_EXTRA_ENV_SETTINGS \
+       CONFIG_MFG_ENV_SETTINGS \
+       TEE_ENV \
        "script=boot.scr\0" \
        "image=zImage\0" \
        "console=ttyLP0\0" \
@@ -57,6 +76,8 @@
        "initrd_high=0xffffffff\0" \
        "fdt_file=" CONFIG_DEFAULT_FDT_FILE ".dtb\0" \
        "fdt_addr=0x63000000\0" \
+       "tee_addr=0x64000000\0" \
+       "tee_file=uTee-7ulp\0" \
        "boot_fdt=try\0" \
        "earlycon=lpuart32,0x402D0000\0" \
        "ip_dyn=yes\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} " \
                "root=/dev/nfs " \
                "fi; " \
                "usb start; "\
                "${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" \
 
 #define CONFIG_BOOTCOMMAND \