summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx/imx8
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2019-08-26 08:12:13 +0000
committerStefano Babic <sbabic@denx.de>2019-10-08 16:35:59 +0200
commit94e4d028b29fb4c012b4ae1942b4d58d7937b63a (patch)
tree6c4fb7d99c640de1790176c3be57841b9dac014b /arch/arm/mach-imx/imx8
parentfefe051335aa99147420fee607f7596e6e9c9044 (diff)
downloadu-boot-94e4d028b29fb4c012b4ae1942b4d58d7937b63a.tar.gz
u-boot-94e4d028b29fb4c012b4ae1942b4d58d7937b63a.tar.xz
u-boot-94e4d028b29fb4c012b4ae1942b4d58d7937b63a.zip
imx8: fdt: add optee node
Add OP-TEE device tree node for Linux according to args passed from ATF. If ATF has been built with OP-TEE running, boot_pointer[1] will indicate that. Signed-off-by: Peng Fan <peng.fan@nxp.com>
Diffstat (limited to 'arch/arm/mach-imx/imx8')
-rw-r--r--arch/arm/mach-imx/imx8/fdt.c52
1 files changed, 51 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/imx8/fdt.c b/arch/arm/mach-imx/imx8/fdt.c
index b2e7cf09cf..65c8ac1a7e 100644
--- a/arch/arm/mach-imx/imx8/fdt.c
+++ b/arch/arm/mach-imx/imx8/fdt.c
@@ -226,6 +226,56 @@ static int config_smmu_fdt(void *blob)
return 0;
}
+static int ft_add_optee_node(void *fdt, bd_t *bd)
+{
+ const char *path, *subpath;
+ int offs;
+
+ /*
+ * No TEE space allocated indicating no TEE running, so no
+ * need to add optee node in dts
+ */
+ if (!boot_pointer[1])
+ return 0;
+
+ offs = fdt_increase_size(fdt, 512);
+ if (offs) {
+ printf("No Space for dtb\n");
+ return 1;
+ }
+
+ path = "/firmware";
+ offs = fdt_path_offset(fdt, path);
+ if (offs < 0) {
+ path = "/";
+ offs = fdt_path_offset(fdt, path);
+
+ if (offs < 0) {
+ printf("Could not find root node.\n");
+ return offs;
+ }
+
+ subpath = "firmware";
+ offs = fdt_add_subnode(fdt, offs, subpath);
+ if (offs < 0) {
+ printf("Could not create %s node.\n", subpath);
+ return offs;
+ }
+ }
+
+ subpath = "optee";
+ offs = fdt_add_subnode(fdt, offs, subpath);
+ if (offs < 0) {
+ printf("Could not create %s node.\n", subpath);
+ return offs;
+ }
+
+ fdt_setprop_string(fdt, offs, "compatible", "linaro,optee-tz");
+ fdt_setprop_string(fdt, offs, "method", "smc");
+
+ return 0;
+}
+
int ft_system_setup(void *blob, bd_t *bd)
{
int ret;
@@ -238,5 +288,5 @@ int ft_system_setup(void *blob, bd_t *bd)
return ret;
}
- return 0;
+ return ft_add_optee_node(blob, bd);
}