summaryrefslogtreecommitdiff
path: root/drivers/tee
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2023-03-07 10:34:24 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2023-03-10 11:20:12 +0100
commit964a52bc45eb95937a8123fe82f022061c066f99 (patch)
tree90e8156325f70dc1a36d2fc1158a78d8410d1d5e /drivers/tee
parenta60135d20d268a467bef8a2c15e52560a7825a9e (diff)
downloadbarebox-964a52bc45eb95937a8123fe82f022061c066f99.tar.gz
drivers: implement of_optee_fixup helper function
This function can be called by board-code after checking whether OP-TEE was installed or not. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> Link: https://lore.barebox.org/20230307093426.1551193-2-a.fatoum@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/tee')
-rw-r--r--drivers/tee/optee/of.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/drivers/tee/optee/of.c b/drivers/tee/optee/of.c
new file mode 100644
index 0000000000..8295a1751c
--- /dev/null
+++ b/drivers/tee/optee/of.c
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <of.h>
+#include <linux/ioport.h>
+#include <asm/barebox-arm.h>
+#include <asm/optee.h>
+
+int of_optee_fixup(struct device_node *root, void *_data)
+{
+ struct of_optee_fixup_data *fixup_data = _data;
+ struct resource res = {};
+ struct device_node *node;
+ int ret;
+
+ node = of_create_node(root, "/firmware/optee");
+ if (!node)
+ return -ENOMEM;
+
+ ret = of_property_write_string(node, "compatible", "linaro,optee-tz");
+ if (ret)
+ return ret;
+
+ ret = of_property_write_string(node, "method", fixup_data->method);
+ if (ret)
+ return ret;
+
+ res.start = arm_mem_endmem_get() - OPTEE_SIZE;
+ res.end = arm_mem_endmem_get() - fixup_data->shm_size -1;
+ res.flags = IORESOURCE_BUSY;
+ res.name = "optee_core";
+
+ ret = of_fixup_reserved_memory(root, &res);
+ if (ret)
+ return ret;
+
+ res.start = arm_mem_endmem_get() - fixup_data->shm_size;
+ res.end = arm_mem_endmem_get() - 1;
+ res.flags &= ~IORESOURCE_BUSY;
+ res.name = "optee_shm";
+
+ return of_fixup_reserved_memory(root, &res);
+}