| Trusted Little Kernel (TLK) Dispatcher | 
 | ====================================== | 
 |  | 
 | TLK dispatcher (TLK-D) adds support for NVIDIA's Trusted Little Kernel (TLK) | 
 | to work with Trusted Firmware-A (TF-A). TLK-D can be compiled by including it | 
 | in the platform's makefile. TLK is primarily meant to work with Tegra SoCs, | 
 | so while TF-A only supports TLK on Tegra, the dispatcher code can only be | 
 | compiled for other platforms. | 
 |  | 
 | In order to compile TLK-D, we need a BL32 image to be present. Since, TLKD | 
 | just needs to compile, any BL32 image would do. To use TLK as the BL32, please | 
 | refer to the "Build TLK" section. | 
 |  | 
 | Once a BL32 is ready, TLKD can be included in the image by adding "SPD=tlkd" | 
 | to the build command. | 
 |  | 
 | Trusted Little Kernel (TLK) | 
 | =========================== | 
 |  | 
 | TLK is a Trusted OS running as Secure EL1. It is a Free Open Source Software | 
 | (FOSS) release of the NVIDIA® Trusted Little Kernel (TLK) technology, which | 
 | extends technology made available with the development of the Little Kernel (LK). | 
 | You can download the LK modular embedded preemptive kernel for use on Arm, | 
 | x86, and AVR32 systems from https://github.com/travisg/lk | 
 |  | 
 | NVIDIA implemented its Trusted Little Kernel (TLK) technology, designed as a | 
 | free and open-source trusted execution environment (OTE). | 
 |  | 
 | TLK features include: | 
 |  | 
 | • Small, pre-emptive kernel | 
 | • Supports multi-threading, IPCs, and thread scheduling | 
 | • Added TrustZone features | 
 | • Added Secure Storage | 
 | • Under MIT/FreeBSD license | 
 |  | 
 | NVIDIA extensions to Little Kernel (LK) include: | 
 |  | 
 | • User mode | 
 | • Address-space separation for TAs | 
 | • TLK Client Application (CA) library | 
 | • TLK TA library | 
 | • Crypto library (encrypt/decrypt, key handling) via OpenSSL | 
 | • Linux kernel driver | 
 | • Cortex A9/A15 support | 
 | • Power Management | 
 | • TrustZone memory carve-out (reconfigurable) | 
 | • Page table management | 
 | • Debugging support over UART (USB planned) | 
 |  | 
 | TLK is hosted by NVIDIA on http://nv-tegra.nvidia.com under the | 
 | 3rdparty/ote\_partner/tlk.git repository. Detailed information about | 
 | TLK and OTE can be found in the Tegra\_BSP\_for\_Android\_TLK\_FOSS\_Reference.pdf | 
 | manual located under the "documentation" directory\_. | 
 |  | 
 | Build TLK | 
 | ========= | 
 |  | 
 | To build and execute TLK, follow the instructions from "Building a TLK Device" | 
 | section from Tegra\_BSP\_for\_Android\_TLK\_FOSS\_Reference.pdf manual. | 
 |  | 
 | Input parameters to TLK | 
 | ======================= | 
 |  | 
 | TLK expects the TZDRAM size and a structure containing the boot arguments. BL2 | 
 | passes this information to the EL3 software as members of the bl32\_ep\_info | 
 | struct, where bl32\_ep\_info is part of bl31\_params\_t (passed by BL2 in X0) | 
 |  | 
 | Example: | 
 | -------- | 
 |  | 
 | :: | 
 |  | 
 |     bl32_ep_info->args.arg0 = TZDRAM size available for BL32 | 
 |     bl32_ep_info->args.arg1 = unused (used only on Armv7-A) | 
 |     bl32_ep_info->args.arg2 = pointer to boot args |