From: Jan Kiszka <[email protected]> In case optee_bind_services is invoked more than once successfully, make sure that already bound services are not rebound, creating multiple instances of themselves. When introducing RPMB-driven service scanning this scenario could pop up.
Signed-off-by: Jan Kiszka <[email protected]> --- drivers/tee/optee/core.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index 2871760a7b7..e8ba8f6cddd 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -83,6 +83,7 @@ static int bind_service_list(struct udevice *dev, struct tee_shm *service_list, { const struct tee_optee_ta_uuid *service_uuid = (const void *)service_list->addr; struct optee_service *service; + struct udevice *service_dev; size_t idx; int ret; @@ -91,6 +92,11 @@ static int bind_service_list(struct udevice *dev, struct tee_shm *service_list, if (!service) continue; + ret = device_find_child_by_name(dev, service->driver_name, + &service_dev); + if (!ret && dev_get_flags(service_dev) & DM_FLAG_BOUND) + continue; + ret = device_bind_driver_to_node(dev, service->driver_name, service->driver_name, dev_ofnode(dev), NULL); if (ret) { -- 2.47.3
