Commit 9c7f01d5 authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'optee-supplicant-fix-for-v6.7' of...

Merge tag 'optee-supplicant-fix-for-v6.7' of git://git.linaro.org:/people/jens.wiklander/linux-tee into arm/fixes

OP-TEE fix for supplicant based device enumeration

Adds a sysfs attribute for devices depending on supplicant services so
that the user-space service can detect and detach those devices before
closing the supplicant

* tag 'optee-supplicant-fix-for-v6.7' of git://git.linaro.org:/people/jens.wiklander/linux-tee:
  tee: optee: Fix supplicant based device enumeration

Link: https://lore.kernel.org/r/20231114153113.GA1310615@raydenSigned-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents 2cc14f52 7269cba5
...@@ -6,3 +6,12 @@ Description: ...@@ -6,3 +6,12 @@ Description:
OP-TEE bus provides reference to registered drivers under this directory. The <uuid> OP-TEE bus provides reference to registered drivers under this directory. The <uuid>
matches Trusted Application (TA) driver and corresponding TA in secure OS. Drivers matches Trusted Application (TA) driver and corresponding TA in secure OS. Drivers
are free to create needed API under optee-ta-<uuid> directory. are free to create needed API under optee-ta-<uuid> directory.
What: /sys/bus/tee/devices/optee-ta-<uuid>/need_supplicant
Date: November 2023
KernelVersion: 6.7
Contact: op-tee@lists.trustedfirmware.org
Description:
Allows to distinguish whether an OP-TEE based TA/device requires user-space
tee-supplicant to function properly or not. This attribute will be present for
devices which depend on tee-supplicant to be running.
...@@ -60,7 +60,16 @@ static void optee_release_device(struct device *dev) ...@@ -60,7 +60,16 @@ static void optee_release_device(struct device *dev)
kfree(optee_device); kfree(optee_device);
} }
static int optee_register_device(const uuid_t *device_uuid) static ssize_t need_supplicant_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
return 0;
}
static DEVICE_ATTR_RO(need_supplicant);
static int optee_register_device(const uuid_t *device_uuid, u32 func)
{ {
struct tee_client_device *optee_device = NULL; struct tee_client_device *optee_device = NULL;
int rc; int rc;
...@@ -83,6 +92,10 @@ static int optee_register_device(const uuid_t *device_uuid) ...@@ -83,6 +92,10 @@ static int optee_register_device(const uuid_t *device_uuid)
put_device(&optee_device->dev); put_device(&optee_device->dev);
} }
if (func == PTA_CMD_GET_DEVICES_SUPP)
device_create_file(&optee_device->dev,
&dev_attr_need_supplicant);
return rc; return rc;
} }
...@@ -142,7 +155,7 @@ static int __optee_enumerate_devices(u32 func) ...@@ -142,7 +155,7 @@ static int __optee_enumerate_devices(u32 func)
num_devices = shm_size / sizeof(uuid_t); num_devices = shm_size / sizeof(uuid_t);
for (idx = 0; idx < num_devices; idx++) { for (idx = 0; idx < num_devices; idx++) {
rc = optee_register_device(&device_uuid[idx]); rc = optee_register_device(&device_uuid[idx], func);
if (rc) if (rc)
goto out_shm; goto out_shm;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment