tracing: Use guard() rather than scoped_guard()
[drm/drm-misc.git] / Documentation / tee / ts-tee.rst
blob843e34422648e2d428de225f6b547732fc7296d6
1 .. SPDX-License-Identifier: GPL-2.0
3 =================================
4 TS-TEE (Trusted Services project)
5 =================================
7 This driver provides access to secure services implemented by Trusted Services.
9 Trusted Services [1] is a TrustedFirmware.org project that provides a framework
10 for developing and deploying device Root of Trust services in FF-A [2] S-EL0
11 Secure Partitions. The project hosts the reference implementation of the Arm
12 Platform Security Architecture [3] for Arm A-profile devices.
14 The FF-A Secure Partitions (SP) are accessible through the FF-A driver [4] which
15 provides the low level communication for this driver. On top of that the Trusted
16 Services RPC protocol is used [5]. To use the driver from user space a reference
17 implementation is provided at [6], which is part of the Trusted Services client
18 library called libts [7].
20 All Trusted Services (TS) SPs have the same FF-A UUID; it identifies the TS RPC
21 protocol. A TS SP can host one or more services (e.g. PSA Crypto, PSA ITS, etc).
22 A service is identified by its service UUID; the same type of service cannot be
23 present twice in the same SP. During SP boot each service in the SP is assigned
24 an "interface ID". This is just a short ID to simplify message addressing.
26 The generic TEE design is to share memory at once with the Trusted OS, which can
27 then be reused to communicate with multiple applications running on the Trusted
28 OS. However, in case of FF-A, memory sharing works on an endpoint level, i.e.
29 memory is shared with a specific SP. User space has to be able to separately
30 share memory with each SP based on its endpoint ID; therefore a separate TEE
31 device is registered for each discovered TS SP. Opening the SP corresponds to
32 opening the TEE device and creating a TEE context. A TS SP hosts one or more
33 services. Opening a service corresponds to opening a session in the given
34 tee_context.
36 Overview of a system with Trusted Services components::
38    User space                  Kernel space                   Secure world
39    ~~~~~~~~~~                  ~~~~~~~~~~~~                   ~~~~~~~~~~~~
40    +--------+                                               +-------------+
41    | Client |                                               | Trusted     |
42    +--------+                                               | Services SP |
43       /\                                                    +-------------+
44       ||                                                          /\
45       ||                                                          ||
46       ||                                                          ||
47       \/                                                          \/
48    +-------+                +----------+--------+           +-------------+
49    | libts |                |  TEE     | TS-TEE |           |  FF-A SPMC  |
50    |       |                |  subsys  | driver |           |   + SPMD    |
51    +-------+----------------+----+-----+--------+-----------+-------------+
52    |      Generic TEE API        |     |  FF-A  |     TS RPC protocol     |
53    |      IOCTL (TEE_IOC_*)      |     | driver |        over FF-A        |
54    +-----------------------------+     +--------+-------------------------+
56 References
57 ==========
59 [1] https://www.trustedfirmware.org/projects/trusted-services/
61 [2] https://developer.arm.com/documentation/den0077/
63 [3] https://www.arm.com/architecture/security-features/platform-security
65 [4] drivers/firmware/arm_ffa/
67 [5] https://trusted-services.readthedocs.io/en/v1.0.0/developer/service-access-protocols.html#abi
69 [6] https://git.trustedfirmware.org/TS/trusted-services.git/tree/components/rpc/ts_rpc/caller/linux/ts_rpc_caller_linux.c?h=v1.0.0
71 [7] https://git.trustedfirmware.org/TS/trusted-services.git/tree/deployments/libts/arm-linux/CMakeLists.txt?h=v1.0.0