diff options
Diffstat (limited to 'meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0013-optee-add-a-FF-A-memory-pool.patch')
-rw-r--r-- | meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0013-optee-add-a-FF-A-memory-pool.patch | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0013-optee-add-a-FF-A-memory-pool.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0013-optee-add-a-FF-A-memory-pool.patch deleted file mode 100644 index 6be15814a0..0000000000 --- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm64-ack-5.10/tc/0013-optee-add-a-FF-A-memory-pool.patch +++ /dev/null @@ -1,131 +0,0 @@ -From eafffa586795e3cb485310fbd287322c9c7dc3bb Mon Sep 17 00:00:00 2001 -From: Jens Wiklander <jens.wiklander@linaro.org> -Date: Thu, 25 Mar 2021 15:08:52 +0100 -Subject: [PATCH 18/22] optee: add a FF-A memory pool - -Adds a memory pool to be used when the driver uses FF-A [1] as transport -layer. - -[1] https://developer.arm.com/documentation/den0077/latest -Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> - -Upstream-Status: Pending [Not submitted to upstream yet] ---- - drivers/tee/optee/shm_pool.c | 65 +++++++++++++++++++++++++++++++++--- - drivers/tee/optee/shm_pool.h | 1 + - 2 files changed, 61 insertions(+), 5 deletions(-) - -diff --git a/drivers/tee/optee/shm_pool.c b/drivers/tee/optee/shm_pool.c -index d767eebf30bd..d2116cb39c8b 100644 ---- a/drivers/tee/optee/shm_pool.c -+++ b/drivers/tee/optee/shm_pool.c -@@ -12,8 +12,14 @@ - #include "optee_smc.h" - #include "shm_pool.h" - --static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, -- struct tee_shm *shm, size_t size) -+static int -+pool_op_alloc_helper(struct tee_shm_pool_mgr *poolm, -+ struct tee_shm *shm, size_t size, -+ int (*shm_register)(struct tee_context *ctx, -+ struct tee_shm *shm, -+ struct page **pages, -+ size_t num_pages, -+ unsigned long start)) - { - unsigned int order = get_order(size); - struct page *page; -@@ -27,7 +33,7 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, - shm->paddr = page_to_phys(page); - shm->size = PAGE_SIZE << order; - -- if (shm->flags & TEE_SHM_DMA_BUF) { -+ if (shm_register) { - unsigned int nr_pages = 1 << order, i; - struct page **pages; - -@@ -41,14 +47,23 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, - } - - shm->flags |= TEE_SHM_REGISTER; -- rc = optee_shm_register(shm->ctx, shm, pages, nr_pages, -- (unsigned long)shm->kaddr); -+ rc = shm_register(shm->ctx, shm, pages, nr_pages, -+ (unsigned long)shm->kaddr); - kfree(pages); - } - - return rc; - } - -+static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, -+ struct tee_shm *shm, size_t size) -+{ -+ if (!(shm->flags & TEE_SHM_DMA_BUF)) -+ return pool_op_alloc_helper(poolm, shm, size, NULL); -+ -+ return pool_op_alloc_helper(poolm, shm, size, optee_shm_register); -+} -+ - static void pool_op_free(struct tee_shm_pool_mgr *poolm, - struct tee_shm *shm) - { -@@ -87,3 +102,43 @@ struct tee_shm_pool_mgr *optee_shm_pool_alloc_pages(void) - - return mgr; - } -+ -+#ifdef CONFIG_ARM_FFA_TRANSPORT -+static int pool_ffa_op_alloc(struct tee_shm_pool_mgr *poolm, -+ struct tee_shm *shm, size_t size) -+{ -+ return pool_op_alloc_helper(poolm, shm, size, optee_ffa_shm_register); -+} -+ -+static void pool_ffa_op_free(struct tee_shm_pool_mgr *poolm, -+ struct tee_shm *shm) -+{ -+ optee_ffa_shm_unregister(shm->ctx, shm); -+ free_pages((unsigned long)shm->kaddr, get_order(shm->size)); -+ shm->kaddr = NULL; -+} -+ -+static const struct tee_shm_pool_mgr_ops pool_ffa_ops = { -+ .alloc = pool_ffa_op_alloc, -+ .free = pool_ffa_op_free, -+ .destroy_poolmgr = pool_op_destroy_poolmgr, -+}; -+ -+/** -+ * optee_ffa_shm_pool_alloc_pages() - create page-based allocator pool -+ * -+ * This pool is used with OP-TEE over FF-A. In this case command buffers -+ * and such are allocated from kernel's own memory. -+ */ -+struct tee_shm_pool_mgr *optee_ffa_shm_pool_alloc_pages(void) -+{ -+ struct tee_shm_pool_mgr *mgr = kzalloc(sizeof(*mgr), GFP_KERNEL); -+ -+ if (!mgr) -+ return ERR_PTR(-ENOMEM); -+ -+ mgr->ops = &pool_ffa_ops; -+ -+ return mgr; -+} -+#endif /*CONFIG_ARM_FFA_TRANSPORT*/ -diff --git a/drivers/tee/optee/shm_pool.h b/drivers/tee/optee/shm_pool.h -index 28109d991c4b..34c5fd74a3ff 100644 ---- a/drivers/tee/optee/shm_pool.h -+++ b/drivers/tee/optee/shm_pool.h -@@ -10,5 +10,6 @@ - #include <linux/tee_drv.h> - - struct tee_shm_pool_mgr *optee_shm_pool_alloc_pages(void); -+struct tee_shm_pool_mgr *optee_ffa_shm_pool_alloc_pages(void); - - #endif --- -2.17.1 - |