Looks good for me. Reviewed-by: Maxim Uvarov <maxim.uvarov@xxxxxxxxxx> On Thu, 4 Jun 2020 at 10:00, Sumit Garg <sumit.garg@xxxxxxxxxx> wrote: > > Update documentation with TEE bus infrastructure which provides an > interface for kernel client drivers to communicate with corresponding > Trusted Application. > > Signed-off-by: Sumit Garg <sumit.garg@xxxxxxxxxx> > --- > > Changes in v2: > - Add TEE client driver example snippet. > > Documentation/tee.txt | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 68 insertions(+) > > diff --git a/Documentation/tee.txt b/Documentation/tee.txt > index c8fad81..350dd40 100644 > --- a/Documentation/tee.txt > +++ b/Documentation/tee.txt > @@ -53,6 +53,66 @@ clients, forward them to the TEE and send back the results. In the case of > supplicants the communication goes in the other direction, the TEE sends > requests to the supplicant which then sends back the result. > > +The TEE kernel interface > +======================== > + > +Kernel provides a TEE bus infrastructure where a Trusted Application is > +represented as a device identified via Universally Unique Identifier (UUID) and > +client drivers register a table of supported device UUIDs. > + > +TEE bus infrastructure registers following APIs: > +- match(): iterates over the client driver UUID table to find a corresponding > + match for device UUID. If a match is found, then this particular device is > + probed via corresponding probe API registered by the client driver. This > + process happens whenever a device or a client driver is registered with TEE > + bus. > +- uevent(): notifies user-space (udev) whenever a new device is registered on > + TEE bus for auto-loading of modularized client drivers. > + > +TEE bus device enumeration is specific to underlying TEE implementation, so it > +is left open for TEE drivers to provide corresponding implementation. > + > +Then TEE client driver can talk to a matched Trusted Application using APIs > +listed in include/linux/tee_drv.h. > + > +TEE client driver example > +------------------------- > + > +Suppose a TEE client driver needs to communicate with a Trusted Application > +having UUID: ``ac6a4085-0e82-4c33-bf98-8eb8e118b6c2``, so driver registration > +snippet would look like:: > + > + static const struct tee_client_device_id client_id_table[] = { > + {UUID_INIT(0xac6a4085, 0x0e82, 0x4c33, > + 0xbf, 0x98, 0x8e, 0xb8, 0xe1, 0x18, 0xb6, 0xc2)}, > + {} > + }; > + > + MODULE_DEVICE_TABLE(tee, client_id_table); > + > + static struct tee_client_driver client_driver = { > + .id_table = client_id_table, > + .driver = { > + .name = DRIVER_NAME, > + .bus = &tee_bus_type, > + .probe = client_probe, > + .remove = client_remove, > + }, > + }; > + > + static int __init client_init(void) > + { > + return driver_register(&client_driver.driver); > + } > + > + static void __exit client_exit(void) > + { > + driver_unregister(&client_driver.driver); > + } > + > + module_init(client_init); > + module_exit(client_exit); > + > OP-TEE driver > ============= > > @@ -112,6 +172,14 @@ kernel are handled by the kernel driver. Other RPC messages will be forwarded to > tee-supplicant without further involvement of the driver, except switching > shared memory buffer representation. > > +OP-TEE device enumeration > +------------------------- > + > +OP-TEE provides a pseudo Trusted Application: drivers/tee/optee/device.c in > +order to support device enumeration. In other words, OP-TEE driver invokes this > +application to retrieve a list of Trusted Applications which can be registered > +as devices on the TEE bus. > + > AMD-TEE driver > ============== > > -- > 2.7.4 >