From: Jens Wiklander <jens.wiklander@linaro.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 08/19] Documentation: tee uclass and op-tee driver
Date: Tue, 25 Sep 2018 16:40:12 +0200 [thread overview]
Message-ID: <20180925144023.24555-9-jens.wiklander@linaro.org> (raw)
In-Reply-To: <20180925144023.24555-1-jens.wiklander@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
---
doc/README.tee | 112 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 112 insertions(+)
create mode 100644 doc/README.tee
diff --git a/doc/README.tee b/doc/README.tee
new file mode 100644
index 000000000000..79e7996a6f5f
--- /dev/null
+++ b/doc/README.tee
@@ -0,0 +1,112 @@
+=============
+TEE uclass
+=============
+
+This document describes the TEE uclass in U-Boot
+
+A TEE (Trusted Execution Environment) is a trusted OS running in some
+secure environment, for example, TrustZone on ARM CPUs, or a separate
+secure co-processor etc. A TEE driver handles the details needed to
+communicate with the TEE.
+
+This uclass deals with:
+
+- Registration of TEE drivers
+
+- Managing shared memory between U-Boot and the TEE
+
+- Providing a generic API to the TEE
+
+The TEE interface
+=================
+
+include/tee.h defines the generic interface to a TEE.
+
+A client finds the TEE device via tee_find_device(). Other important functions
+when interfacing with a TEE are:
+
+- tee_shm_alloc(), tee_shm_register() and tee_shm_free() to manage shared
+ memory objects often needed when communicating with the TEE.
+
+- tee_get_version() lets the client know which the capabilities of the TEE
+ device.
+
+- tee_open_session() opens a session to a Trusted Application
+
+- tee_invoke_func() invokes a function in a Trusted Application
+
+- tee_close_session() closes a session to a Trusted Application
+
+Much of the communication between clients and the TEE is opaque to the
+driver. The main job for the driver is to receive requests from the
+clients, forward them to the TEE and send back the results.
+
+OP-TEE driver
+=============
+
+The OP-TEE driver handles OP-TEE [1] based TEEs. Currently it is only the ARM
+TrustZone based OP-TEE solution that is supported.
+
+Lowest level of communication with OP-TEE builds on ARM SMC Calling
+Convention (SMCCC) [2], which is the foundation for OP-TEE's SMC interface
+[3] used internally by the driver. Stacked on top of that is OP-TEE Message
+Protocol [4].
+
+OP-TEE SMC interface provides the basic functions required by SMCCC and some
+additional functions specific for OP-TEE. The most interesting functions are:
+
+- OPTEE_SMC_FUNCID_CALLS_UID (part of SMCCC) returns the version information
+ which is then returned by TEE_IOC_VERSION
+
+- OPTEE_SMC_CALL_GET_OS_UUID returns the particular OP-TEE implementation, used
+ to tell, for instance, a TrustZone OP-TEE apart from an OP-TEE running on a
+ separate secure co-processor.
+
+- OPTEE_SMC_CALL_WITH_ARG drives the OP-TEE message protocol
+
+- OPTEE_SMC_GET_SHM_CONFIG lets the driver and OP-TEE agree on which memory
+ range to used for shared memory between Linux and OP-TEE.
+
+The GlobalPlatform TEE Client API [5] is implemented on top of the generic
+TEE API.
+
+Picture of the relationship between the different components in the
+OP-TEE architecture:
+
+ U-Boot Secure world
+ ~~~~~~ ~~~~~~~~~~~~
+ +------------+ +-------------+
+ | Client | | Trusted |
+ | | | Application |
+ +------------+ +-------------+
+ /\ /\
+ || ||
+ \/ \/
+ +------------+ +-------------+
+ | TEE | | TEE Internal|
+ | uclass | | API |
+ +------------+ +-------------+
+ | OP-TEE | | OP-TEE |
+ | driver | | Trusted OS |
+ +------------+-----------+-------------+
+ | OP-TEE MSG |
+ | SMCCC (OPTEE_SMC_CALL_*) |
+ +--------------------------------------+
+
+RPC (Remote Procedure Call) are requests from secure world to the driver.
+An RPC is identified by a special range of SMCCC return values from
+OPTEE_SMC_CALL_WITH_ARG.
+
+References
+==========
+
+[1] https://github.com/OP-TEE/optee_os
+
+[2] http://infocenter.arm.com/help/topic/com.arm.doc.den0028a/index.html
+
+[3] drivers/tee/optee/optee_smc.h
+
+[4] drivers/tee/optee/optee_msg.h
+
+[5] http://www.globalplatform.org/specificationsdevice.asp look for
+ "TEE Client API Specification v1.0" and click download.
--
2.17.1
next prev parent reply other threads:[~2018-09-25 14:40 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-25 14:40 [U-Boot] [PATCH v4 00/19] AVB using OP-TEE Jens Wiklander
2018-09-25 14:40 ` [U-Boot] [PATCH v4 01/19] dm: fdt: scan for devices under /firmware too Jens Wiklander
2018-10-08 1:40 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 02/19] cmd: avb read_rb: print rb_idx in hexadecimal Jens Wiklander
2018-10-08 1:40 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 03/19] cmd: avb: print error message if command fails Jens Wiklander
2018-10-08 1:40 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 04/19] mmc: rpmb: add mmc_rpmb_route_frames() Jens Wiklander
2018-10-02 11:21 ` Simon Glass
2018-10-08 1:40 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 05/19] Add UCLASS_TEE for Trusted Execution Environment Jens Wiklander
2018-10-08 1:40 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 06/19] dt/bindings: add bindings for optee Jens Wiklander
2018-10-08 1:40 ` [U-Boot] [U-Boot,v4,06/19] " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 07/19] tee: add OP-TEE driver Jens Wiklander
2018-10-08 1:40 ` [U-Boot] [U-Boot,v4,07/19] " Tom Rini
2018-09-25 14:40 ` Jens Wiklander [this message]
2018-10-08 1:40 ` [U-Boot] [U-Boot, v4, 08/19] Documentation: tee uclass and op-tee driver Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 09/19] arm: dt: hikey: Add optee node Jens Wiklander
2018-10-08 1:40 ` [U-Boot] [U-Boot,v4,09/19] " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 10/19] optee: support routing of rpmb data frames to mmc Jens Wiklander
2018-10-02 11:21 ` Simon Glass
2018-10-08 1:40 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 11/19] tee: optee: support AVB trusted application Jens Wiklander
2018-10-02 11:21 ` Simon Glass
2018-10-08 1:41 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 12/19] sandbox: dt: add sandbox_tee node Jens Wiklander
2018-10-08 1:41 ` [U-Boot] [U-Boot,v4,12/19] " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 13/19] sandbox: imply CONFIG_TEE (TEE uclass) Jens Wiklander
2018-10-08 1:41 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 14/19] tee: add sandbox driver Jens Wiklander
2018-10-02 11:21 ` Simon Glass
2018-10-08 1:41 ` [U-Boot] [U-Boot,v4,14/19] " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 15/19] test: tee: test TEE uclass Jens Wiklander
2018-10-08 1:41 ` [U-Boot] [U-Boot,v4,15/19] " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 16/19] avb_verify: support using OP-TEE TA AVB Jens Wiklander
2018-10-08 1:41 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 17/19] test_avb: Update pymark.buildconfigspec information for the AVB tests Jens Wiklander
2018-10-08 1:41 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 18/19] avb_verify: support sandbox configuration Jens Wiklander
2018-10-02 11:21 ` Simon Glass
2018-10-08 1:41 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-09-25 14:40 ` [U-Boot] [PATCH v4 19/19] Kconfig: sandbox: enable cmd_avb and dependencies Jens Wiklander
2018-10-08 1:41 ` [U-Boot] [U-Boot, v4, " Tom Rini
2018-10-02 11:21 ` [U-Boot] [PATCH v4 00/19] AVB using OP-TEE Simon Glass
2018-10-08 7:18 ` Jens Wiklander
2018-10-09 3:40 ` Simon Glass
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180925144023.24555-9-jens.wiklander@linaro.org \
--to=jens.wiklander@linaro.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.