blob: 70b7edc248c5d98a1ce117581b12316ea2b7cf41 [file] [log] [blame]
Jimmy Brisson0862f012020-04-02 15:19:12 -05001Building TF-A Tests
2===================
3
4- Before building TF-A Tests, the environment variable ``CROSS_COMPILE`` must
5 point to the cross compiler.
6
7 For AArch64:
8
9 ::
10
11 export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-none-elf-
12
13 For AArch32:
14
15 ::
16
17 export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-eabi-
18
19- Change to the root directory of the TF-A Tests source tree and build.
20
21 For AArch64:
22
23 ::
24
25 make PLAT=<platform>
26
27 For AArch32:
28
29 ::
30
31 make PLAT=<platform> ARCH=aarch32
32
33 Notes:
34
35 - If ``PLAT`` is not specified, ``fvp`` is assumed by default. See the
Jimmy Brisson4844dc92020-04-02 15:19:34 -050036 `TF-A documentation`_ for more information on available build
Jimmy Brisson0862f012020-04-02 15:19:12 -050037 options.
38
39 - By default this produces a release version of the build. To produce a
40 debug version instead, build the code with ``DEBUG=1``.
41
42 - The build process creates products in a ``build/`` directory tree,
43 building the objects and binaries for each test image in separate
44 sub-directories. The following binary files are created from the
45 corresponding ELF files:
46
47 - ``build/<platform>/<build-type>/tftf.bin``
48 - ``build/<platform>/<build-type>/ns_bl1u.bin``
49 - ``build/<platform>/<build-type>/ns_bl2u.bin``
50 - ``build/<platform>/<build-type>/el3_payload.bin``
51 - ``build/<platform>/<build-type>/cactus_mm.bin``
52 - ``build/<platform>/<build-type>/cactus.bin``
53 - ``build/<platform>/<build-type>/ivy.bin``
Jimmy Brisson0862f012020-04-02 15:19:12 -050054
55 where ``<platform>`` is the name of the chosen platform and ``<build-type>``
56 is either ``debug`` or ``release``. The actual number of images might differ
57 depending on the platform.
58
59 Refer to the sections below for more information about each image.
60
61- Build products for a specific build variant can be removed using:
62
63 ::
64
65 make DEBUG=<D> PLAT=<platform> clean
66
67 ... where ``<D>`` is ``0`` or ``1``, as specified when building.
68
69 The build tree can be removed completely using:
70
71 ::
72
73 make realclean
74
75- Use the following command to list all supported build commands:
76
77 ::
78
79 make help
80
81TFTF test image
82```````````````
83
84``tftf.bin`` is the main test image to exercise the TF-A features. The other
85test images provided in this repository are optional dependencies that TFTF
86needs to test some specific features.
87
88``tftf.bin`` may be built independently of the other test images using the
89following command:
90
91::
92
93 make PLAT=<platform> tftf
94
95In TF-A boot flow, ``tftf.bin`` replaces the ``BL33`` image and should be
96injected in the FIP image. This might be achieved by running the following
97command from the TF-A root directory:
98
99::
100
Leonardo Sandovalabf254f2020-06-29 17:46:28 -0500101 BL33=<path/to/tftf.bin> make PLAT=<platform> fip
Jimmy Brisson0862f012020-04-02 15:19:12 -0500102
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500103Please refer to the `TF-A documentation`_ for further details.
Jimmy Brisson0862f012020-04-02 15:19:12 -0500104
Soby Mathew2a5b1502022-11-02 04:29:07 +0000105Realm payload test image
106````````````````````````
107
108``realm.bin`` is the realm payload test image and is packaged along with
109tftf for Realm Management Extension (RME) testing. This can be built using
110the following command:
111
112::
113
Shruti Guptac973b2a2023-07-12 12:10:54 +0100114 make PLAT=<platform> ENABLE_REALM_PAYLOAD_TESTS=1 tftf
Soby Mathew2a5b1502022-11-02 04:29:07 +0000115
Shruti Guptac973b2a2023-07-12 12:10:54 +0100116The generated ``realm.bin`` is packaged as part of ``tftf.bin``
117to be used as a single BL33 image.
Soby Mathew2a5b1502022-11-02 04:29:07 +0000118
119Please refer to the `TF-A RME documentation`_ for build and run instructions.
120
Jimmy Brisson0862f012020-04-02 15:19:12 -0500121NS_BL1U and NS_BL2U test images
122```````````````````````````````
123
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500124``ns_bl1u.bin`` and ``ns_bl2u.bin`` are test images that exercise the *Firmware
125Update (FWU)* feature of TF-A [#]_. Throughout this document, they will be
126referred as the *FWU test images*.
Jimmy Brisson0862f012020-04-02 15:19:12 -0500127
128In addition to updating the firmware, the FWU test images also embed some tests
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500129that exercise the FWU state machine implemented in the TF-A. They send valid
Jimmy Brisson0862f012020-04-02 15:19:12 -0500130and invalid SMC requests to the TF-A BL1 image in order to test its robustness.
131
132NS_BL1U test image
133''''''''''''''''''
134
135The ``NS_BL1U`` image acts as the `Application Processor (AP) Firmware Update
136Boot ROM`. This typically is the first software agent executing on the AP in the
137Normal World during a firmware update operation. Its primary purpose is to load
138subsequent firmware update images from an external interface, such as NOR Flash,
139and communicate with ``BL1`` to authenticate those images.
140
141The ``NS_BL1U`` test image provided in this repository performs the following
142tasks:
143
144- Load FWU images from external non-volatile storage (typically flash memory)
145 to Non-Secure RAM.
146
147- Request TF-A BL1 to copy these images in Secure RAM and authenticate them.
148
149- Jump to ``NS_BL2U`` which carries out the next steps in the firmware update
150 process.
151
152This image may be built independently of the other test images using the
153following command:
154
155::
156
157 make PLAT=<platform> ns_bl1u
158
159NS_BL2U test image
160''''''''''''''''''
161
162The ``NS_BL2U`` image acts as the `AP Firmware Updater`. Its primary
163responsibility is to load a new set of firmware images from an external
164interface and write them into non-volatile storage.
165
166The ``NS_BL2U`` test image provided in this repository overrides the original
167FIP image stored in flash with the backup FIP image (see below).
168
169This image may be built independently of the other test images using the
170following command:
171
172::
173
174 make PLAT=<platform> ns_bl2u
175
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500176.. _build_putting_together:
177
Jimmy Brisson0862f012020-04-02 15:19:12 -0500178Putting it all together
179'''''''''''''''''''''''
180
181The FWU test images should be used in conjunction with the TFTF image, as the
182latter initiates the FWU process by corrupting the FIP image and resetting the
183target. Once the FWU process is complete, TFTF takes over again and checks that
184the firmware was successfully updated.
185
186To sum up, 3 images must be built out of the TF-A Tests repository in order to
187test the TF-A Firmware Update feature:
188
189- ``ns_bl1u.bin``
190- ``ns_bl2u.bin``
191- ``tftf.bin``
192
193Once that's done, they must be combined in the right way.
194
195- ``ns_bl1u.bin`` is a standalone image and does not require any further
196 processing.
197
198- ``ns_bl2u.bin`` must be injected into the ``FWU_FIP`` image. This might be
199 achieved by setting ``NS_BL2U=ns_bl2u.bin`` when building the ``FWU_FIP``
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500200 image out of the TF-A repository. Please refer to the section Building FIP
201 images with support for Trusted Board Boot in the `TF-A documentation`_.
Jimmy Brisson0862f012020-04-02 15:19:12 -0500202
203- ``tftf.bin`` must be injected in the standard FIP image, as explained
204 in section `TFTF test image`_.
205
206Additionally, on Juno platform, the FWU FIP must contain a ``SCP_BL2U`` image.
207This image can simply be a copy of the standard ``SCP_BL2`` image if no specific
208firmware update operations need to be carried on the SCP side.
209
210Finally, the backup FIP image must be created. This can simply be a copy of the
211standard FIP image, which means that the Firmware Update process will restore
212the original, uncorrupted FIP image.
213
214EL3 test payload
215````````````````
216
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500217``el3_payload.bin`` is a test image exercising the alternative EL3 payload boot
218flow in TF-A. Refer to the `EL3 test payload README file`_ for more details
Jimmy Brisson0862f012020-04-02 15:19:12 -0500219about its behaviour and how to build and run it.
220
221SPM test images
222```````````````
223
Olivier Depreza7573662021-05-07 18:58:03 +0200224This repository contains three sample Secure Partitions (SP) meant to be used
225with one implementation of a Secure Partition Manager (SPM):
Jimmy Brisson0862f012020-04-02 15:19:12 -0500226
Olivier Depreza7573662021-05-07 18:58:03 +0200227- Cactus-MM
228- Cactus and Ivy
Jimmy Brisson0862f012020-04-02 15:19:12 -0500229
230They are only supported on AArch64 FVP. They can be built independently of the
231other test images using the following command:
232
233::
234
235 make PLAT=fvp cactus ivy cactus_mm
236
Jimmy Brisson0862f012020-04-02 15:19:12 -0500237To run the full set of tests in the Secure Partitions, they should be used in
238conjunction with the TFTF image.
239
Olivier Depreza7573662021-05-07 18:58:03 +0200240Please refer to the `TF-A documentation`_ for further details.
241
242Cactus-MM
243'''''''''
244
245Cactus-MM is designed to test the TF-A EL3 SPM implementation
246(`TF-A Secure Partition Manager (MM)`_) based on the
247`Arm Management Mode Interface`_ (MM)
248
249This SP runs in Secure-EL0 and performs the following tasks:
250
251- Test that TF-A has correctly setup the secure partition environment: it
252 should be allowed to perform cache maintenance operations, access floating
253 point registers, etc.
254
255- Test that TF-A accepts to change data access permissions and instruction
256 permissions on behalf of the Secure Partition for memory regions the latter
257 owns.
258
259- Test communication with SPM through MM interface.
260
261In the TF-A boot flow, the partition replaces the ``BL32`` image and should be
262injected in the FIP image. To test SPM-MM with Cactus-MM, it is enough to use
263``cactus_mm.bin`` as BL32 image.
264
265For SPM-MM, build TF-A following `Building TF-A Secure Partition Manager (MM)`_ and the following
Jimmy Brisson0862f012020-04-02 15:19:12 -0500266commands can be used to build the tests:
267
268::
269
270 # TF-A-Tests repository:
271
272 make PLAT=fvp TESTS=spm-mm tftf cactus_mm
273
Olivier Depreza7573662021-05-07 18:58:03 +0200274Cactus and Ivy
275''''''''''''''
276
277Cactus and Ivy are designed to test the FF-A based SPM implementation with
278secure virtualization enabled. Refer to `Arm Firmware Framework for Armv8-A`_
279
280In the TF-A reference code base, BL31 implements the SPMD and BL32 the SPMC.
281The SPMC runs at S-EL2 and acts as a partition manager for multiple secure
282partitions (`TF-A Secure Partition Manager (FF-A)`_):
283
284- Cactus is a sample FF-A compliant S-EL1 partition. As a matter of providing
285 a realistic test harness, three instances of the same partition binary are
286 launched as separate SPs (hence assigned three different FF-A IDs
287 corresponding each to a different secure partition). Each secure partition
288 instance has a separate manifest (`Cactus sample manifest`_,
289 `Cactus secondary manifest`_, `Cactus tertiary manifest`_ ). First two
290 instances are MP SPs. Third instance is a UP SP. Each instance runs a set
291 of built-in tests at boot time. They exercise SP to SPMC FF-A interfaces
292 contained in the secure world. The partition interacts with the SPMC through
293 SMC. Once the NWd and TFTF are started, another set of run-time tests
294 exercise the normal world to secure world primitives.
295- Ivy is a specific kind of S-EL1 UP partition, where the S-EL1 exception level
296 consists of a thin shim layer. The applicative part of the partition is held
297 at S-EL0. The shim provides early bootstrap code, MMU configuration and a
298 vector table trapping S-EL0 requests. The application interacts with the shim
299 through FF-A protocol by the use of SVC instruction. The shim relays the
300 request to the SPMC by an SMC. The S-EL0 application doesn't require knowledge
301 of the shim, and can be self contained.
302
303This picture illustrates the test setup:
304
305.. image:: ../resources/tftf-cactus.png
306
307To build TFTF with SPM tests, Cactus and Ivy use:
Jimmy Brisson0862f012020-04-02 15:19:12 -0500308
309::
310
311 # TF-A-Tests repository:
312
313 make PLAT=fvp TESTS=spm tftf cactus ivy
314
Jimmy Brisson0862f012020-04-02 15:19:12 -0500315--------------
316
317.. [#] Therefore, the Trusted Board Boot feature must be enabled in TF-A for
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500318 the FWU test images to work. Please refer the `TF-A documentation`_ for
Jimmy Brisson0862f012020-04-02 15:19:12 -0500319 further details.
320
Jimmy Brisson0862f012020-04-02 15:19:12 -0500321--------------
322
Olivier Depreza7573662021-05-07 18:58:03 +0200323*Copyright (c) 2019-2021, Arm Limited. All rights reserved.*
Jimmy Brisson0862f012020-04-02 15:19:12 -0500324
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500325.. _EL3 test payload README file: https://git.trustedfirmware.org/TF-A/tf-a-tests.git/tree/el3_payload/README
Olivier Depreza7573662021-05-07 18:58:03 +0200326.. _Arm Management Mode Interface: https://developer.arm.com/documentation/den0060/a/
327.. _Arm Firmware Framework for Armv8-A: https://developer.arm.com/docs/den0077/latest
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500328.. _TF-A documentation: https://trustedfirmware-a.readthedocs.org
Soby Mathew2a5b1502022-11-02 04:29:07 +0000329.. _TF-A RME documentation: https://trustedfirmware-a.readthedocs.io/en/latest/components/realm-management-extension.html
Olivier Depreza7573662021-05-07 18:58:03 +0200330.. _TF-A Secure Partition Manager (FF-A): https://trustedfirmware-a.readthedocs.io/en/latest/components/secure-partition-manager.html
331.. _TF-A Secure Partition Manager (MM): https://trustedfirmware-a.readthedocs.io/en/latest/components/secure-partition-manager-mm.html
332.. _Building TF-A Secure Partition Manager (MM): https://trustedfirmware-a.readthedocs.io/en/latest/components/secure-partition-manager-mm.html#building-tf-a-with-secure-partition-support
333.. _Cactus sample manifest: https://git.trustedfirmware.org/TF-A/tf-a-tests.git/tree/spm/cactus/plat/arm/fvp/fdts/cactus.dts?h=v2.5-rc1
334.. _Cactus secondary manifest: https://git.trustedfirmware.org/TF-A/tf-a-tests.git/tree/spm/cactus/plat/arm/fvp/fdts/cactus-secondary.dts?h=v2.5-rc1
335.. _Cactus tertiary manifest: https://git.trustedfirmware.org/TF-A/tf-a-tests.git/tree/spm/cactus/plat/arm/fvp/fdts/cactus-tertiary.dts?h=v2.5-rc1