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>
Fri, 24 May 2019 11:28:49 +0000 (04:28 -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)

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 c54bd97..3d7cb51 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 9e1f5d4..0131fb8 100644 (file)
@@ -635,6 +635,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 ca97cc9..bc827ec 100644 (file)
@@ -219,6 +219,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..dc1223a
--- /dev/null
@@ -0,0 +1,83 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX7=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_NR_DRAM_BANKS=1
+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_BOOTD is not set
+CONFIG_CMD_BOOTZ=y
+# 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_DFU_MMC=y
+CONFIG_DFU_RAM=y
+CONFIG_DM_GPIO=y
+CONFIG_DM_74X164=y
+CONFIG_DM_I2C=y
+CONFIG_DM_MMC=y
+CONFIG_MMC_IO_VOLTAGE=y
+CONFIG_MMC_UHS_SUPPORT=y
+CONFIG_MMC_HS200_SUPPORT=y
+CONFIG_FSL_ESDHC=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_EON=y
+CONFIG_PHYLIB=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_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_SOFT_SPI=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_VIDEO=y
+CONFIG_ERRNO_STR=y
+CONFIG_DM_ETH=y
diff --git a/configs/mx7ulp_evk_optee_defconfig b/configs/mx7ulp_evk_optee_defconfig
new file mode 100644 (file)
index 0000000..a872229
--- /dev/null
@@ -0,0 +1,61 @@
+CONFIG_ARM=y
+CONFIG_ARCH_MX7ULP=y
+CONFIG_SYS_TEXT_BASE=0x67800000
+CONFIG_TARGET_MX7ULP_EVK=y
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_DEFAULT_FDT_FILE="imx7ulp-evk"
+CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx7ulp_evk/imximage.cfg"
+CONFIG_BOUNCE_BUFFER=y
+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_GPIO=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_FAT=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_DHCP=y
+CONFIG_OF_CONTROL=y
+CONFIG_DEFAULT_DEVICE_TREE="imx7ulp-evk-qspi"
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_DM=y
+CONFIG_DM_GPIO=y
+CONFIG_IMX_RGPIO2P=y
+# CONFIG_MXC_GPIO is not set
+CONFIG_DM_I2C=y
+CONFIG_DM_MMC=y
+CONFIG_FSL_ESDHC=y
+CONFIG_SYS_I2C_IMX_LPI2C=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_VIDEO=y
+CONFIG_IMX_NORTHWEST_MIPI_DSI=y
index 3f2f888..89b6ccb 100644 (file)
@@ -81,7 +81,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" \
        "fdt_high=0xffffffff\0"   \
                "\0" \
        "bootcmd=nand read ${loadaddr} 0x4000000 0x800000;"\
                "nand read ${fdt_addr} 0x5000000 0x100000;"\
-               "bootz ${loadaddr} - ${fdt_addr}\0"
+               "if test ${tee} = yes; then " \
+                       "nand read ${tee_addr} 0x6000000 0x400000;"\
+                       "bootm ${teeaddr} - ${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"
+               "fi;\0" \
+               "findfdt="\
+                       "if test $fdt_file = undefined; then " \
+                               "setenv fdt_file imx7d-sdb.dtb; " \
+                       "fi;\0" \
 
 #define CONFIG_BOOTCOMMAND \
+          "run findfdt;" \
           "mmc dev ${mmcdev};" \
           "mmc dev ${mmcdev}; if mmc rescan; then " \
                   "if run loadbootscript; then " \
index a5225e9..88f8133 100644 (file)
 
 #define CONFIG_SYS_MEMTEST_END      (CONFIG_SYS_MEMTEST_START + (PHYS_SDRAM_SIZE >> 1))
 
+#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" \
        "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,0x402D0010\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 \