diff options
Diffstat (limited to 'meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.15/tc/0032-ANDROID-trusty-Add-transport-descriptor.patch')
-rw-r--r-- | meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.15/tc/0032-ANDROID-trusty-Add-transport-descriptor.patch | 210 |
1 files changed, 0 insertions, 210 deletions
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.15/tc/0032-ANDROID-trusty-Add-transport-descriptor.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.15/tc/0032-ANDROID-trusty-Add-transport-descriptor.patch deleted file mode 100644 index 340e12dc64..0000000000 --- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.15/tc/0032-ANDROID-trusty-Add-transport-descriptor.patch +++ /dev/null @@ -1,210 +0,0 @@ -From e7fe12a5a7e3eac7a7d549ef9a7d88e9baba1832 Mon Sep 17 00:00:00 2001 -From: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> -Date: Fri, 14 Jan 2022 17:52:33 +0000 -Subject: [PATCH 32/40] ANDROID: trusty: Add transport descriptor - -Use transport descriptor to hold transport specific operations. This -helps to add new transport to Trusty core. - -Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> -Change-Id: Ibbde50de0302f6d259a7d572f0910067ce712b37 -Upstream-Status: Pending [Not submitted to upstream yet] -Signed-off-by: Rupinderjit Singh <rupinderjit.singh@arm.com ---- - drivers/trusty/trusty-private.h | 20 +++++++++- - drivers/trusty/trusty-smc.c | 6 +++ - drivers/trusty/trusty.c | 71 ++++++++++++++++++++++++++++++--- - 3 files changed, 90 insertions(+), 7 deletions(-) - -diff --git a/drivers/trusty/trusty-private.h b/drivers/trusty/trusty-private.h -index 4d73c6ae35d4..74b88bb8f83b 100644 ---- a/drivers/trusty/trusty-private.h -+++ b/drivers/trusty/trusty-private.h -@@ -14,12 +14,14 @@ struct trusty_work { - }; - - struct trusty_msg_ops { -+ const struct trusty_transport_desc *desc; - u32 (*send_direct_msg)(struct device *dev, unsigned long fid, - unsigned long a0, unsigned long a1, - unsigned long a2); - }; - - struct trusty_mem_ops { -+ const struct trusty_transport_desc *desc; - int (*trusty_share_memory)(struct device *dev, u64 *id, - struct scatterlist *sglist, - unsigned int nents, pgprot_t pgprot, u64 tag); -@@ -46,6 +48,19 @@ struct trusty_state { - struct device_dma_parameters dma_parms; - const struct trusty_msg_ops *msg_ops; - const struct trusty_mem_ops *mem_ops; -+ struct trusty_ffa_state *ffa; -+}; -+ -+struct trusty_ffa_state { -+ struct device *dev; /* ffa device */ -+ const struct ffa_dev_ops *ops; -+ struct mutex share_memory_msg_lock; /* protects share_memory_msg */ -+}; -+ -+struct trusty_transport_desc { -+ const char *name; -+ int (*setup)(struct device *dev); -+ void (*cleanup)(struct device *dev); - }; - - int trusty_init_api_version(struct trusty_state *s, struct device *dev, -@@ -55,7 +70,8 @@ int trusty_init_api_version(struct trusty_state *s, struct device *dev, - unsigned long a1, - unsigned long a2)); - --int trusty_smc_transport_setup(struct device *dev); --void trusty_smc_transport_cleanup(struct device *dev); -+typedef const struct trusty_transport_desc *trusty_transports_t; -+ -+extern const struct trusty_transport_desc trusty_smc_transport; - - #endif /* _TRUSTY_PRIVATE_H */ -diff --git a/drivers/trusty/trusty-smc.c b/drivers/trusty/trusty-smc.c -index 8fa841e0e253..62d1d7060744 100644 ---- a/drivers/trusty/trusty-smc.c -+++ b/drivers/trusty/trusty-smc.c -@@ -134,3 +134,9 @@ void trusty_smc_transport_cleanup(struct device *dev) - if (s->mem_ops == &trusty_smc_mem_ops) - s->mem_ops = NULL; - } -+ -+const struct trusty_transport_desc trusty_smc_transport = { -+ .name = "smc", -+ .setup = trusty_smc_transport_setup, -+ .cleanup = trusty_smc_transport_cleanup, -+}; -diff --git a/drivers/trusty/trusty.c b/drivers/trusty/trusty.c -index 757dd7b2c527..ec0fccfaa24c 100644 ---- a/drivers/trusty/trusty.c -+++ b/drivers/trusty/trusty.c -@@ -493,6 +493,46 @@ void trusty_dequeue_nop(struct device *dev, struct trusty_nop *nop) - } - EXPORT_SYMBOL(trusty_dequeue_nop); - -+static int -+trusty_transports_setup(const trusty_transports_t *transports, -+ struct device *dev) -+{ -+ const struct trusty_transport_desc *transport; -+ int ret; -+ int transports_ret = -ENODEV; -+ -+ if (!transports) -+ return -EINVAL; -+ -+ for (; (transport = *transports); transports++) { -+ if (!transport->setup) -+ return -EINVAL; -+ -+ ret = transport->setup(dev); -+ transports_ret &= ret; -+ } -+ -+ /* One transport needs to complete setup without error. */ -+ if (transports_ret < 0) -+ return -ENODEV; -+ -+ return 0; -+} -+ -+static void -+trusty_transports_cleanup(const trusty_transports_t *transports, -+ struct device *dev) -+{ -+ const struct trusty_transport_desc *transport; -+ -+ for (; (transport = *transports); transports++) { -+ if (!transport->cleanup) -+ continue; -+ -+ transport->cleanup(dev); -+ } -+} -+ - static int trusty_probe(struct platform_device *pdev) - { - int ret; -@@ -500,6 +540,7 @@ static int trusty_probe(struct platform_device *pdev) - work_func_t work_func; - struct trusty_state *s; - struct device_node *node = pdev->dev.of_node; -+ const trusty_transports_t *descs; - - if (!node) { - dev_err(&pdev->dev, "of_node required\n"); -@@ -529,8 +570,12 @@ static int trusty_probe(struct platform_device *pdev) - - platform_set_drvdata(pdev, s); - -- /* Initialize SMC transport */ -- ret = trusty_smc_transport_setup(s->dev); -+ /* -+ * Initialize Trusty transport. Trusty msg and mem ops has to be -+ * initialized as part of transport setup. -+ */ -+ descs = of_device_get_match_data(&pdev->dev); -+ ret = trusty_transports_setup(descs, s->dev); - if (ret != 0 || s->msg_ops == NULL || s->mem_ops == NULL) - goto err_transport_setup; - -@@ -581,7 +626,7 @@ static int trusty_probe(struct platform_device *pdev) - destroy_workqueue(s->nop_wq); - err_create_nop_wq: - kfree(s->version_str); -- trusty_smc_transport_cleanup(s->dev); -+ trusty_transports_cleanup(descs, s->dev); - err_transport_setup: - s->dev->dma_parms = NULL; - device_for_each_child(&pdev->dev, NULL, trusty_remove_child); -@@ -595,6 +640,7 @@ static int trusty_remove(struct platform_device *pdev) - { - unsigned int cpu; - struct trusty_state *s = platform_get_drvdata(pdev); -+ const trusty_transports_t *descs; - - device_for_each_child(&pdev->dev, NULL, trusty_remove_child); - -@@ -606,7 +652,10 @@ static int trusty_remove(struct platform_device *pdev) - free_percpu(s->nop_works); - destroy_workqueue(s->nop_wq); - -- trusty_smc_transport_cleanup(s->dev); -+ /* call transport cleanup */ -+ descs = of_device_get_match_data(&pdev->dev); -+ trusty_transports_cleanup(descs, s->dev); -+ - mutex_destroy(&s->smc_lock); - s->dev->dma_parms = NULL; - kfree(s->version_str); -@@ -614,8 +663,20 @@ static int trusty_remove(struct platform_device *pdev) - return 0; - } - -+/* -+ * Trusty probe will try all compiled in transports and will use the transport -+ * supported by the Trusty kernel. -+ * -+ * For Trusty API version < TRUSTY_API_VERSION_MEM_OBJ: -+ * trusty_smc_transport used for messaging. -+ */ -+static const trusty_transports_t trusty_transports[] = { -+ &trusty_smc_transport, -+ NULL, -+}; -+ - static const struct of_device_id trusty_of_match[] = { -- { .compatible = "android,trusty-v1", }, -+ { .compatible = "android,trusty-v1", .data = trusty_transports }, - {}, - }; - --- -2.34.1 - |