On 23.08.26 16:31, Kathpalia, Tanmay wrote:
> Hi Jan,
> 
> I am not an expert in TEE, but I went through this patch while reviewing
> the MMC side of the series and found a few issues.
> 
> On 21-08-2026 14:58, Jan Kiszka wrote:
>> From: Jan Kiszka<[email protected]>
>>
>> Up to OP-TEE 4.4.0, all services that needed a supplicant where returned
>> by PTA_CMD_GET_DEVICES_SUPP. Since then, services that only need a
>> supplicant for the purpose of accessing the RPMB are only enumerated by
>> the new, separate PTA_CMD_GET_DEVICES_RPMB. U-Boot so far lacks support
>> for that, thus no longer finds such services, e.g. fTPM.
>>
>> Perform the separate enumeration during probe but, as that may fail if
>> the MMC is not probed yet, also provide a callback to trigger a retry
>> when another MMC device becomes available.
>>
>> Signed-off-by: Jan Kiszka<[email protected]>
>> ---
>>   drivers/tee/optee/core.c          | 32 +++++++++++++++++++++++++++++++
>>   drivers/tee/optee/optee_private.h |  2 ++
>>   drivers/tee/optee/rpmb.c          | 11 +++++++++++
>>   include/tee/optee.h               |  2 ++
>>   4 files changed, 47 insertions(+)
>>
>> diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c
>> index 4d67c948ec1..5600d5a4c7d 100644
>> --- a/drivers/tee/optee/core.c
>> +++ b/drivers/tee/optee/core.c
>> @@ -41,6 +41,13 @@
>>    */
>>   #define PTA_CMD_GET_DEVICES_SUPP    0x1
>>   +/*
>> + * PTA_CMD_GET_DEVICES_RPMB - List services only depending on RPMB
>> support
>> + *
>> + * [out]    memref[0]: List of the UUIDs of service enumerated by OP-TEE
>> + */
>> +#define PTA_CMD_GET_DEVICES_RPMB    0x2
>> +
>>   typedef void (optee_invoke_fn)(unsigned long, unsigned long,
>> unsigned long,
>>                      unsigned long, unsigned long, unsigned long,
>>                      unsigned long, unsigned long,
>> @@ -210,6 +217,29 @@ static int bind_service_drivers(struct udevice *dev)
>>       return ret2;
>>   }
>>   +#ifdef CONFIG_SUPPORT_EMMC_RPMB
>> +void optee_bind_service_drivers_rpmb(struct udevice *dev)
> 
> This function is only compiled when SUPPORT_EMMC_RPMB is set, but
> optee_probe() calls it unconditionally after a successful
> bind_service_drivers(). optee_private.h stubs other functions for the
> !RPMB case, this new prototype has no such stub, so for
> SUPPORT_EMMC_RPMB=n should fail to link.
> 

Yeah, thanks for reminding - I forgot again that the linker won't
resolve that. Will also refactor this to move the rpmb part into the
rpmb module.

>> +{
>> +    struct tee_shm *service_list = NULL;
>> +    size_t service_count;
>> +    u32 tee_sess;
>> +    int ret;
>> +
>> +    ret = open_enum_session(dev, &tee_sess);
>> +    if (ret)
>> +        return;
>> +
>> +    ret = enum_services(dev, &service_list, &service_count, tee_sess,
>> +                PTA_CMD_GET_DEVICES_RPMB);
>> +    if (!ret && service_count)
>> +        ret = bind_service_list(dev, service_list, service_count);
> 
> A dev_dbg print would help here.
> 

Of what exactly?

Thanks for the feedback,
Jan

-- 
Siemens AG, Foundational Technologies
Linux Expert Center

Reply via email to