xref: /rk3399_ARM-atf/docs/components/spd/tlk-dispatcher.rst (revision 40d553cfde38d4f68449c62967cd1ce0d6478750)
1*40d553cfSPaul BeesleyTrusted Little Kernel (TLK) Dispatcher
2*40d553cfSPaul Beesley======================================
3*40d553cfSPaul Beesley
4*40d553cfSPaul BeesleyTLK dispatcher (TLK-D) adds support for NVIDIA's Trusted Little Kernel (TLK)
5*40d553cfSPaul Beesleyto work with Trusted Firmware-A (TF-A). TLK-D can be compiled by including it
6*40d553cfSPaul Beesleyin the platform's makefile. TLK is primarily meant to work with Tegra SoCs,
7*40d553cfSPaul Beesleyso while TF-A only supports TLK on Tegra, the dispatcher code can only be
8*40d553cfSPaul Beesleycompiled for other platforms.
9*40d553cfSPaul Beesley
10*40d553cfSPaul BeesleyIn order to compile TLK-D, we need a BL32 image to be present. Since, TLKD
11*40d553cfSPaul Beesleyjust needs to compile, any BL32 image would do. To use TLK as the BL32, please
12*40d553cfSPaul Beesleyrefer to the "Build TLK" section.
13*40d553cfSPaul Beesley
14*40d553cfSPaul BeesleyOnce a BL32 is ready, TLKD can be included in the image by adding "SPD=tlkd"
15*40d553cfSPaul Beesleyto the build command.
16*40d553cfSPaul Beesley
17*40d553cfSPaul BeesleyTrusted Little Kernel (TLK)
18*40d553cfSPaul Beesley===========================
19*40d553cfSPaul Beesley
20*40d553cfSPaul BeesleyTLK is a Trusted OS running as Secure EL1. It is a Free Open Source Software
21*40d553cfSPaul Beesley(FOSS) release of the NVIDIA® Trusted Little Kernel (TLK) technology, which
22*40d553cfSPaul Beesleyextends technology made available with the development of the Little Kernel (LK).
23*40d553cfSPaul BeesleyYou can download the LK modular embedded preemptive kernel for use on Arm,
24*40d553cfSPaul Beesleyx86, and AVR32 systems from https://github.com/travisg/lk
25*40d553cfSPaul Beesley
26*40d553cfSPaul BeesleyNVIDIA implemented its Trusted Little Kernel (TLK) technology, designed as a
27*40d553cfSPaul Beesleyfree and open-source trusted execution environment (OTE).
28*40d553cfSPaul Beesley
29*40d553cfSPaul BeesleyTLK features include:
30*40d553cfSPaul Beesley
31*40d553cfSPaul Beesley• Small, pre-emptive kernel
32*40d553cfSPaul Beesley• Supports multi-threading, IPCs, and thread scheduling
33*40d553cfSPaul Beesley• Added TrustZone features
34*40d553cfSPaul Beesley• Added Secure Storage
35*40d553cfSPaul Beesley• Under MIT/FreeBSD license
36*40d553cfSPaul Beesley
37*40d553cfSPaul BeesleyNVIDIA extensions to Little Kernel (LK) include:
38*40d553cfSPaul Beesley
39*40d553cfSPaul Beesley• User mode
40*40d553cfSPaul Beesley• Address-space separation for TAs
41*40d553cfSPaul Beesley• TLK Client Application (CA) library
42*40d553cfSPaul Beesley• TLK TA library
43*40d553cfSPaul Beesley• Crypto library (encrypt/decrypt, key handling) via OpenSSL
44*40d553cfSPaul Beesley• Linux kernel driver
45*40d553cfSPaul Beesley• Cortex A9/A15 support
46*40d553cfSPaul Beesley• Power Management
47*40d553cfSPaul Beesley• TrustZone memory carve-out (reconfigurable)
48*40d553cfSPaul Beesley• Page table management
49*40d553cfSPaul Beesley• Debugging support over UART (USB planned)
50*40d553cfSPaul Beesley
51*40d553cfSPaul BeesleyTLK is hosted by NVIDIA on http://nv-tegra.nvidia.com under the
52*40d553cfSPaul Beesley3rdparty/ote\_partner/tlk.git repository. Detailed information about
53*40d553cfSPaul BeesleyTLK and OTE can be found in the Tegra\_BSP\_for\_Android\_TLK\_FOSS\_Reference.pdf
54*40d553cfSPaul Beesleymanual located under the "documentation" directory\_.
55*40d553cfSPaul Beesley
56*40d553cfSPaul BeesleyBuild TLK
57*40d553cfSPaul Beesley=========
58*40d553cfSPaul Beesley
59*40d553cfSPaul BeesleyTo build and execute TLK, follow the instructions from "Building a TLK Device"
60*40d553cfSPaul Beesleysection from Tegra\_BSP\_for\_Android\_TLK\_FOSS\_Reference.pdf manual.
61*40d553cfSPaul Beesley
62*40d553cfSPaul BeesleyInput parameters to TLK
63*40d553cfSPaul Beesley=======================
64*40d553cfSPaul Beesley
65*40d553cfSPaul BeesleyTLK expects the TZDRAM size and a structure containing the boot arguments. BL2
66*40d553cfSPaul Beesleypasses this information to the EL3 software as members of the bl32\_ep\_info
67*40d553cfSPaul Beesleystruct, where bl32\_ep\_info is part of bl31\_params\_t (passed by BL2 in X0)
68*40d553cfSPaul Beesley
69*40d553cfSPaul BeesleyExample:
70*40d553cfSPaul Beesley--------
71*40d553cfSPaul Beesley
72*40d553cfSPaul Beesley::
73*40d553cfSPaul Beesley
74*40d553cfSPaul Beesley    bl32_ep_info->args.arg0 = TZDRAM size available for BL32
75*40d553cfSPaul Beesley    bl32_ep_info->args.arg1 = unused (used only on Armv7-A)
76*40d553cfSPaul Beesley    bl32_ep_info->args.arg2 = pointer to boot args
77