blob: cb8d3586e6bb8f1ac081406a396bdc0cee2679e7 [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
36 `Summary of build options`_ for more information on available build
37 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
102 BL33=tftf.bin make PLAT=<platform> fip
103
104Please refer to the `TF-A User guide`_ for further details.
105
106NS_BL1U and NS_BL2U test images
107```````````````````````````````
108
109``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`.
112
113In addition to updating the firmware, the FWU test images also embed some tests
114that exercise the `FWU state machine`_ implemented in the TF-A. They send valid
115and 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
161Putting it all together
162'''''''''''''''''''''''
163
164The FWU test images should be used in conjunction with the TFTF image, as the
165latter initiates the FWU process by corrupting the FIP image and resetting the
166target. Once the FWU process is complete, TFTF takes over again and checks that
167the firmware was successfully updated.
168
169To sum up, 3 images must be built out of the TF-A Tests repository in order to
170test the TF-A Firmware Update feature:
171
172- ``ns_bl1u.bin``
173- ``ns_bl2u.bin``
174- ``tftf.bin``
175
176Once that's done, they must be combined in the right way.
177
178- ``ns_bl1u.bin`` is a standalone image and does not require any further
179 processing.
180
181- ``ns_bl2u.bin`` must be injected into the ``FWU_FIP`` image. This might be
182 achieved by setting ``NS_BL2U=ns_bl2u.bin`` when building the ``FWU_FIP``
183 image out of the TF-A repository. Please refer to the section `Building FIP
184 images with support for Trusted Board Boot`_ in the TF-A User Guide.
185
186- ``tftf.bin`` must be injected in the standard FIP image, as explained
187 in section `TFTF test image`_.
188
189Additionally, on Juno platform, the FWU FIP must contain a ``SCP_BL2U`` image.
190This image can simply be a copy of the standard ``SCP_BL2`` image if no specific
191firmware update operations need to be carried on the SCP side.
192
193Finally, the backup FIP image must be created. This can simply be a copy of the
194standard FIP image, which means that the Firmware Update process will restore
195the original, uncorrupted FIP image.
196
197EL3 test payload
198````````````````
199
200``el3_payload.bin`` is a test image exercising the alternative `EL3 payload boot
201flow`_ in TF-A. Refer to the `EL3 test payload README file`_ for more details
202about its behaviour and how to build and run it.
203
204SPM test images
205```````````````
206
207This repository contains 3 Secure Partitions that exercise the `Secure Partition
208Manager`_ (SPM) in TF-A [#]_. Cactus-MM is designed to test the SPM
209implementation based on the `ARM Management Mode Interface`_ (MM), while Cactus
210and Ivy can test the SPM implementation based on the SPCI and SPRT draft
211specifications. Note that it isn't possible to use both communication mechanisms
212at once: If Cactus-MM is used Cactus and Ivy can't be used.
213
214They run in Secure-EL0 and perform the following tasks:
215
216- Test that TF-A has correctly setup the secure partition environment: They
217 should be allowed to perform cache maintenance operations, access floating
218 point registers, etc.
219
220- Test that TF-A accepts to change data access permissions and instruction
221 permissions on behalf of the Secure Partitions for memory regions the latter
222 owns.
223
224- Test communication with SPM through either MM, or both SPCI and SPRT.
225
226They are only supported on AArch64 FVP. They can be built independently of the
227other test images using the following command:
228
229::
230
231 make PLAT=fvp cactus ivy cactus_mm
232
233In the TF-A boot flow, the partitions replace the ``BL32`` image and should be
234injected in the FIP image. To test SPM-MM with Cactus-MM, it is enough to use
235``cactus_mm.bin`` as BL32 image. To test the SPM based on SPCI and SPRT, it is
236needed to use ``sp_tool`` to build a Secure Partition package that can be used
237as BL32 image.
238
239To run the full set of tests in the Secure Partitions, they should be used in
240conjunction with the TFTF image.
241
242For SPM-MM, build TF-A following the `TF-A SPM User Guide`_ and the following
243commands can be used to build the tests:
244
245::
246
247 # TF-A-Tests repository:
248
249 make PLAT=fvp TESTS=spm-mm tftf cactus_mm
250
251For SPM based on SPCI and SPRT, build TF-A following the `TF-A SPM User Guide`_
252and the following commands can be used to build the tests:
253
254::
255
256 # TF-A-Tests repository:
257
258 make PLAT=fvp TESTS=spm tftf cactus ivy
259
260 # TF-A repository:
261
262 make sptool
263
264 tools/sptool/sptool -o sp_package.bin \
265 -i path/to/cactus.bin:path/to/cactus.dtb \
266 -i path/to/ivy.bin:path/to/ivy.dtb
267
268Please refer to the `TF-A User guide`_ for further details.
269
270--------------
271
272.. [#] Therefore, the Trusted Board Boot feature must be enabled in TF-A for
273 the FWU test images to work. Please refer the `TF-A User guide`_ for
274 further details.
275
276.. [#] Therefore, the Secure Partition Manager must be enabled in TF-A for
277 any of the test Secure Partitions to work. Please refer to the `TF-A User
278 guide`_ for further details.
279
280--------------
281
282*Copyright (c) 2019, Arm Limited. All rights reserved.*
283
284.. _EL3 payload boot flow: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/about/docs/user-guide.rst#el3-payloads-alternative-boot-flow
285.. _TF-A User Guide: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/about/docs/user-guide.rst
286.. _TF-A SPM User Guide: https://trustedfirmware-a.readthedocs.io/en/latest/components/secure-partition-manager-design.html#building-tf-a-with-secure-partition-support
287.. _Firmware Update: FWU_
288.. _EL3 test payload README file: ../el3_payload/README
289.. _FWU: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/about/docs/firmware-update.rst
290.. _FWU state machine: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/about/docs/firmware-update.rst#fwu-state-machine
291.. _Summary of build options: user-guide.rst#summary-of-build-options
292.. _Building FIP images with support for Trusted Board Boot: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/about/docs/user-guide.rst#building-fip-images-with-support-for-trusted-board-boot
293.. _Secure partition Manager: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/about/docs/secure-partition-manager-design.rst
294.. _ARM Management Mode Interface: http://infocenter.arm.com/help/topic/com.arm.doc.den0060a/DEN0060A_ARM_MM_Interface_Specification.pdf