[PATCH v2 1/5] tee: optee: Factor out service enumeration and binding functions
Jan Kiszka <[email protected]>
| Newsgroups | org.u-boot-project.lists.u-boot |
|---|---|
| Message-ID | <70c9bcf676e253ed8c86699237c74e41c86eb34a.1787514446.git.jan.kiszka@siemens.com> |
From: Jan Kiszka <[email protected]> This already avoids code duplication between the different enumeration commands. It will furthermore allow to implement a third one for services with RPMB needs. Signed-off-by: Jan Kiszka <[email protected]> --- drivers/tee/optee/core.c | 33 +++++++++++++++++-------------- drivers/tee/optee/optee_private.h | 3 +++ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index 4d67c948ec1..2871760a7b7 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -156,7 +156,7 @@ static int enum_services(struct udevice *dev, struct tee_shm **shm, size_t *coun return ret; } -static int open_enum_session(struct udevice *dev, u32 *tee_sess) +int optee_open_enum_session(struct udevice *dev, u32 *tee_sess) { const struct tee_optee_ta_uuid pta_uuid = PTA_DEVICE_ENUM; struct tee_open_session_arg arg = { }; @@ -176,31 +176,34 @@ static int open_enum_session(struct udevice *dev, u32 *tee_sess) return 0; } -static int bind_service_drivers(struct udevice *dev) +int optee_bind_services(struct udevice *dev, u32 tee_sess, + unsigned int pta_cmd) { struct tee_shm *service_list = NULL; size_t service_count; - u32 tee_sess; - int ret, ret2; - - ret = open_enum_session(dev, &tee_sess); - if (ret) - return ret; + int ret; ret = enum_services(dev, &service_list, &service_count, tee_sess, - PTA_CMD_GET_DEVICES); + pta_cmd); if (!ret && service_count) ret = bind_service_list(dev, service_list, service_count); tee_shm_free(service_list); - service_list = NULL; - ret2 = enum_services(dev, &service_list, &service_count, tee_sess, - PTA_CMD_GET_DEVICES_SUPP); - if (!ret2 && service_count) - ret2 = bind_service_list(dev, service_list, service_count); + return ret; +} + +static int bind_service_drivers(struct udevice *dev) +{ + u32 tee_sess; + int ret, ret2; - tee_shm_free(service_list); + ret = optee_open_enum_session(dev, &tee_sess); + if (ret) + return ret; + + ret = optee_bind_services(dev, tee_sess, PTA_CMD_GET_DEVICES); + ret2 = optee_bind_services(dev, tee_sess, PTA_CMD_GET_DEVICES_SUPP); tee_close_session(dev, tee_sess); diff --git a/drivers/tee/optee/optee_private.h b/drivers/tee/optee/optee_private.h index 1f07a27ee4b..25b6b3c3218 100644 --- a/drivers/tee/optee/optee_private.h +++ b/drivers/tee/optee/optee_private.h @@ -27,6 +27,9 @@ struct optee_msg_arg; void optee_suppl_cmd(struct udevice *dev, struct tee_shm *shm_arg, void **page_list); +int optee_open_enum_session(struct udevice *dev, u32 *tee_sess); +int optee_bind_services(struct udevice *dev, u32 tee_sess, + unsigned int pta_cmd); #ifdef CONFIG_SUPPORT_EMMC_RPMB /** -- 2.47.3