| .. SPDX-License-Identifier: GPL-2.0 | |
| ============================================= | |
| AMD-TEE (AMD's Trusted Execution Environment) | |
| ============================================= | |
| The AMD-TEE driver handles the communication with AMD's TEE environment. The | |
| TEE environment is provided by AMD Secure Processor. | |
| The AMD Secure Processor (formerly called Platform Security Processor or PSP) | |
| is a dedicated processor that features ARM TrustZone technology, along with a | |
| software-based Trusted Execution Environment (TEE) designed to enable | |
| third-party Trusted Applications. This feature is currently enabled only for | |
| APUs. | |
| The following picture shows a high level overview of AMD-TEE:: | |
| | | |
| x86 | | |
| | | |
| User space (Kernel space) | AMD Secure Processor (PSP) | |
| ~~~~~~~~~~ ~~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| | | |
| +--------+ | +-------------+ | |
| | Client | | | Trusted | | |
| +--------+ | | Application | | |
| /\ | +-------------+ | |
| || | /\ | |
| || | || | |
| || | \/ | |
| || | +----------+ | |
| || | | TEE | | |
| || | | Internal | | |
| \/ | | API | | |
| +---------+ +-----------+---------+ +----------+ | |
| | TEE | | TEE | AMD-TEE | | AMD-TEE | | |
| | Client | | subsystem | driver | | Trusted | | |
| | API | | | | | OS | | |
| +---------+-----------+----+------+---------+---------+----------+ | |
| | Generic TEE API | | ASP | Mailbox | | |
| | IOCTL (TEE_IOC_*) | | driver | Register Protocol | | |
| +--------------------------+ +---------+--------------------+ | |
| At the lowest level (in x86), the AMD Secure Processor (ASP) driver uses the | |
| CPU to PSP mailbox register to submit commands to the PSP. The format of the | |
| command buffer is opaque to the ASP driver. It's role is to submit commands to | |
| the secure processor and return results to AMD-TEE driver. The interface | |
| between AMD-TEE driver and AMD Secure Processor driver can be found in [1]. | |
| The AMD-TEE driver packages the command buffer payload for processing in TEE. | |
| The command buffer format for the different TEE commands can be found in [2]. | |
| The TEE commands supported by AMD-TEE Trusted OS are: | |
| * TEE_CMD_ID_LOAD_TA - loads a Trusted Application (TA) binary into | |
| TEE environment. | |
| * TEE_CMD_ID_UNLOAD_TA - unloads TA binary from TEE environment. | |
| * TEE_CMD_ID_OPEN_SESSION - opens a session with a loaded TA. | |
| * TEE_CMD_ID_CLOSE_SESSION - closes session with loaded TA | |
| * TEE_CMD_ID_INVOKE_CMD - invokes a command with loaded TA | |
| * TEE_CMD_ID_MAP_SHARED_MEM - maps shared memory | |
| * TEE_CMD_ID_UNMAP_SHARED_MEM - unmaps shared memory | |
| AMD-TEE Trusted OS is the firmware running on AMD Secure Processor. | |
| The AMD-TEE driver registers itself with TEE subsystem and implements the | |
| following driver function callbacks: | |
| * get_version - returns the driver implementation id and capability. | |
| * open - sets up the driver context data structure. | |
| * release - frees up driver resources. | |
| * open_session - loads the TA binary and opens session with loaded TA. | |
| * close_session - closes session with loaded TA and unloads it. | |
| * invoke_func - invokes a command with loaded TA. | |
| cancel_req driver callback is not supported by AMD-TEE. | |
| The GlobalPlatform TEE Client API [3] can be used by the user space (client) to | |
| talk to AMD's TEE. AMD's TEE provides a secure environment for loading, opening | |
| a session, invoking commands and closing session with TA. | |
| References | |
| ========== | |
| [1] include/linux/psp-tee.h | |
| [2] drivers/tee/amdtee/amdtee_if.h | |
| [3] http://www.globalplatform.org/specificationsdevice.asp look for | |
| "TEE Client API Specification v1.0" and click download. |