Hi Jan

On Sun Aug 23, 2026 at 10:47 PM EEST, Jan Kiszka wrote:
> 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);

Any reason we aren't exiting immediately here?

> +     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
>  /**

Cheers
/Ilias

Reply via email to