blob: d0147f9c060693cdcce9f8c4de9a48cf08927eab [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``
54 - ``build/<platform>/<build-type>/quark.bin``
55
56 where ``<platform>`` is the name of the chosen platform and ``<build-type>``
57 is either ``debug`` or ``release``. The actual number of images might differ
58 depending on the platform.
59
60 Refer to the sections below for more information about each image.
61
62- Build products for a specific build variant can be removed using:
63
64 ::
65
66 make DEBUG=<D> PLAT=<platform> clean
67
68 ... where ``<D>`` is ``0`` or ``1``, as specified when building.
69
70 The build tree can be removed completely using:
71
72 ::
73
74 make realclean
75
76- Use the following command to list all supported build commands:
77
78 ::
79
80 make help
81
82TFTF test image
83```````````````
84
85``tftf.bin`` is the main test image to exercise the TF-A features. The other
86test images provided in this repository are optional dependencies that TFTF
87needs to test some specific features.
88
89``tftf.bin`` may be built independently of the other test images using the
90following command:
91
92::
93
94 make PLAT=<platform> tftf
95
96In TF-A boot flow, ``tftf.bin`` replaces the ``BL33`` image and should be
97injected in the FIP image. This might be achieved by running the following
98command from the TF-A root directory:
99
100::
101
Leonardo Sandovalabf254f2020-06-29 17:46:28 -0500102 BL33=<path/to/tftf.bin> make PLAT=<platform> fip
Jimmy Brisson0862f012020-04-02 15:19:12 -0500103
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500104Please refer to the `TF-A documentation`_ for further details.
Jimmy Brisson0862f012020-04-02 15:19:12 -0500105
106NS_BL1U and NS_BL2U test images
107```````````````````````````````
108
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500109``ns_bl1u.bin`` and ``ns_bl2u.bin`` are test images that exercise the *Firmware
110Update (FWU)* feature of TF-A [#]_. Throughout this document, they will be
111referred as the *FWU test images*.
Jimmy Brisson0862f012020-04-02 15:19:12 -0500112
113In addition to updating the firmware, the FWU test images also embed some tests
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500114that exercise the FWU state machine implemented in the TF-A. They send valid
Jimmy Brisson0862f012020-04-02 15:19:12 -0500115and invalid SMC requests to the TF-A BL1 image in order to test its robustness.
116
117NS_BL1U test image
118''''''''''''''''''
119
120The ``NS_BL1U`` image acts as the `Application Processor (AP) Firmware Update
121Boot ROM`. This typically is the first software agent executing on the AP in the
122Normal World during a firmware update operation. Its primary purpose is to load
123subsequent firmware update images from an external interface, such as NOR Flash,
124and communicate with ``BL1`` to authenticate those images.
125
126The ``NS_BL1U`` test image provided in this repository performs the following
127tasks:
128
129- Load FWU images from external non-volatile storage (typically flash memory)
130 to Non-Secure RAM.
131
132- Request TF-A BL1 to copy these images in Secure RAM and authenticate them.
133
134- Jump to ``NS_BL2U`` which carries out the next steps in the firmware update
135 process.
136
137This image may be built independently of the other test images using the
138following command:
139
140::
141
142 make PLAT=<platform> ns_bl1u
143
144NS_BL2U test image
145''''''''''''''''''
146
147The ``NS_BL2U`` image acts as the `AP Firmware Updater`. Its primary
148responsibility is to load a new set of firmware images from an external
149interface and write them into non-volatile storage.
150
151The ``NS_BL2U`` test image provided in this repository overrides the original
152FIP image stored in flash with the backup FIP image (see below).
153
154This image may be built independently of the other test images using the
155following command:
156
157::
158
159 make PLAT=<platform> ns_bl2u
160
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500161.. _build_putting_together:
162
Jimmy Brisson0862f012020-04-02 15:19:12 -0500163Putting it all together
164'''''''''''''''''''''''
165
166The FWU test images should be used in conjunction with the TFTF image, as the
167latter initiates the FWU process by corrupting the FIP image and resetting the
168target. Once the FWU process is complete, TFTF takes over again and checks that
169the firmware was successfully updated.
170
171To sum up, 3 images must be built out of the TF-A Tests repository in order to
172test the TF-A Firmware Update feature:
173
174- ``ns_bl1u.bin``
175- ``ns_bl2u.bin``
176- ``tftf.bin``
177
178Once that's done, they must be combined in the right way.
179
180- ``ns_bl1u.bin`` is a standalone image and does not require any further
181 processing.
182
183- ``ns_bl2u.bin`` must be injected into the ``FWU_FIP`` image. This might be
184 achieved by setting ``NS_BL2U=ns_bl2u.bin`` when building the ``FWU_FIP``
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500185 image out of the TF-A repository. Please refer to the section Building FIP
186 images with support for Trusted Board Boot in the `TF-A documentation`_.
Jimmy Brisson0862f012020-04-02 15:19:12 -0500187
188- ``tftf.bin`` must be injected in the standard FIP image, as explained
189 in section `TFTF test image`_.
190
191Additionally, on Juno platform, the FWU FIP must contain a ``SCP_BL2U`` image.
192This image can simply be a copy of the standard ``SCP_BL2`` image if no specific
193firmware update operations need to be carried on the SCP side.
194
195Finally, the backup FIP image must be created. This can simply be a copy of the
196standard FIP image, which means that the Firmware Update process will restore
197the original, uncorrupted FIP image.
198
199EL3 test payload
200````````````````
201
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500202``el3_payload.bin`` is a test image exercising the alternative EL3 payload boot
203flow in TF-A. Refer to the `EL3 test payload README file`_ for more details
Jimmy Brisson0862f012020-04-02 15:19:12 -0500204about its behaviour and how to build and run it.
205
206SPM test images
207```````````````
208
Olivier Depreza7573662021-05-07 18:58:03 +0200209This repository contains three sample Secure Partitions (SP) meant to be used
210with one implementation of a Secure Partition Manager (SPM):
Jimmy Brisson0862f012020-04-02 15:19:12 -0500211
Olivier Depreza7573662021-05-07 18:58:03 +0200212- Cactus-MM
213- Cactus and Ivy
Jimmy Brisson0862f012020-04-02 15:19:12 -0500214
215They are only supported on AArch64 FVP. They can be built independently of the
216other test images using the following command:
217
218::
219
220 make PLAT=fvp cactus ivy cactus_mm
221
Jimmy Brisson0862f012020-04-02 15:19:12 -0500222To run the full set of tests in the Secure Partitions, they should be used in
223conjunction with the TFTF image.
224
Olivier Depreza7573662021-05-07 18:58:03 +0200225Please refer to the `TF-A documentation`_ for further details.
226
227Cactus-MM
228'''''''''
229
230Cactus-MM is designed to test the TF-A EL3 SPM implementation
231(`TF-A Secure Partition Manager (MM)`_) based on the
232`Arm Management Mode Interface`_ (MM)
233
234This SP runs in Secure-EL0 and performs the following tasks:
235
236- Test that TF-A has correctly setup the secure partition environment: it
237 should be allowed to perform cache maintenance operations, access floating
238 point registers, etc.
239
240- Test that TF-A accepts to change data access permissions and instruction
241 permissions on behalf of the Secure Partition for memory regions the latter
242 owns.
243
244- Test communication with SPM through MM interface.
245
246In the TF-A boot flow, the partition replaces the ``BL32`` image and should be
247injected in the FIP image. To test SPM-MM with Cactus-MM, it is enough to use
248``cactus_mm.bin`` as BL32 image.
249
250For SPM-MM, build TF-A following `Building TF-A Secure Partition Manager (MM)`_ and the following
Jimmy Brisson0862f012020-04-02 15:19:12 -0500251commands can be used to build the tests:
252
253::
254
255 # TF-A-Tests repository:
256
257 make PLAT=fvp TESTS=spm-mm tftf cactus_mm
258
Olivier Depreza7573662021-05-07 18:58:03 +0200259Cactus and Ivy
260''''''''''''''
261
262Cactus and Ivy are designed to test the FF-A based SPM implementation with
263secure virtualization enabled. Refer to `Arm Firmware Framework for Armv8-A`_
264
265In the TF-A reference code base, BL31 implements the SPMD and BL32 the SPMC.
266The SPMC runs at S-EL2 and acts as a partition manager for multiple secure
267partitions (`TF-A Secure Partition Manager (FF-A)`_):
268
269- Cactus is a sample FF-A compliant S-EL1 partition. As a matter of providing
270 a realistic test harness, three instances of the same partition binary are
271 launched as separate SPs (hence assigned three different FF-A IDs
272 corresponding each to a different secure partition). Each secure partition
273 instance has a separate manifest (`Cactus sample manifest`_,
274 `Cactus secondary manifest`_, `Cactus tertiary manifest`_ ). First two
275 instances are MP SPs. Third instance is a UP SP. Each instance runs a set
276 of built-in tests at boot time. They exercise SP to SPMC FF-A interfaces
277 contained in the secure world. The partition interacts with the SPMC through
278 SMC. Once the NWd and TFTF are started, another set of run-time tests
279 exercise the normal world to secure world primitives.
280- Ivy is a specific kind of S-EL1 UP partition, where the S-EL1 exception level
281 consists of a thin shim layer. The applicative part of the partition is held
282 at S-EL0. The shim provides early bootstrap code, MMU configuration and a
283 vector table trapping S-EL0 requests. The application interacts with the shim
284 through FF-A protocol by the use of SVC instruction. The shim relays the
285 request to the SPMC by an SMC. The S-EL0 application doesn't require knowledge
286 of the shim, and can be self contained.
287
288This picture illustrates the test setup:
289
290.. image:: ../resources/tftf-cactus.png
291
292To build TFTF with SPM tests, Cactus and Ivy use:
Jimmy Brisson0862f012020-04-02 15:19:12 -0500293
294::
295
296 # TF-A-Tests repository:
297
298 make PLAT=fvp TESTS=spm tftf cactus ivy
299
Jimmy Brisson0862f012020-04-02 15:19:12 -0500300--------------
301
302.. [#] Therefore, the Trusted Board Boot feature must be enabled in TF-A for
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500303 the FWU test images to work. Please refer the `TF-A documentation`_ for
Jimmy Brisson0862f012020-04-02 15:19:12 -0500304 further details.
305
Jimmy Brisson0862f012020-04-02 15:19:12 -0500306--------------
307
Olivier Depreza7573662021-05-07 18:58:03 +0200308*Copyright (c) 2019-2021, Arm Limited. All rights reserved.*
Jimmy Brisson0862f012020-04-02 15:19:12 -0500309
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500310.. _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 +0200311.. _Arm Management Mode Interface: https://developer.arm.com/documentation/den0060/a/
312.. _Arm Firmware Framework for Armv8-A: https://developer.arm.com/docs/den0077/latest
Jimmy Brisson4844dc92020-04-02 15:19:34 -0500313.. _TF-A documentation: https://trustedfirmware-a.readthedocs.org
Olivier Depreza7573662021-05-07 18:58:03 +0200314.. _TF-A Secure Partition Manager (FF-A): https://trustedfirmware-a.readthedocs.io/en/latest/components/secure-partition-manager.html
315.. _TF-A Secure Partition Manager (MM): https://trustedfirmware-a.readthedocs.io/en/latest/components/secure-partition-manager-mm.html
316.. _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
317.. _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
318.. _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
319.. _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