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

Reply via email to