diff options
Diffstat (limited to 'meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0037-ANDROID-trusty-Rename-transfer-memory-function-to-le.patch')
-rw-r--r-- | meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0037-ANDROID-trusty-Rename-transfer-memory-function-to-le.patch | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0037-ANDROID-trusty-Rename-transfer-memory-function-to-le.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0037-ANDROID-trusty-Rename-transfer-memory-function-to-le.patch new file mode 100644 index 0000000000..a7bc06004e --- /dev/null +++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0037-ANDROID-trusty-Rename-transfer-memory-function-to-le.patch @@ -0,0 +1,191 @@ +From 804ef860d9757cbe31b606fd5ec68cc5454c88f8 Mon Sep 17 00:00:00 2001 +From: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> +Date: Tue, 18 Jan 2022 18:27:09 +0000 +Subject: [PATCH 24/32] ANDROID: trusty: Rename transfer memory function to + lend memory + +Renaming trusty_transfer_memory to trusty_lend_memory allows Trusty +to export memory operation like share, lend, reclaim and use common +code for memory share and lend operations. + +Define TRUSTY_DEFAULT_MEM_OBJ_TAG as 0 and use that in existing calls. + +Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com> +Change-Id: Ie165a609cc4398bb916967595d0b748d54d75faf +Upstream-Status: Pending [Not submitted to upstream yet] +--- + drivers/trusty/trusty-ipc.c | 14 ++++++++---- + drivers/trusty/trusty-test.c | 3 ++- + drivers/trusty/trusty-virtio.c | 3 ++- + drivers/trusty/trusty.c | 41 ++++++++++++++++++++++------------ + include/linux/trusty/trusty.h | 11 ++++----- + 5 files changed, 47 insertions(+), 25 deletions(-) + +diff --git a/drivers/trusty/trusty-ipc.c b/drivers/trusty/trusty-ipc.c +index 82d6ddeb41f4..0a27af2063a7 100644 +--- a/drivers/trusty/trusty-ipc.c ++++ b/drivers/trusty/trusty-ipc.c +@@ -1233,10 +1233,16 @@ static int dn_share_fd(struct tipc_dn_chan *dn, int fd, + goto cleanup_handle; + } + +- ret = trusty_transfer_memory(tipc_shared_handle_dev(shared_handle), +- &mem_id, shared_handle->sgt->sgl, +- shared_handle->sgt->orig_nents, prot, tag, +- lend); ++ if (lend) ++ ret = trusty_lend_memory(tipc_shared_handle_dev(shared_handle), ++ &mem_id, shared_handle->sgt->sgl, ++ shared_handle->sgt->orig_nents, prot, ++ tag); ++ else ++ ret = trusty_share_memory(tipc_shared_handle_dev(shared_handle), ++ &mem_id, shared_handle->sgt->sgl, ++ shared_handle->sgt->orig_nents, prot, ++ tag); + + if (ret < 0) { + dev_dbg(dev, "Transferring memory failed: %d\n", ret); +diff --git a/drivers/trusty/trusty-test.c b/drivers/trusty/trusty-test.c +index 844868981fa5..c25fc0f2fcf0 100644 +--- a/drivers/trusty/trusty-test.c ++++ b/drivers/trusty/trusty-test.c +@@ -138,7 +138,8 @@ static int trusty_test_share_objs(struct trusty_test_state *s, + t1 = ktime_get(); + tmpret = trusty_share_memory(s->trusty_dev, &obj->mem_id, + obj->sgt.sgl, obj->sgt.nents, +- PAGE_KERNEL); ++ PAGE_KERNEL, ++ TRUSTY_DEFAULT_MEM_OBJ_TAG); + t2 = ktime_get(); + if (tmpret) { + ret = tmpret; +diff --git a/drivers/trusty/trusty-virtio.c b/drivers/trusty/trusty-virtio.c +index fea59cd2e218..365e7c04bcf4 100644 +--- a/drivers/trusty/trusty-virtio.c ++++ b/drivers/trusty/trusty-virtio.c +@@ -626,7 +626,8 @@ static int trusty_virtio_add_devices(struct trusty_ctx *tctx) + + sg_init_one(&tctx->shared_sg, descr_va, descr_buf_sz); + ret = trusty_share_memory(tctx->dev->parent, &descr_id, +- &tctx->shared_sg, 1, PAGE_KERNEL); ++ &tctx->shared_sg, 1, PAGE_KERNEL, ++ TRUSTY_DEFAULT_MEM_OBJ_TAG); + if (ret) { + dev_err(tctx->dev, "trusty_share_memory failed: %d\n", ret); + goto err_share_memory; +diff --git a/drivers/trusty/trusty.c b/drivers/trusty/trusty.c +index 2dec75398f69..6bd30bc1bbc9 100644 +--- a/drivers/trusty/trusty.c ++++ b/drivers/trusty/trusty.c +@@ -222,18 +222,9 @@ s32 trusty_std_call32(struct device *dev, u32 smcnr, u32 a0, u32 a1, u32 a2) + } + EXPORT_SYMBOL(trusty_std_call32); + +-int trusty_share_memory(struct device *dev, u64 *id, +- struct scatterlist *sglist, unsigned int nents, +- pgprot_t pgprot) +-{ +- return trusty_transfer_memory(dev, id, sglist, nents, pgprot, 0, +- false); +-} +-EXPORT_SYMBOL(trusty_share_memory); +- +-int trusty_transfer_memory(struct device *dev, u64 *id, +- struct scatterlist *sglist, unsigned int nents, +- pgprot_t pgprot, u64 tag, bool lend) ++static int __trusty_share_memory(struct device *dev, u64 *id, ++ struct scatterlist *sglist, unsigned int nents, ++ pgprot_t pgprot, u64 tag, bool mem_share) + { + struct trusty_state *s = platform_get_drvdata(to_platform_device(dev)); + int ret; +@@ -253,6 +244,12 @@ int trusty_transfer_memory(struct device *dev, u64 *id, + return -EOPNOTSUPP; + } + ++ if (mem_share == false && s->api_version < TRUSTY_API_VERSION_MEM_OBJ) { ++ dev_err(s->dev, "%s: old trusty version does not support lending memory objects\n", ++ __func__); ++ return -EOPNOTSUPP; ++ } ++ + count = dma_map_sg(dev, sglist, nents, DMA_BIDIRECTIONAL); + if (count != nents) { + dev_err(s->dev, "failed to dma map sg_table\n"); +@@ -271,7 +268,22 @@ int trusty_transfer_memory(struct device *dev, u64 *id, + *id = pg_inf.compat_attr; + return 0; + } +-EXPORT_SYMBOL(trusty_transfer_memory); ++ ++int trusty_share_memory(struct device *dev, u64 *id, ++ struct scatterlist *sglist, unsigned int nents, ++ pgprot_t pgprot, u64 tag) ++{ ++ return __trusty_share_memory(dev, id, sglist, nents, pgprot, tag, true); ++} ++EXPORT_SYMBOL(trusty_share_memory); ++ ++int trusty_lend_memory(struct device *dev, u64 *id, ++ struct scatterlist *sglist, unsigned int nents, ++ pgprot_t pgprot, u64 tag) ++{ ++ return __trusty_share_memory(dev, id, sglist, nents, pgprot, tag, false); ++} ++EXPORT_SYMBOL(trusty_lend_memory); + + /* + * trusty_share_memory_compat - trusty_share_memory wrapper for old apis +@@ -287,7 +299,8 @@ int trusty_share_memory_compat(struct device *dev, u64 *id, + int ret; + struct trusty_state *s = platform_get_drvdata(to_platform_device(dev)); + +- ret = trusty_share_memory(dev, id, sglist, nents, pgprot); ++ ret = trusty_share_memory(dev, id, sglist, nents, pgprot, ++ TRUSTY_DEFAULT_MEM_OBJ_TAG); + if (!ret && s->api_version < TRUSTY_API_VERSION_PHYS_MEM_OBJ) + *id &= 0x0000FFFFFFFFF000ull; + +diff --git a/include/linux/trusty/trusty.h b/include/linux/trusty/trusty.h +index 272d96c1c696..27f635f2d12d 100644 +--- a/include/linux/trusty/trusty.h ++++ b/include/linux/trusty/trusty.h +@@ -11,6 +11,7 @@ + #include <linux/device.h> + #include <linux/pagemap.h> + ++#define TRUSTY_DEFAULT_MEM_OBJ_TAG (0) + + #if IS_ENABLED(CONFIG_TRUSTY) + s32 trusty_std_call32(struct device *dev, u32 smcnr, u32 a0, u32 a1, u32 a2); +@@ -62,13 +63,13 @@ struct scatterlist; + typedef u64 trusty_shared_mem_id_t; + int trusty_share_memory(struct device *dev, trusty_shared_mem_id_t *id, + struct scatterlist *sglist, unsigned int nents, +- pgprot_t pgprot); ++ pgprot_t pgprot, u64 tag); + int trusty_share_memory_compat(struct device *dev, trusty_shared_mem_id_t *id, + struct scatterlist *sglist, unsigned int nents, + pgprot_t pgprot); +-int trusty_transfer_memory(struct device *dev, u64 *id, +- struct scatterlist *sglist, unsigned int nents, +- pgprot_t pgprot, u64 tag, bool lend); ++int trusty_lend_memory(struct device *dev, u64 *id, ++ struct scatterlist *sglist, unsigned int nents, ++ pgprot_t pgprot, u64 tag); + int trusty_reclaim_memory(struct device *dev, trusty_shared_mem_id_t id, + struct scatterlist *sglist, unsigned int nents); + +@@ -78,7 +79,7 @@ u64 trusty_dma_buf_get_ffa_tag(struct dma_buf *dma_buf); + #else + static inline u64 trusty_dma_buf_get_ffa_tag(struct dma_buf *dma_buf) + { +- return 0; ++ return TRUSTY_DEFAULT_MEM_OBJ_TAG; + } + #endif + +-- +2.30.2 + |