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