blob: 1b90f299b622ce2028405a3ee93cd8d57088be78 [file] [log] [blame]
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001ARM Trusted Firmware User Guide
2===============================
3
4
5.. section-numbering::
6 :suffix: .
7
8.. contents::
9
10This document describes how to build ARM Trusted Firmware (TF) and run it with a
11tested set of other software components using defined configurations on the Juno
12ARM development platform and ARM Fixed Virtual Platform (FVP) models. It is
13possible to use other software components, configurations and platforms but that
14is outside the scope of this document.
15
16This document assumes that the reader has previous experience running a fully
17bootable Linux software stack on Juno or FVP using the prebuilt binaries and
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +010018filesystems provided by `Linaro`_. Further information may be found in the
19`Linaro instructions`_. It also assumes that the user understands the role of
20the different software components required to boot a Linux system:
Douglas Raillardd7c21b72017-06-28 15:23:03 +010021
22- Specific firmware images required by the platform (e.g. SCP firmware on Juno)
23- Normal world bootloader (e.g. UEFI or U-Boot)
24- Device tree
25- Linux kernel image
26- Root filesystem
27
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +010028This document also assumes that the user is familiar with the `FVP models`_ and
Douglas Raillardd7c21b72017-06-28 15:23:03 +010029the different command line options available to launch the model.
30
31This document should be used in conjunction with the `Firmware Design`_.
32
33Host machine requirements
34-------------------------
35
36The minimum recommended machine specification for building the software and
37running the FVP models is a dual-core processor running at 2GHz with 12GB of
38RAM. For best performance, use a machine with a quad-core processor running at
392.6GHz with 16GB of RAM.
40
41The software has been tested on Ubuntu 14.04 LTS (64-bit). Packages used for
42building the software were installed from that distribution unless otherwise
43specified.
44
45The software has also been built on Windows 7 Enterprise SP1, using CMD.EXE,
David Cunadob2de0992017-06-29 12:01:33 +010046Cygwin, and Msys (MinGW) shells, using version 5.3.1 of the GNU toolchain.
Douglas Raillardd7c21b72017-06-28 15:23:03 +010047
48Tools
49-----
50
51Install the required packages to build Trusted Firmware with the following
52command:
53
54::
55
56 sudo apt-get install build-essential gcc make git libssl-dev
57
David Cunadob2de0992017-06-29 12:01:33 +010058ARM TF has been tested with `Linaro Release 17.04`_.
59
Douglas Raillardd7c21b72017-06-28 15:23:03 +010060Download and install the AArch32 or AArch64 little-endian GCC cross compiler.
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +010061The `Linaro Release Notes`_ documents which version of the compiler to use for a
62given Linaro Release. Also, these `Linaro instructions`_ provide further
63guidance and a script, which can be used to download Linaro deliverables
64automatically.
Douglas Raillardd7c21b72017-06-28 15:23:03 +010065
66Optionally, Trusted Firmware can be built using clang or ARM Compiler 6.
67See instructions below on how to switch the default compiler.
68
69In addition, the following optional packages and tools may be needed:
70
71- ``device-tree-compiler`` package if you need to rebuild the Flattened Device
72 Tree (FDT) source files (``.dts`` files) provided with this software.
73
74- For debugging, ARM `Development Studio 5 (DS-5)`_.
75
Antonio Nino Diazb5d68092017-05-23 11:49:22 +010076- To create and modify the diagram files included in the documentation, `Dia`_.
77 This tool can be found in most Linux distributions. Inkscape is needed to
78 generate the actual *.png files.
79
Douglas Raillardd7c21b72017-06-28 15:23:03 +010080Getting the Trusted Firmware source code
81----------------------------------------
82
83Download the Trusted Firmware source code from Github:
84
85::
86
87 git clone https://github.com/ARM-software/arm-trusted-firmware.git
88
89Building the Trusted Firmware
90-----------------------------
91
92- Before building Trusted Firmware, the environment variable ``CROSS_COMPILE``
93 must point to the Linaro cross compiler.
94
95 For AArch64:
96
97 ::
98
99 export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
100
101 For AArch32:
102
103 ::
104
105 export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-linux-gnueabihf-
106
107 It is possible to build Trusted Firmware using clang or ARM Compiler 6.
108 To do so ``CC`` needs to point to the clang or armclang binary. Only the
109 compiler is switched; the assembler and linker need to be provided by
110 the GNU toolchain, thus ``CROSS_COMPILE`` should be set as described above.
111
112 ARM Compiler 6 will be selected when the base name of the path assigned
113 to ``CC`` matches the string 'armclang'.
114
115 For AArch64 using ARM Compiler 6:
116
117 ::
118
119 export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
120 make CC=<path-to-armclang>/bin/armclang PLAT=<platform> all
121
122 Clang will be selected when the base name of the path assigned to ``CC``
123 contains the string 'clang'. This is to allow both clang and clang-X.Y
124 to work.
125
126 For AArch64 using clang:
127
128 ::
129
130 export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
131 make CC=<path-to-clang>/bin/clang PLAT=<platform> all
132
133- Change to the root directory of the Trusted Firmware source tree and build.
134
135 For AArch64:
136
137 ::
138
139 make PLAT=<platform> all
140
141 For AArch32:
142
143 ::
144
145 make PLAT=<platform> ARCH=aarch32 AARCH32_SP=sp_min all
146
147 Notes:
148
149 - If ``PLAT`` is not specified, ``fvp`` is assumed by default. See the
150 `Summary of build options`_ for more information on available build
151 options.
152
153 - (AArch32 only) Currently only ``PLAT=fvp`` is supported.
154
155 - (AArch32 only) ``AARCH32_SP`` is the AArch32 EL3 Runtime Software and it
156 corresponds to the BL32 image. A minimal ``AARCH32_SP``, sp\_min, is
157 provided by ARM Trusted Firmware to demonstrate how PSCI Library can
158 be integrated with an AArch32 EL3 Runtime Software. Some AArch32 EL3
159 Runtime Software may include other runtime services, for example
160 Trusted OS services. A guide to integrate PSCI library with AArch32
161 EL3 Runtime Software can be found `here`_.
162
163 - (AArch64 only) The TSP (Test Secure Payload), corresponding to the BL32
164 image, is not compiled in by default. Refer to the
165 `Building the Test Secure Payload`_ section below.
166
167 - By default this produces a release version of the build. To produce a
168 debug version instead, refer to the "Debugging options" section below.
169
170 - The build process creates products in a ``build`` directory tree, building
171 the objects and binaries for each boot loader stage in separate
172 sub-directories. The following boot loader binary files are created
173 from the corresponding ELF files:
174
175 - ``build/<platform>/<build-type>/bl1.bin``
176 - ``build/<platform>/<build-type>/bl2.bin``
177 - ``build/<platform>/<build-type>/bl31.bin`` (AArch64 only)
178 - ``build/<platform>/<build-type>/bl32.bin`` (mandatory for AArch32)
179
180 where ``<platform>`` is the name of the chosen platform and ``<build-type>``
181 is either ``debug`` or ``release``. The actual number of images might differ
182 depending on the platform.
183
184- Build products for a specific build variant can be removed using:
185
186 ::
187
188 make DEBUG=<D> PLAT=<platform> clean
189
190 ... where ``<D>`` is ``0`` or ``1``, as specified when building.
191
192 The build tree can be removed completely using:
193
194 ::
195
196 make realclean
197
198Summary of build options
199~~~~~~~~~~~~~~~~~~~~~~~~
200
201ARM Trusted Firmware build system supports the following build options. Unless
202mentioned otherwise, these options are expected to be specified at the build
203command line and are not to be modified in any component makefiles. Note that
204the build system doesn't track dependency for build options. Therefore, if any
205of the build options are changed from a previous build, a clean build must be
206performed.
207
208Common build options
209^^^^^^^^^^^^^^^^^^^^
210
211- ``AARCH32_SP`` : Choose the AArch32 Secure Payload component to be built as
212 as the BL32 image when ``ARCH=aarch32``. The value should be the path to the
213 directory containing the SP source, relative to the ``bl32/``; the directory
214 is expected to contain a makefile called ``<aarch32_sp-value>.mk``.
215
216- ``ARCH`` : Choose the target build architecture for ARM Trusted Firmware.
217 It can take either ``aarch64`` or ``aarch32`` as values. By default, it is
218 defined to ``aarch64``.
219
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100220- ``ARM_ARCH_MAJOR``: The major version of ARM Architecture to target when
221 compiling ARM Trusted Firmware. Its value must be numeric, and defaults to
Etienne Carriere1374fcb2017-11-08 13:48:40 +0100222 8 . See also, *ARMv8 Architecture Extensions* and
223 *ARMv7 Architecture Extensions* in `Firmware Design`_.
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100224
225- ``ARM_ARCH_MINOR``: The minor version of ARM Architecture to target when
226 compiling ARM Trusted Firmware. Its value must be a numeric, and defaults
227 to 0. See also, *ARMv8 Architecture Extensions* in `Firmware Design`_.
228
229- ``ARM_GIC_ARCH``: Choice of ARM GIC architecture version used by the ARM
230 Legacy GIC driver for implementing the platform GIC API. This API is used
231 by the interrupt management framework. Default is 2 (that is, version 2.0).
232 This build option is deprecated.
233
234- ``ARM_PLAT_MT``: This flag determines whether the ARM platform layer has to
Jeenu Viswambharan528d21b2016-11-15 13:53:57 +0000235 cater for the multi-threading ``MT`` bit when accessing MPIDR. When this flag
236 is set, the functions which deal with MPIDR assume that the ``MT`` bit in
237 MPIDR is set and access the bit-fields in MPIDR accordingly. Default value of
238 this flag is 0. Note that this option is not used on FVP platforms.
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100239
240- ``BL2``: This is an optional build option which specifies the path to BL2
241 image for the ``fip`` target. In this case, the BL2 in the ARM Trusted
242 Firmware will not be built.
243
244- ``BL2U``: This is an optional build option which specifies the path to
245 BL2U image. In this case, the BL2U in the ARM Trusted Firmware will not
246 be built.
247
248- ``BL31``: This is an optional build option which specifies the path to
249 BL31 image for the ``fip`` target. In this case, the BL31 in the ARM
250 Trusted Firmware will not be built.
251
252- ``BL31_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
253 file that contains the BL31 private key in PEM format. If ``SAVE_KEYS=1``,
254 this file name will be used to save the key.
255
256- ``BL32``: This is an optional build option which specifies the path to
257 BL32 image for the ``fip`` target. In this case, the BL32 in the ARM
258 Trusted Firmware will not be built.
259
Summer Qin80726782017-04-20 16:28:39 +0100260- ``BL32_EXTRA1``: This is an optional build option which specifies the path to
261 Trusted OS Extra1 image for the ``fip`` target.
262
263- ``BL32_EXTRA2``: This is an optional build option which specifies the path to
264 Trusted OS Extra2 image for the ``fip`` target.
265
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100266- ``BL32_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
267 file that contains the BL32 private key in PEM format. If ``SAVE_KEYS=1``,
268 this file name will be used to save the key.
269
270- ``BL33``: Path to BL33 image in the host file system. This is mandatory for
271 ``fip`` target in case the BL2 from ARM Trusted Firmware is used.
272
273- ``BL33_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
274 file that contains the BL33 private key in PEM format. If ``SAVE_KEYS=1``,
275 this file name will be used to save the key.
276
277- ``BUILD_MESSAGE_TIMESTAMP``: String used to identify the time and date of the
278 compilation of each build. It must be set to a C string (including quotes
279 where applicable). Defaults to a string that contains the time and date of
280 the compilation.
281
282- ``BUILD_STRING``: Input string for VERSION\_STRING, which allows the TF build
283 to be uniquely identified. Defaults to the current git commit id.
284
285- ``CFLAGS``: Extra user options appended on the compiler's command line in
286 addition to the options set by the build system.
287
288- ``COLD_BOOT_SINGLE_CPU``: This option indicates whether the platform may
289 release several CPUs out of reset. It can take either 0 (several CPUs may be
290 brought up) or 1 (only one CPU will ever be brought up during cold reset).
291 Default is 0. If the platform always brings up a single CPU, there is no
292 need to distinguish between primary and secondary CPUs and the boot path can
293 be optimised. The ``plat_is_my_cpu_primary()`` and
294 ``plat_secondary_cold_boot_setup()`` platform porting interfaces do not need
295 to be implemented in this case.
296
297- ``CRASH_REPORTING``: A non-zero value enables a console dump of processor
298 register state when an unexpected exception occurs during execution of
299 BL31. This option defaults to the value of ``DEBUG`` - i.e. by default
300 this is only enabled for a debug build of the firmware.
301
302- ``CREATE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
303 certificate generation tool to create new keys in case no valid keys are
304 present or specified. Allowed options are '0' or '1'. Default is '1'.
305
306- ``CTX_INCLUDE_AARCH32_REGS`` : Boolean option that, when set to 1, will cause
307 the AArch32 system registers to be included when saving and restoring the
308 CPU context. The option must be set to 0 for AArch64-only platforms (that
309 is on hardware that does not implement AArch32, or at least not at EL1 and
310 higher ELs). Default value is 1.
311
312- ``CTX_INCLUDE_FPREGS``: Boolean option that, when set to 1, will cause the FP
313 registers to be included when saving and restoring the CPU context. Default
314 is 0.
315
316- ``DEBUG``: Chooses between a debug and release build. It can take either 0
317 (release) or 1 (debug) as values. 0 is the default.
318
319- ``EL3_PAYLOAD_BASE``: This option enables booting an EL3 payload instead of
320 the normal boot flow. It must specify the entry point address of the EL3
321 payload. Please refer to the "Booting an EL3 payload" section for more
322 details.
323
Dimitris Papastamosfcedb692017-10-16 11:40:10 +0100324- ``ENABLE_AMU``: Boolean option to enable Activity Monitor Unit extensions.
325 Currently this option only applies for platforms that include a v8.2 processor
326 with AMU implemented. Default is 0.
327
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100328- ``ENABLE_ASSERTIONS``: This option controls whether or not calls to ``assert()``
329 are compiled out. For debug builds, this option defaults to 1, and calls to
330 ``assert()`` are left in place. For release builds, this option defaults to 0
331 and calls to ``assert()`` function are compiled out. This option can be set
332 independently of ``DEBUG``. It can also be used to hide any auxiliary code
333 that is only required for the assertion and does not fit in the assertion
334 itself.
335
336- ``ENABLE_PMF``: Boolean option to enable support for optional Performance
337 Measurement Framework(PMF). Default is 0.
338
339- ``ENABLE_PSCI_STAT``: Boolean option to enable support for optional PSCI
340 functions ``PSCI_STAT_RESIDENCY`` and ``PSCI_STAT_COUNT``. Default is 0.
341 In the absence of an alternate stat collection backend, ``ENABLE_PMF`` must
342 be enabled. If ``ENABLE_PMF`` is set, the residency statistics are tracked in
343 software.
344
345- ``ENABLE_RUNTIME_INSTRUMENTATION``: Boolean option to enable runtime
346 instrumentation which injects timestamp collection points into
347 Trusted Firmware to allow runtime performance to be measured.
348 Currently, only PSCI is instrumented. Enabling this option enables
349 the ``ENABLE_PMF`` build option as well. Default is 0.
350
Jeenu Viswambharand73dcf32017-07-19 13:52:12 +0100351- ``ENABLE_SPE_FOR_LOWER_ELS`` : Boolean option to enable Statistical Profiling
Dimitris Papastamos9da09cd2017-10-13 15:07:45 +0100352 extensions. This is an optional architectural feature for AArch64.
353 The default is 1 but is automatically disabled when the target architecture
354 is AArch32.
Jeenu Viswambharand73dcf32017-07-19 13:52:12 +0100355
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100356- ``ENABLE_STACK_PROTECTOR``: String option to enable the stack protection
357 checks in GCC. Allowed values are "all", "strong" and "0" (default).
358 "strong" is the recommended stack protection level if this feature is
359 desired. 0 disables the stack protection. For all values other than 0, the
360 ``plat_get_stack_protector_canary()`` platform hook needs to be implemented.
361 The value is passed as the last component of the option
362 ``-fstack-protector-$ENABLE_STACK_PROTECTOR``.
363
364- ``ERROR_DEPRECATED``: This option decides whether to treat the usage of
365 deprecated platform APIs, helper functions or drivers within Trusted
366 Firmware as error. It can take the value 1 (flag the use of deprecated
367 APIs as error) or 0. The default is 0.
368
Jeenu Viswambharan10a67272017-09-22 08:32:10 +0100369- ``EL3_EXCEPTION_HANDLING``: When set to ``1``, enable handling of exceptions
370 targeted at EL3. When set ``0`` (default), no exceptions are expected or
371 handled at EL3, and a panic will result. This is supported only for AArch64
372 builds.
373
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100374- ``FIP_NAME``: This is an optional build option which specifies the FIP
375 filename for the ``fip`` target. Default is ``fip.bin``.
376
377- ``FWU_FIP_NAME``: This is an optional build option which specifies the FWU
378 FIP filename for the ``fwu_fip`` target. Default is ``fwu_fip.bin``.
379
380- ``GENERATE_COT``: Boolean flag used to build and execute the ``cert_create``
381 tool to create certificates as per the Chain of Trust described in
382 `Trusted Board Boot`_. The build system then calls ``fiptool`` to
383 include the certificates in the FIP and FWU\_FIP. Default value is '0'.
384
385 Specify both ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=1`` to include support
386 for the Trusted Board Boot feature in the BL1 and BL2 images, to generate
387 the corresponding certificates, and to include those certificates in the
388 FIP and FWU\_FIP.
389
390 Note that if ``TRUSTED_BOARD_BOOT=0`` and ``GENERATE_COT=1``, the BL1 and BL2
391 images will not include support for Trusted Board Boot. The FIP will still
392 include the corresponding certificates. This FIP can be used to verify the
393 Chain of Trust on the host machine through other mechanisms.
394
395 Note that if ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=0``, the BL1 and BL2
396 images will include support for Trusted Board Boot, but the FIP and FWU\_FIP
397 will not include the corresponding certificates, causing a boot failure.
398
Jeenu Viswambharanc06f05c2017-09-22 08:32:09 +0100399- ``GICV2_G0_FOR_EL3``: Unlike GICv3, the GICv2 architecture doesn't have
400 inherent support for specific EL3 type interrupts. Setting this build option
401 to ``1`` assumes GICv2 *Group 0* interrupts are expected to target EL3, both
402 by `platform abstraction layer`__ and `Interrupt Management Framework`__.
403 This allows GICv2 platforms to enable features requiring EL3 interrupt type.
404 This also means that all GICv2 Group 0 interrupts are delivered to EL3, and
405 the Secure Payload interrupts needs to be synchronously handed over to Secure
406 EL1 for handling. The default value of this option is ``0``, which means the
407 Group 0 interrupts are assumed to be handled by Secure EL1.
408
409 .. __: `platform-interrupt-controller-API.rst`
410 .. __: `interrupt-framework-design.rst`
411
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100412- ``HANDLE_EA_EL3_FIRST``: When defined External Aborts and SError Interrupts
413 will be always trapped in EL3 i.e. in BL31 at runtime.
414
415- ``HW_ASSISTED_COHERENCY``: On most ARM systems to-date, platform-specific
416 software operations are required for CPUs to enter and exit coherency.
417 However, there exists newer systems where CPUs' entry to and exit from
418 coherency is managed in hardware. Such systems require software to only
419 initiate the operations, and the rest is managed in hardware, minimizing
420 active software management. In such systems, this boolean option enables ARM
421 Trusted Firmware to carry out build and run-time optimizations during boot
422 and power management operations. This option defaults to 0 and if it is
423 enabled, then it implies ``WARMBOOT_ENABLE_DCACHE_EARLY`` is also enabled.
424
425- ``JUNO_AARCH32_EL3_RUNTIME``: This build flag enables you to execute EL3
426 runtime software in AArch32 mode, which is required to run AArch32 on Juno.
427 By default this flag is set to '0'. Enabling this flag builds BL1 and BL2 in
428 AArch64 and facilitates the loading of ``SP_MIN`` and BL33 as AArch32 executable
429 images.
430
Soby Mathew13b16052017-08-31 11:49:32 +0100431- ``KEY_ALG``: This build flag enables the user to select the algorithm to be
432 used for generating the PKCS keys and subsequent signing of the certificate.
Qixiang Xu1a1f2912017-11-09 13:56:29 +0800433 It accepts 3 values viz. ``rsa``, ``rsa_1_5``, ``ecdsa``. The ``rsa_1_5`` is
Soby Mathew2fd70f62017-08-31 11:50:29 +0100434 the legacy PKCS#1 RSA 1.5 algorithm which is not TBBR compliant and is
435 retained only for compatibility. The default value of this flag is ``rsa``
436 which is the TBBR compliant PKCS#1 RSA 2.1 scheme.
Soby Mathew13b16052017-08-31 11:49:32 +0100437
Qixiang Xu1a1f2912017-11-09 13:56:29 +0800438- ``HASH_ALG``: This build flag enables the user to select the secure hash
439 algorithm. It accepts 3 values viz. ``sha256``, ``sha384``, ``sha512``.
440 The default value of this flag is ``sha256``.
441
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100442- ``LDFLAGS``: Extra user options appended to the linkers' command line in
443 addition to the one set by the build system.
444
445- ``LOAD_IMAGE_V2``: Boolean option to enable support for new version (v2) of
446 image loading, which provides more flexibility and scalability around what
447 images are loaded and executed during boot. Default is 0.
448 Note: ``TRUSTED_BOARD_BOOT`` is currently only supported for AArch64 when
449 ``LOAD_IMAGE_V2`` is enabled.
450
451- ``LOG_LEVEL``: Chooses the log level, which controls the amount of console log
452 output compiled into the build. This should be one of the following:
453
454 ::
455
456 0 (LOG_LEVEL_NONE)
457 10 (LOG_LEVEL_NOTICE)
458 20 (LOG_LEVEL_ERROR)
459 30 (LOG_LEVEL_WARNING)
460 40 (LOG_LEVEL_INFO)
461 50 (LOG_LEVEL_VERBOSE)
462
463 All log output up to and including the log level is compiled into the build.
464 The default value is 40 in debug builds and 20 in release builds.
465
466- ``NON_TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
467 specifies the file that contains the Non-Trusted World private key in PEM
468 format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
469
470- ``NS_BL2U``: Path to NS\_BL2U image in the host file system. This image is
471 optional. It is only needed if the platform makefile specifies that it
472 is required in order to build the ``fwu_fip`` target.
473
474- ``NS_TIMER_SWITCH``: Enable save and restore for non-secure timer register
475 contents upon world switch. It can take either 0 (don't save and restore) or
476 1 (do save and restore). 0 is the default. An SPD may set this to 1 if it
477 wants the timer registers to be saved and restored.
478
479- ``PL011_GENERIC_UART``: Boolean option to indicate the PL011 driver that
480 the underlying hardware is not a full PL011 UART but a minimally compliant
481 generic UART, which is a subset of the PL011. The driver will not access
482 any register that is not part of the SBSA generic UART specification.
483 Default value is 0 (a full PL011 compliant UART is present).
484
485- ``PLAT``: Choose a platform to build ARM Trusted Firmware for. The chosen
486 platform name must be subdirectory of any depth under ``plat/``, and must
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +0100487 contain a platform makefile named ``platform.mk``. For example to build ARM
488 Trusted Firmware for ARM Juno board select PLAT=juno.
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100489
490- ``PRELOADED_BL33_BASE``: This option enables booting a preloaded BL33 image
491 instead of the normal boot flow. When defined, it must specify the entry
492 point address for the preloaded BL33 image. This option is incompatible with
493 ``EL3_PAYLOAD_BASE``. If both are defined, ``EL3_PAYLOAD_BASE`` has priority
494 over ``PRELOADED_BL33_BASE``.
495
496- ``PROGRAMMABLE_RESET_ADDRESS``: This option indicates whether the reset
497 vector address can be programmed or is fixed on the platform. It can take
498 either 0 (fixed) or 1 (programmable). Default is 0. If the platform has a
499 programmable reset address, it is expected that a CPU will start executing
500 code directly at the right address, both on a cold and warm reset. In this
501 case, there is no need to identify the entrypoint on boot and the boot path
502 can be optimised. The ``plat_get_my_entrypoint()`` platform porting interface
503 does not need to be implemented in this case.
504
505- ``PSCI_EXTENDED_STATE_ID``: As per PSCI1.0 Specification, there are 2 formats
506 possible for the PSCI power-state parameter viz original and extended
507 State-ID formats. This flag if set to 1, configures the generic PSCI layer
508 to use the extended format. The default value of this flag is 0, which
509 means by default the original power-state format is used by the PSCI
510 implementation. This flag should be specified by the platform makefile
511 and it governs the return value of PSCI\_FEATURES API for CPU\_SUSPEND
512 smc function id. When this option is enabled on ARM platforms, the
513 option ``ARM_RECOM_STATE_ID_ENC`` needs to be set to 1 as well.
514
515- ``RESET_TO_BL31``: Enable BL31 entrypoint as the CPU reset vector instead
516 of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
517 entrypoint) or 1 (CPU reset to BL31 entrypoint).
518 The default value is 0.
519
520- ``RESET_TO_SP_MIN``: SP\_MIN is the minimal AArch32 Secure Payload provided in
521 ARM Trusted Firmware. This flag configures SP\_MIN entrypoint as the CPU
522 reset vector instead of the BL1 entrypoint. It can take the value 0 (CPU
523 reset to BL1 entrypoint) or 1 (CPU reset to SP\_MIN entrypoint). The default
524 value is 0.
525
526- ``ROT_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
527 file that contains the ROT private key in PEM format. If ``SAVE_KEYS=1``, this
528 file name will be used to save the key.
529
530- ``SAVE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
531 certificate generation tool to save the keys used to establish the Chain of
532 Trust. Allowed options are '0' or '1'. Default is '0' (do not save).
533
534- ``SCP_BL2``: Path to SCP\_BL2 image in the host file system. This image is optional.
535 If a SCP\_BL2 image is present then this option must be passed for the ``fip``
536 target.
537
538- ``SCP_BL2_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
539 file that contains the SCP\_BL2 private key in PEM format. If ``SAVE_KEYS=1``,
540 this file name will be used to save the key.
541
542- ``SCP_BL2U``: Path to SCP\_BL2U image in the host file system. This image is
543 optional. It is only needed if the platform makefile specifies that it
544 is required in order to build the ``fwu_fip`` target.
545
Jeenu Viswambharan04e3a7f2017-10-16 08:43:14 +0100546- ``SDEI_SUPPORT``: Setting this to ``1`` enables support for Software
547 Delegated Exception Interface to BL31 image. This defaults to ``0``.
548
549 When set to ``1``, the build option ``EL3_EXCEPTION_HANDLING`` must also be
550 set to ``1``.
551
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100552- ``SEPARATE_CODE_AND_RODATA``: Whether code and read-only data should be
553 isolated on separate memory pages. This is a trade-off between security and
554 memory usage. See "Isolating code and read-only data on separate memory
555 pages" section in `Firmware Design`_. This flag is disabled by default and
556 affects all BL images.
557
558- ``SPD``: Choose a Secure Payload Dispatcher component to be built into the
559 Trusted Firmware. This build option is only valid if ``ARCH=aarch64``. The
560 value should be the path to the directory containing the SPD source,
561 relative to ``services/spd/``; the directory is expected to
562 contain a makefile called ``<spd-value>.mk``.
563
564- ``SPIN_ON_BL1_EXIT``: This option introduces an infinite loop in BL1. It can
565 take either 0 (no loop) or 1 (add a loop). 0 is the default. This loop stops
566 execution in BL1 just before handing over to BL31. At this point, all
567 firmware images have been loaded in memory, and the MMU and caches are
568 turned off. Refer to the "Debugging options" section for more details.
569
Etienne Carrieredc0fea72017-08-09 15:48:53 +0200570- ``SP_MIN_WITH_SECURE_FIQ``: Boolean flag to indicate the SP_MIN handles
571 secure interrupts (caught through the FIQ line). Platforms can enable
572 this directive if they need to handle such interruption. When enabled,
573 the FIQ are handled in monitor mode and non secure world is not allowed
574 to mask these events. Platforms that enable FIQ handling in SP_MIN shall
575 implement the api ``sp_min_plat_fiq_handler()``. The default value is 0.
576
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100577- ``TRUSTED_BOARD_BOOT``: Boolean flag to include support for the Trusted Board
578 Boot feature. When set to '1', BL1 and BL2 images include support to load
579 and verify the certificates and images in a FIP, and BL1 includes support
580 for the Firmware Update. The default value is '0'. Generation and inclusion
581 of certificates in the FIP and FWU\_FIP depends upon the value of the
582 ``GENERATE_COT`` option.
583
584 Note: This option depends on ``CREATE_KEYS`` to be enabled. If the keys
585 already exist in disk, they will be overwritten without further notice.
586
587- ``TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
588 specifies the file that contains the Trusted World private key in PEM
589 format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
590
591- ``TSP_INIT_ASYNC``: Choose BL32 initialization method as asynchronous or
592 synchronous, (see "Initializing a BL32 Image" section in
593 `Firmware Design`_). It can take the value 0 (BL32 is initialized using
594 synchronous method) or 1 (BL32 is initialized using asynchronous method).
595 Default is 0.
596
597- ``TSP_NS_INTR_ASYNC_PREEMPT``: A non zero value enables the interrupt
598 routing model which routes non-secure interrupts asynchronously from TSP
599 to EL3 causing immediate preemption of TSP. The EL3 is responsible
600 for saving and restoring the TSP context in this routing model. The
601 default routing model (when the value is 0) is to route non-secure
602 interrupts to TSP allowing it to save its context and hand over
603 synchronously to EL3 via an SMC.
604
605- ``USE_COHERENT_MEM``: This flag determines whether to include the coherent
606 memory region in the BL memory map or not (see "Use of Coherent memory in
607 Trusted Firmware" section in `Firmware Design`_). It can take the value 1
608 (Coherent memory region is included) or 0 (Coherent memory region is
609 excluded). Default is 1.
610
611- ``V``: Verbose build. If assigned anything other than 0, the build commands
612 are printed. Default is 0.
613
614- ``VERSION_STRING``: String used in the log output for each TF image. Defaults
615 to a string formed by concatenating the version number, build type and build
616 string.
617
618- ``WARMBOOT_ENABLE_DCACHE_EARLY`` : Boolean option to enable D-cache early on
619 the CPU after warm boot. This is applicable for platforms which do not
620 require interconnect programming to enable cache coherency (eg: single
621 cluster platforms). If this option is enabled, then warm boot path
622 enables D-caches immediately after enabling MMU. This option defaults to 0.
623
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100624ARM development platform specific build options
625^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
626
627- ``ARM_BL31_IN_DRAM``: Boolean option to select loading of BL31 in TZC secured
628 DRAM. By default, BL31 is in the secure SRAM. Set this flag to 1 to load
629 BL31 in TZC secured DRAM. If TSP is present, then setting this option also
630 sets the TSP location to DRAM and ignores the ``ARM_TSP_RAM_LOCATION`` build
631 flag.
632
633- ``ARM_BOARD_OPTIMISE_MEM``: Boolean option to enable or disable optimisation
634 of the memory reserved for each image. This affects the maximum size of each
635 BL image as well as the number of allocated memory regions and translation
636 tables. By default this flag is 0, which means it uses the default
637 unoptimised values for these macros. ARM development platforms that wish to
638 optimise memory usage need to set this flag to 1 and must override the
639 related macros.
640
641- ``ARM_CONFIG_CNTACR``: boolean option to unlock access to the ``CNTBase<N>``
642 frame registers by setting the ``CNTCTLBase.CNTACR<N>`` register bits. The
643 frame number ``<N>`` is defined by ``PLAT_ARM_NSTIMER_FRAME_ID``, which should
644 match the frame used by the Non-Secure image (normally the Linux kernel).
645 Default is true (access to the frame is allowed).
646
647- ``ARM_DISABLE_TRUSTED_WDOG``: boolean option to disable the Trusted Watchdog.
648 By default, ARM platforms use a watchdog to trigger a system reset in case
649 an error is encountered during the boot process (for example, when an image
650 could not be loaded or authenticated). The watchdog is enabled in the early
651 platform setup hook at BL1 and disabled in the BL1 prepare exit hook. The
652 Trusted Watchdog may be disabled at build time for testing or development
653 purposes.
654
655- ``ARM_RECOM_STATE_ID_ENC``: The PSCI1.0 specification recommends an encoding
656 for the construction of composite state-ID in the power-state parameter.
657 The existing PSCI clients currently do not support this encoding of
658 State-ID yet. Hence this flag is used to configure whether to use the
659 recommended State-ID encoding or not. The default value of this flag is 0,
660 in which case the platform is configured to expect NULL in the State-ID
661 field of power-state parameter.
662
663- ``ARM_ROTPK_LOCATION``: used when ``TRUSTED_BOARD_BOOT=1``. It specifies the
664 location of the ROTPK hash returned by the function ``plat_get_rotpk_info()``
665 for ARM platforms. Depending on the selected option, the proper private key
666 must be specified using the ``ROT_KEY`` option when building the Trusted
667 Firmware. This private key will be used by the certificate generation tool
668 to sign the BL2 and Trusted Key certificates. Available options for
669 ``ARM_ROTPK_LOCATION`` are:
670
671 - ``regs`` : return the ROTPK hash stored in the Trusted root-key storage
672 registers. The private key corresponding to this ROTPK hash is not
673 currently available.
674 - ``devel_rsa`` : return a development public key hash embedded in the BL1
675 and BL2 binaries. This hash has been obtained from the RSA public key
676 ``arm_rotpk_rsa.der``, located in ``plat/arm/board/common/rotpk``. To use
677 this option, ``arm_rotprivk_rsa.pem`` must be specified as ``ROT_KEY`` when
678 creating the certificates.
Qixiang Xu1c2aef12017-08-24 15:12:20 +0800679 - ``devel_ecdsa`` : return a development public key hash embedded in the BL1
680 and BL2 binaries. This hash has been obtained from the ECDSA public key
681 ``arm_rotpk_ecdsa.der``, located in ``plat/arm/board/common/rotpk``. To use
682 this option, ``arm_rotprivk_ecdsa.pem`` must be specified as ``ROT_KEY``
683 when creating the certificates.
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100684
685- ``ARM_TSP_RAM_LOCATION``: location of the TSP binary. Options:
686
Qixiang Xuc7b12c52017-10-13 09:04:12 +0800687 - ``tsram`` : Trusted SRAM (default option when TBB is not enabled)
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100688 - ``tdram`` : Trusted DRAM (if available)
Qixiang Xuc7b12c52017-10-13 09:04:12 +0800689 - ``dram`` : Secure region in DRAM (default option when TBB is enabled,
690 configured by the TrustZone controller)
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100691
692- ``ARM_XLAT_TABLES_LIB_V1``: boolean option to compile the Trusted Firmware
693 with version 1 of the translation tables library instead of version 2. It is
694 set to 0 by default, which selects version 2.
695
696- ``ARM_CRYPTOCELL_INTEG`` : bool option to enable Trusted Firmware to invoke
697 ARM® TrustZone® CryptoCell functionality for Trusted Board Boot on capable
698 ARM platforms. If this option is specified, then the path to the CryptoCell
699 SBROM library must be specified via ``CCSBROM_LIB_PATH`` flag.
700
701For a better understanding of these options, the ARM development platform memory
702map is explained in the `Firmware Design`_.
703
704ARM CSS platform specific build options
705^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
706
707- ``CSS_DETECT_PRE_1_7_0_SCP``: Boolean flag to detect SCP version
708 incompatibility. Version 1.7.0 of the SCP firmware made a non-backwards
709 compatible change to the MTL protocol, used for AP/SCP communication.
710 Trusted Firmware no longer supports earlier SCP versions. If this option is
711 set to 1 then Trusted Firmware will detect if an earlier version is in use.
712 Default is 1.
713
714- ``CSS_LOAD_SCP_IMAGES``: Boolean flag, which when set, adds SCP\_BL2 and
715 SCP\_BL2U to the FIP and FWU\_FIP respectively, and enables them to be loaded
716 during boot. Default is 1.
717
Soby Mathew1ced6b82017-06-12 12:37:10 +0100718- ``CSS_USE_SCMI_SDS_DRIVER``: Boolean flag which selects SCMI/SDS drivers
719 instead of SCPI/BOM driver for communicating with the SCP during power
720 management operations and for SCP RAM Firmware transfer. If this option
721 is set to 1, then SCMI/SDS drivers will be used. Default is 0.
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100722
723ARM FVP platform specific build options
724^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
725
726- ``FVP_CLUSTER_COUNT`` : Configures the cluster count to be used to
727 build the topology tree within Trusted Firmware. By default the
728 Trusted Firmware is configured for dual cluster topology and this option
729 can be used to override the default value.
730
731- ``FVP_INTERCONNECT_DRIVER``: Selects the interconnect driver to be built. The
732 default interconnect driver depends on the value of ``FVP_CLUSTER_COUNT`` as
733 explained in the options below:
734
735 - ``FVP_CCI`` : The CCI driver is selected. This is the default
736 if 0 < ``FVP_CLUSTER_COUNT`` <= 2.
737 - ``FVP_CCN`` : The CCN driver is selected. This is the default
738 if ``FVP_CLUSTER_COUNT`` > 2.
739
Jeenu Viswambharan528d21b2016-11-15 13:53:57 +0000740- ``FVP_MAX_PE_PER_CPU``: Sets the maximum number of PEs implemented on any CPU
741 in the system. This option defaults to 1. Note that the build option
742 ``ARM_PLAT_MT`` doesn't have any effect on FVP platforms.
743
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100744- ``FVP_USE_GIC_DRIVER`` : Selects the GIC driver to be built. Options:
745
746 - ``FVP_GIC600`` : The GIC600 implementation of GICv3 is selected
747 - ``FVP_GICV2`` : The GICv2 only driver is selected
748 - ``FVP_GICV3`` : The GICv3 only driver is selected (default option)
749 - ``FVP_GICV3_LEGACY``: The Legacy GICv3 driver is selected (deprecated)
750 Note: If Trusted Firmware is compiled with this option on FVPs with
751 GICv3 hardware, then it configures the hardware to run in GICv2
752 emulation mode
753
754- ``FVP_USE_SP804_TIMER`` : Use the SP804 timer instead of the Generic Timer
755 for functions that wait for an arbitrary time length (udelay and mdelay).
756 The default value is 0.
757
758Debugging options
759~~~~~~~~~~~~~~~~~
760
761To compile a debug version and make the build more verbose use
762
763::
764
765 make PLAT=<platform> DEBUG=1 V=1 all
766
767AArch64 GCC uses DWARF version 4 debugging symbols by default. Some tools (for
768example DS-5) might not support this and may need an older version of DWARF
769symbols to be emitted by GCC. This can be achieved by using the
770``-gdwarf-<version>`` flag, with the version being set to 2 or 3. Setting the
771version to 2 is recommended for DS-5 versions older than 5.16.
772
773When debugging logic problems it might also be useful to disable all compiler
774optimizations by using ``-O0``.
775
776NOTE: Using ``-O0`` could cause output images to be larger and base addresses
777might need to be recalculated (see the **Memory layout on ARM development
778platforms** section in the `Firmware Design`_).
779
780Extra debug options can be passed to the build system by setting ``CFLAGS`` or
781``LDFLAGS``:
782
783.. code:: makefile
784
785 CFLAGS='-O0 -gdwarf-2' \
786 make PLAT=<platform> DEBUG=1 V=1 all
787
788Note that using ``-Wl,`` style compilation driver options in ``CFLAGS`` will be
789ignored as the linker is called directly.
790
791It is also possible to introduce an infinite loop to help in debugging the
792post-BL2 phase of the Trusted Firmware. This can be done by rebuilding BL1 with
Douglas Raillard30d7b362017-06-28 16:14:55 +0100793the ``SPIN_ON_BL1_EXIT=1`` build flag. Refer to the `Summary of build options`_
Douglas Raillardd7c21b72017-06-28 15:23:03 +0100794section. In this case, the developer may take control of the target using a
795debugger when indicated by the console output. When using DS-5, the following
796commands can be used:
797
798::
799
800 # Stop target execution
801 interrupt
802
803 #
804 # Prepare your debugging environment, e.g. set breakpoints
805 #
806
807 # Jump over the debug loop
808 set var $AARCH64::$Core::$PC = $AARCH64::$Core::$PC + 4
809
810 # Resume execution
811 continue
812
813Building the Test Secure Payload
814~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
815
816The TSP is coupled with a companion runtime service in the BL31 firmware,
817called the TSPD. Therefore, if you intend to use the TSP, the BL31 image
818must be recompiled as well. For more information on SPs and SPDs, see the
819`Secure-EL1 Payloads and Dispatchers`_ section in the `Firmware Design`_.
820
821First clean the Trusted Firmware build directory to get rid of any previous
822BL31 binary. Then to build the TSP image use:
823
824::
825
826 make PLAT=<platform> SPD=tspd all
827
828An additional boot loader binary file is created in the ``build`` directory:
829
830::
831
832 build/<platform>/<build-type>/bl32.bin
833
834Checking source code style
835~~~~~~~~~~~~~~~~~~~~~~~~~~
836
837When making changes to the source for submission to the project, the source
838must be in compliance with the Linux style guide, and to assist with this check
839the project Makefile contains two targets, which both utilise the
840``checkpatch.pl`` script that ships with the Linux source tree.
841
842To check the entire source tree, you must first download a copy of
843``checkpatch.pl`` (or the full Linux source), set the ``CHECKPATCH`` environment
844variable to point to the script and build the target checkcodebase:
845
846::
847
848 make CHECKPATCH=<path-to-linux>/linux/scripts/checkpatch.pl checkcodebase
849
850To just check the style on the files that differ between your local branch and
851the remote master, use:
852
853::
854
855 make CHECKPATCH=<path-to-linux>/linux/scripts/checkpatch.pl checkpatch
856
857If you wish to check your patch against something other than the remote master,
858set the ``BASE_COMMIT`` variable to your desired branch. By default, ``BASE_COMMIT``
859is set to ``origin/master``.
860
861Building and using the FIP tool
862~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
863
864Firmware Image Package (FIP) is a packaging format used by the Trusted Firmware
865project to package firmware images in a single binary. The number and type of
866images that should be packed in a FIP is platform specific and may include TF
867images and other firmware images required by the platform. For example, most
868platforms require a BL33 image which corresponds to the normal world bootloader
869(e.g. UEFI or U-Boot).
870
871The TF build system provides the make target ``fip`` to create a FIP file for the
872specified platform using the FIP creation tool included in the TF project.
873Examples below show how to build a FIP file for FVP, packaging TF images and a
874BL33 image.
875
876For AArch64:
877
878::
879
880 make PLAT=fvp BL33=<path/to/bl33.bin> fip
881
882For AArch32:
883
884::
885
886 make PLAT=fvp ARCH=aarch32 AARCH32_SP=sp_min BL33=<path/to/bl33.bin> fip
887
888Note that AArch32 support for Normal world boot loader (BL33), like U-boot or
889UEFI, on FVP is not available upstream. Hence custom solutions are required to
890allow Linux boot on FVP. These instructions assume such a custom boot loader
891(BL33) is available.
892
893The resulting FIP may be found in:
894
895::
896
897 build/fvp/<build-type>/fip.bin
898
899For advanced operations on FIP files, it is also possible to independently build
900the tool and create or modify FIPs using this tool. To do this, follow these
901steps:
902
903It is recommended to remove old artifacts before building the tool:
904
905::
906
907 make -C tools/fiptool clean
908
909Build the tool:
910
911::
912
913 make [DEBUG=1] [V=1] fiptool
914
915The tool binary can be located in:
916
917::
918
919 ./tools/fiptool/fiptool
920
921Invoking the tool with ``--help`` will print a help message with all available
922options.
923
924Example 1: create a new Firmware package ``fip.bin`` that contains BL2 and BL31:
925
926::
927
928 ./tools/fiptool/fiptool create \
929 --tb-fw build/<platform>/<build-type>/bl2.bin \
930 --soc-fw build/<platform>/<build-type>/bl31.bin \
931 fip.bin
932
933Example 2: view the contents of an existing Firmware package:
934
935::
936
937 ./tools/fiptool/fiptool info <path-to>/fip.bin
938
939Example 3: update the entries of an existing Firmware package:
940
941::
942
943 # Change the BL2 from Debug to Release version
944 ./tools/fiptool/fiptool update \
945 --tb-fw build/<platform>/release/bl2.bin \
946 build/<platform>/debug/fip.bin
947
948Example 4: unpack all entries from an existing Firmware package:
949
950::
951
952 # Images will be unpacked to the working directory
953 ./tools/fiptool/fiptool unpack <path-to>/fip.bin
954
955Example 5: remove an entry from an existing Firmware package:
956
957::
958
959 ./tools/fiptool/fiptool remove \
960 --tb-fw build/<platform>/debug/fip.bin
961
962Note that if the destination FIP file exists, the create, update and
963remove operations will automatically overwrite it.
964
965The unpack operation will fail if the images already exist at the
966destination. In that case, use -f or --force to continue.
967
968More information about FIP can be found in the `Firmware Design`_ document.
969
970Migrating from fip\_create to fiptool
971^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
972
973The previous version of fiptool was called fip\_create. A compatibility script
974that emulates the basic functionality of the previous fip\_create is provided.
975However, users are strongly encouraged to migrate to fiptool.
976
977- To create a new FIP file, replace "fip\_create" with "fiptool create".
978- To update a FIP file, replace "fip\_create" with "fiptool update".
979- To dump the contents of a FIP file, replace "fip\_create --dump"
980 with "fiptool info".
981
982Building FIP images with support for Trusted Board Boot
983~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
984
985Trusted Board Boot primarily consists of the following two features:
986
987- Image Authentication, described in `Trusted Board Boot`_, and
988- Firmware Update, described in `Firmware Update`_
989
990The following steps should be followed to build FIP and (optionally) FWU\_FIP
991images with support for these features:
992
993#. Fulfill the dependencies of the ``mbedtls`` cryptographic and image parser
994 modules by checking out a recent version of the `mbed TLS Repository`_. It
995 is important to use a version that is compatible with TF and fixes any
996 known security vulnerabilities. See `mbed TLS Security Center`_ for more
997 information. The latest version of TF is tested with tag ``mbedtls-2.4.2``.
998
999 The ``drivers/auth/mbedtls/mbedtls_*.mk`` files contain the list of mbed TLS
1000 source files the modules depend upon.
1001 ``include/drivers/auth/mbedtls/mbedtls_config.h`` contains the configuration
1002 options required to build the mbed TLS sources.
1003
1004 Note that the mbed TLS library is licensed under the Apache version 2.0
1005 license. Using mbed TLS source code will affect the licensing of
1006 Trusted Firmware binaries that are built using this library.
1007
1008#. To build the FIP image, ensure the following command line variables are set
1009 while invoking ``make`` to build Trusted Firmware:
1010
1011 - ``MBEDTLS_DIR=<path of the directory containing mbed TLS sources>``
1012 - ``TRUSTED_BOARD_BOOT=1``
1013 - ``GENERATE_COT=1``
1014
1015 In the case of ARM platforms, the location of the ROTPK hash must also be
1016 specified at build time. Two locations are currently supported (see
1017 ``ARM_ROTPK_LOCATION`` build option):
1018
1019 - ``ARM_ROTPK_LOCATION=regs``: the ROTPK hash is obtained from the Trusted
1020 root-key storage registers present in the platform. On Juno, this
1021 registers are read-only. On FVP Base and Cortex models, the registers
1022 are read-only, but the value can be specified using the command line
1023 option ``bp.trusted_key_storage.public_key`` when launching the model.
1024 On both Juno and FVP models, the default value corresponds to an
1025 ECDSA-SECP256R1 public key hash, whose private part is not currently
1026 available.
1027
1028 - ``ARM_ROTPK_LOCATION=devel_rsa``: use the ROTPK hash that is hardcoded
1029 in the ARM platform port. The private/public RSA key pair may be
1030 found in ``plat/arm/board/common/rotpk``.
1031
Qixiang Xu1c2aef12017-08-24 15:12:20 +08001032 - ``ARM_ROTPK_LOCATION=devel_ecdsa``: use the ROTPK hash that is hardcoded
1033 in the ARM platform port. The private/public ECDSA key pair may be
1034 found in ``plat/arm/board/common/rotpk``.
1035
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001036 Example of command line using RSA development keys:
1037
1038 ::
1039
1040 MBEDTLS_DIR=<path of the directory containing mbed TLS sources> \
1041 make PLAT=<platform> TRUSTED_BOARD_BOOT=1 GENERATE_COT=1 \
1042 ARM_ROTPK_LOCATION=devel_rsa \
1043 ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem \
1044 BL33=<path-to>/<bl33_image> \
1045 all fip
1046
1047 The result of this build will be the bl1.bin and the fip.bin binaries. This
1048 FIP will include the certificates corresponding to the Chain of Trust
1049 described in the TBBR-client document. These certificates can also be found
1050 in the output build directory.
1051
1052#. The optional FWU\_FIP contains any additional images to be loaded from
1053 Non-Volatile storage during the `Firmware Update`_ process. To build the
1054 FWU\_FIP, any FWU images required by the platform must be specified on the
1055 command line. On ARM development platforms like Juno, these are:
1056
1057 - NS\_BL2U. The AP non-secure Firmware Updater image.
1058 - SCP\_BL2U. The SCP Firmware Update Configuration image.
1059
1060 Example of Juno command line for generating both ``fwu`` and ``fwu_fip``
1061 targets using RSA development:
1062
1063 ::
1064
1065 MBEDTLS_DIR=<path of the directory containing mbed TLS sources> \
1066 make PLAT=juno TRUSTED_BOARD_BOOT=1 GENERATE_COT=1 \
1067 ARM_ROTPK_LOCATION=devel_rsa \
1068 ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem \
1069 BL33=<path-to>/<bl33_image> \
1070 SCP_BL2=<path-to>/<scp_bl2_image> \
1071 SCP_BL2U=<path-to>/<scp_bl2u_image> \
1072 NS_BL2U=<path-to>/<ns_bl2u_image> \
1073 all fip fwu_fip
1074
1075 Note: The BL2U image will be built by default and added to the FWU\_FIP.
1076 The user may override this by adding ``BL2U=<path-to>/<bl2u_image>``
1077 to the command line above.
1078
1079 Note: Building and installing the non-secure and SCP FWU images (NS\_BL1U,
1080 NS\_BL2U and SCP\_BL2U) is outside the scope of this document.
1081
1082 The result of this build will be bl1.bin, fip.bin and fwu\_fip.bin binaries.
1083 Both the FIP and FWU\_FIP will include the certificates corresponding to the
1084 Chain of Trust described in the TBBR-client document. These certificates
1085 can also be found in the output build directory.
1086
1087Building the Certificate Generation Tool
1088~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1089
1090The ``cert_create`` tool is built as part of the TF build process when the ``fip``
1091make target is specified and TBB is enabled (as described in the previous
1092section), but it can also be built separately with the following command:
1093
1094::
1095
1096 make PLAT=<platform> [DEBUG=1] [V=1] certtool
1097
1098For platforms that do not require their own IDs in certificate files,
1099the generic 'cert\_create' tool can be built with the following command:
1100
1101::
1102
1103 make USE_TBBR_DEFS=1 [DEBUG=1] [V=1] certtool
1104
1105``DEBUG=1`` builds the tool in debug mode. ``V=1`` makes the build process more
1106verbose. The following command should be used to obtain help about the tool:
1107
1108::
1109
1110 ./tools/cert_create/cert_create -h
1111
1112Building a FIP for Juno and FVP
1113-------------------------------
1114
1115This section provides Juno and FVP specific instructions to build Trusted
1116Firmware, obtain the additional required firmware, and pack it all together in
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001117a single FIP binary. It assumes that a `Linaro Release`_ has been installed.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001118
David Cunadob2de0992017-06-29 12:01:33 +01001119Note: Pre-built binaries for AArch32 are available from Linaro Release 16.12
1120onwards. Before that release, pre-built binaries are only available for AArch64.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001121
1122Note: follow the full instructions for one platform before switching to a
1123different one. Mixing instructions for different platforms may result in
1124corrupted binaries.
1125
1126#. Clean the working directory
1127
1128 ::
1129
1130 make realclean
1131
1132#. Obtain SCP\_BL2 (Juno) and BL33 (all platforms)
1133
1134 Use the fiptool to extract the SCP\_BL2 and BL33 images from the FIP
1135 package included in the Linaro release:
1136
1137 ::
1138
1139 # Build the fiptool
1140 make [DEBUG=1] [V=1] fiptool
1141
1142 # Unpack firmware images from Linaro FIP
1143 ./tools/fiptool/fiptool unpack \
1144 <path/to/linaro/release>/fip.bin
1145
1146 The unpack operation will result in a set of binary images extracted to the
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001147 current working directory. The SCP\_BL2 image corresponds to
1148 ``scp-fw.bin`` and BL33 corresponds to ``nt-fw.bin``.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001149
1150 Note: the fiptool will complain if the images to be unpacked already
1151 exist in the current directory. If that is the case, either delete those
1152 files or use the ``--force`` option to overwrite.
1153
1154 Note for AArch32, the instructions below assume that nt-fw.bin is a custom
1155 Normal world boot loader that supports AArch32.
1156
1157#. Build TF images and create a new FIP for FVP
1158
1159 ::
1160
1161 # AArch64
1162 make PLAT=fvp BL33=nt-fw.bin all fip
1163
1164 # AArch32
1165 make PLAT=fvp ARCH=aarch32 AARCH32_SP=sp_min BL33=nt-fw.bin all fip
1166
1167#. Build TF images and create a new FIP for Juno
1168
1169 For AArch64:
1170
1171 Building for AArch64 on Juno simply requires the addition of ``SCP_BL2``
1172 as a build parameter.
1173
1174 ::
1175
1176 make PLAT=juno all fip \
1177 BL33=<path-to-juno-oe-uboot>/SOFTWARE/bl33-uboot.bin \
1178 SCP_BL2=<path-to-juno-busybox-uboot>/SOFTWARE/scp_bl2.bin
1179
1180 For AArch32:
1181
1182 Hardware restrictions on Juno prevent cold reset into AArch32 execution mode,
1183 therefore BL1 and BL2 must be compiled for AArch64, and BL32 is compiled
1184 separately for AArch32.
1185
1186 - Before building BL32, the environment variable ``CROSS_COMPILE`` must point
1187 to the AArch32 Linaro cross compiler.
1188
1189 ::
1190
1191 export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-linux-gnueabihf-
1192
1193 - Build BL32 in AArch32.
1194
1195 ::
1196
1197 make ARCH=aarch32 PLAT=juno AARCH32_SP=sp_min \
1198 RESET_TO_SP_MIN=1 JUNO_AARCH32_EL3_RUNTIME=1 bl32
1199
1200 - Before building BL1 and BL2, the environment variable ``CROSS_COMPILE``
1201 must point to the AArch64 Linaro cross compiler.
1202
1203 ::
1204
1205 export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
1206
1207 - The following parameters should be used to build BL1 and BL2 in AArch64
1208 and point to the BL32 file.
1209
1210 ::
1211
1212 make ARCH=aarch64 PLAT=juno LOAD_IMAGE_V2=1 JUNO_AARCH32_EL3_RUNTIME=1 \
1213 BL33=<path-to-juno32-oe-uboot>/SOFTWARE/bl33-uboot.bin \
1214 SCP_BL2=<path-to-juno32-oe-uboot>/SOFTWARE/scp_bl2.bin SPD=tspd \
1215 BL32=<path-to-bl32>/bl32.bin all fip
1216
1217The resulting BL1 and FIP images may be found in:
1218
1219::
1220
1221 # Juno
1222 ./build/juno/release/bl1.bin
1223 ./build/juno/release/fip.bin
1224
1225 # FVP
1226 ./build/fvp/release/bl1.bin
1227 ./build/fvp/release/fip.bin
1228
Roberto Vargas096f3a02017-10-17 10:19:00 +01001229
1230Booting Firmware Update images
1231-------------------------------------
1232
1233When Firmware Update (FWU) is enabled there are at least 2 new images
1234that have to be loaded, the Non-Secure FWU ROM (NS-BL1U), and the
1235FWU FIP.
1236
1237Juno
1238~~~~
1239
1240The new images must be programmed in flash memory by adding
1241an entry in the ``SITE1/HBI0262x/images.txt`` configuration file
1242on the Juno SD card (where ``x`` depends on the revision of the Juno board).
1243Refer to the `Juno Getting Started Guide`_, section 2.3 "Flash memory
1244programming" for more information. User should ensure these do not
1245overlap with any other entries in the file.
1246
1247::
1248
1249 NOR10UPDATE: AUTO ;Image Update:NONE/AUTO/FORCE
1250 NOR10ADDRESS: 0x00400000 ;Image Flash Address [ns_bl2u_base_address]
1251 NOR10FILE: \SOFTWARE\fwu_fip.bin ;Image File Name
1252 NOR10LOAD: 00000000 ;Image Load Address
1253 NOR10ENTRY: 00000000 ;Image Entry Point
1254
1255 NOR11UPDATE: AUTO ;Image Update:NONE/AUTO/FORCE
1256 NOR11ADDRESS: 0x03EB8000 ;Image Flash Address [ns_bl1u_base_address]
1257 NOR11FILE: \SOFTWARE\ns_bl1u.bin ;Image File Name
1258 NOR11LOAD: 00000000 ;Image Load Address
1259
1260The address ns_bl1u_base_address is the value of NS_BL1U_BASE - 0x8000000.
1261In the same way, the address ns_bl2u_base_address is the value of
1262NS_BL2U_BASE - 0x8000000.
1263
1264FVP
1265~~~
1266
1267The additional fip images must be loaded with:
1268
1269::
1270
1271 --data cluster0.cpu0="<path_to>/ns_bl1u.bin"@0x0beb8000 [ns_bl1u_base_address]
1272 --data cluster0.cpu0="<path_to>/fwu_fip.bin"@0x08400000 [ns_bl2u_base_address]
1273
1274The address ns_bl1u_base_address is the value of NS_BL1U_BASE.
1275In the same way, the address ns_bl2u_base_address is the value of
1276NS_BL2U_BASE.
1277
1278
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001279EL3 payloads alternative boot flow
1280----------------------------------
1281
1282On a pre-production system, the ability to execute arbitrary, bare-metal code at
1283the highest exception level is required. It allows full, direct access to the
1284hardware, for example to run silicon soak tests.
1285
1286Although it is possible to implement some baremetal secure firmware from
1287scratch, this is a complex task on some platforms, depending on the level of
1288configuration required to put the system in the expected state.
1289
1290Rather than booting a baremetal application, a possible compromise is to boot
1291``EL3 payloads`` through the Trusted Firmware instead. This is implemented as an
1292alternative boot flow, where a modified BL2 boots an EL3 payload, instead of
1293loading the other BL images and passing control to BL31. It reduces the
1294complexity of developing EL3 baremetal code by:
1295
1296- putting the system into a known architectural state;
1297- taking care of platform secure world initialization;
1298- loading the SCP\_BL2 image if required by the platform.
1299
1300When booting an EL3 payload on ARM standard platforms, the configuration of the
1301TrustZone controller is simplified such that only region 0 is enabled and is
1302configured to permit secure access only. This gives full access to the whole
1303DRAM to the EL3 payload.
1304
1305The system is left in the same state as when entering BL31 in the default boot
1306flow. In particular:
1307
1308- Running in EL3;
1309- Current state is AArch64;
1310- Little-endian data access;
1311- All exceptions disabled;
1312- MMU disabled;
1313- Caches disabled.
1314
1315Booting an EL3 payload
1316~~~~~~~~~~~~~~~~~~~~~~
1317
1318The EL3 payload image is a standalone image and is not part of the FIP. It is
1319not loaded by the Trusted Firmware. Therefore, there are 2 possible scenarios:
1320
1321- The EL3 payload may reside in non-volatile memory (NVM) and execute in
1322 place. In this case, booting it is just a matter of specifying the right
1323 address in NVM through ``EL3_PAYLOAD_BASE`` when building the TF.
1324
1325- The EL3 payload needs to be loaded in volatile memory (e.g. DRAM) at
1326 run-time.
1327
1328To help in the latter scenario, the ``SPIN_ON_BL1_EXIT=1`` build option can be
1329used. The infinite loop that it introduces in BL1 stops execution at the right
1330moment for a debugger to take control of the target and load the payload (for
1331example, over JTAG).
1332
1333It is expected that this loading method will work in most cases, as a debugger
1334connection is usually available in a pre-production system. The user is free to
1335use any other platform-specific mechanism to load the EL3 payload, though.
1336
1337Booting an EL3 payload on FVP
1338^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1339
1340The EL3 payloads boot flow requires the CPU's mailbox to be cleared at reset for
1341the secondary CPUs holding pen to work properly. Unfortunately, its reset value
1342is undefined on the FVP platform and the FVP platform code doesn't clear it.
1343Therefore, one must modify the way the model is normally invoked in order to
1344clear the mailbox at start-up.
1345
1346One way to do that is to create an 8-byte file containing all zero bytes using
1347the following command:
1348
1349::
1350
1351 dd if=/dev/zero of=mailbox.dat bs=1 count=8
1352
1353and pre-load it into the FVP memory at the mailbox address (i.e. ``0x04000000``)
1354using the following model parameters:
1355
1356::
1357
1358 --data cluster0.cpu0=mailbox.dat@0x04000000 [Base FVPs]
1359 --data=mailbox.dat@0x04000000 [Foundation FVP]
1360
1361To provide the model with the EL3 payload image, the following methods may be
1362used:
1363
1364#. If the EL3 payload is able to execute in place, it may be programmed into
1365 flash memory. On Base Cortex and AEM FVPs, the following model parameter
1366 loads it at the base address of the NOR FLASH1 (the NOR FLASH0 is already
1367 used for the FIP):
1368
1369 ::
1370
1371 -C bp.flashloader1.fname="/path/to/el3-payload"
1372
1373 On Foundation FVP, there is no flash loader component and the EL3 payload
1374 may be programmed anywhere in flash using method 3 below.
1375
1376#. When using the ``SPIN_ON_BL1_EXIT=1`` loading method, the following DS-5
1377 command may be used to load the EL3 payload ELF image over JTAG:
1378
1379 ::
1380
1381 load /path/to/el3-payload.elf
1382
1383#. The EL3 payload may be pre-loaded in volatile memory using the following
1384 model parameters:
1385
1386 ::
1387
1388 --data cluster0.cpu0="/path/to/el3-payload"@address [Base FVPs]
1389 --data="/path/to/el3-payload"@address [Foundation FVP]
1390
1391 The address provided to the FVP must match the ``EL3_PAYLOAD_BASE`` address
1392 used when building the Trusted Firmware.
1393
1394Booting an EL3 payload on Juno
1395^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1396
1397If the EL3 payload is able to execute in place, it may be programmed in flash
1398memory by adding an entry in the ``SITE1/HBI0262x/images.txt`` configuration file
1399on the Juno SD card (where ``x`` depends on the revision of the Juno board).
1400Refer to the `Juno Getting Started Guide`_, section 2.3 "Flash memory
1401programming" for more information.
1402
1403Alternatively, the same DS-5 command mentioned in the FVP section above can
1404be used to load the EL3 payload's ELF file over JTAG on Juno.
1405
1406Preloaded BL33 alternative boot flow
1407------------------------------------
1408
1409Some platforms have the ability to preload BL33 into memory instead of relying
1410on Trusted Firmware to load it. This may simplify packaging of the normal world
1411code and improve performance in a development environment. When secure world
1412cold boot is complete, Trusted Firmware simply jumps to a BL33 base address
1413provided at build time.
1414
1415For this option to be used, the ``PRELOADED_BL33_BASE`` build option has to be
1416used when compiling the Trusted Firmware. For example, the following command
1417will create a FIP without a BL33 and prepare to jump to a BL33 image loaded at
1418address 0x80000000:
1419
1420::
1421
1422 make PRELOADED_BL33_BASE=0x80000000 PLAT=fvp all fip
1423
1424Boot of a preloaded bootwrapped kernel image on Base FVP
1425~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1426
1427The following example uses the AArch64 boot wrapper. This simplifies normal
1428world booting while also making use of TF features. It can be obtained from its
1429repository with:
1430
1431::
1432
1433 git clone git://git.kernel.org/pub/scm/linux/kernel/git/mark/boot-wrapper-aarch64.git
1434
1435After compiling it, an ELF file is generated. It can be loaded with the
1436following command:
1437
1438::
1439
1440 <path-to>/FVP_Base_AEMv8A-AEMv8A \
1441 -C bp.secureflashloader.fname=bl1.bin \
1442 -C bp.flashloader0.fname=fip.bin \
1443 -a cluster0.cpu0=<bootwrapped-kernel.elf> \
1444 --start cluster0.cpu0=0x0
1445
1446The ``-a cluster0.cpu0=<bootwrapped-kernel.elf>`` option loads the ELF file. It
1447also sets the PC register to the ELF entry point address, which is not the
1448desired behaviour, so the ``--start cluster0.cpu0=0x0`` option forces the PC back
1449to 0x0 (the BL1 entry point address) on CPU #0. The ``PRELOADED_BL33_BASE`` define
1450used when compiling the FIP must match the ELF entry point.
1451
1452Boot of a preloaded bootwrapped kernel image on Juno
1453~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1454
1455The procedure to obtain and compile the boot wrapper is very similar to the case
1456of the FVP. The execution must be stopped at the end of bl2\_main(), and the
1457loading method explained above in the EL3 payload boot flow section may be used
1458to load the ELF file over JTAG on Juno.
1459
1460Running the software on FVP
1461---------------------------
1462
1463The latest version of the AArch64 build of ARM Trusted Firmware has been tested
1464on the following ARM FVPs (64-bit host machine only).
1465
Eleanor Bonnicie124dc42017-10-04 15:03:33 +01001466NOTE: Unless otherwise stated, the model version is Version 11.1 Build 11.1.22.
David Cunado124415e2017-06-27 17:31:12 +01001467
1468- ``Foundation_Platform``
Eleanor Bonnicie124dc42017-10-04 15:03:33 +01001469- ``FVP_Base_AEMv8A-AEMv8A`` (Version 8.7, Build 0.8.8702)
David Cunado124415e2017-06-27 17:31:12 +01001470- ``FVP_Base_Cortex-A35x4``
1471- ``FVP_Base_Cortex-A53x4``
1472- ``FVP_Base_Cortex-A57x4-A53x4``
1473- ``FVP_Base_Cortex-A57x4``
1474- ``FVP_Base_Cortex-A72x4-A53x4``
1475- ``FVP_Base_Cortex-A72x4``
1476- ``FVP_Base_Cortex-A73x4-A53x4``
1477- ``FVP_Base_Cortex-A73x4``
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001478
1479The latest version of the AArch32 build of ARM Trusted Firmware has been tested
1480on the following ARM FVPs (64-bit host machine only).
1481
Eleanor Bonnicie124dc42017-10-04 15:03:33 +01001482- ``FVP_Base_AEMv8A-AEMv8A`` (Version 8.7, Build 0.8.8702)
David Cunado124415e2017-06-27 17:31:12 +01001483- ``FVP_Base_Cortex-A32x4``
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001484
1485NOTE: The build numbers quoted above are those reported by launching the FVP
1486with the ``--version`` parameter.
1487
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001488NOTE: Linaro provides a ramdisk image in prebuilt FVP configurations and full
1489file systems that can be downloaded separately. To run an FVP with a virtio
1490file system image an additional FVP configuration option
1491``-C bp.virtioblockdevice.image_path="<path-to>/<file-system-image>`` can be
1492used.
1493
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001494NOTE: The software will not work on Version 1.0 of the Foundation FVP.
1495The commands below would report an ``unhandled argument`` error in this case.
1496
1497NOTE: FVPs can be launched with ``--cadi-server`` option such that a
1498CADI-compliant debugger (for example, ARM DS-5) can connect to and control its
1499execution.
1500
Eleanor Bonnicie124dc42017-10-04 15:03:33 +01001501NOTE: Since FVP model Version 11.0 Build 11.0.34 and Version 8.5 Build 0.8.5202
David Cunado97309462017-07-31 12:24:51 +01001502the internal synchronisation timings changed compared to older versions of the
1503models. The models can be launched with ``-Q 100`` option if they are required
1504to match the run time characteristics of the older versions.
1505
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001506The Foundation FVP is a cut down version of the AArch64 Base FVP. It can be
1507downloaded for free from `ARM's website`_.
1508
David Cunado124415e2017-06-27 17:31:12 +01001509The Cortex-A models listed above are also available to download from
1510`ARM's website`_.
1511
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001512Please refer to the FVP documentation for a detailed description of the model
1513parameter options. A brief description of the important ones that affect the ARM
1514Trusted Firmware and normal world software behavior is provided below.
1515
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001516Obtaining the Flattened Device Trees
1517~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1518
1519Depending on the FVP configuration and Linux configuration used, different
1520FDT files are required. FDTs for the Foundation and Base FVPs can be found in
1521the Trusted Firmware source directory under ``fdts/``. The Foundation FVP has a
1522subset of the Base FVP components. For example, the Foundation FVP lacks CLCD
1523and MMC support, and has only one CPU cluster.
1524
1525Note: It is not recommended to use the FDTs built along the kernel because not
1526all FDTs are available from there.
1527
1528- ``fvp-base-gicv2-psci.dtb``
1529
1530 For use with both AEMv8 and Cortex-A57-A53 Base FVPs with
1531 Base memory map configuration.
1532
1533- ``fvp-base-gicv2-psci-aarch32.dtb``
1534
1535 For use with AEMv8 and Cortex-A32 Base FVPs running Linux in AArch32 state
1536 with Base memory map configuration.
1537
1538- ``fvp-base-gicv3-psci.dtb``
1539
1540 (Default) For use with both AEMv8 and Cortex-A57-A53 Base FVPs with Base
1541 memory map configuration and Linux GICv3 support.
1542
1543- ``fvp-base-gicv3-psci-aarch32.dtb``
1544
1545 For use with AEMv8 and Cortex-A32 Base FVPs running Linux in AArch32 state
1546 with Base memory map configuration and Linux GICv3 support.
1547
1548- ``fvp-foundation-gicv2-psci.dtb``
1549
1550 For use with Foundation FVP with Base memory map configuration.
1551
1552- ``fvp-foundation-gicv3-psci.dtb``
1553
1554 (Default) For use with Foundation FVP with Base memory map configuration
1555 and Linux GICv3 support.
1556
1557Running on the Foundation FVP with reset to BL1 entrypoint
1558~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1559
1560The following ``Foundation_Platform`` parameters should be used to boot Linux with
15614 CPUs using the AArch64 build of ARM Trusted Firmware.
1562
1563::
1564
1565 <path-to>/Foundation_Platform \
1566 --cores=4 \
1567 --secure-memory \
1568 --visualization \
1569 --gicv3 \
1570 --data="<path-to>/<bl1-binary>"@0x0 \
1571 --data="<path-to>/<FIP-binary>"@0x08000000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001572 --data="<path-to>/<fdt>"@0x82000000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001573 --data="<path-to>/<kernel-binary>"@0x80080000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001574 --data="<path-to>/<ramdisk-binary>"@0x84000000
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001575
1576Notes:
1577
1578- BL1 is loaded at the start of the Trusted ROM.
1579- The Firmware Image Package is loaded at the start of NOR FLASH0.
1580- The Linux kernel image and device tree are loaded in DRAM.
1581- The default use-case for the Foundation FVP is to use the ``--gicv3`` option
1582 and enable the GICv3 device in the model. Note that without this option,
1583 the Foundation FVP defaults to legacy (Versatile Express) memory map which
1584 is not supported by ARM Trusted Firmware.
1585
1586Running on the AEMv8 Base FVP with reset to BL1 entrypoint
1587~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1588
1589The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux
1590with 8 CPUs using the AArch64 build of ARM Trusted Firmware.
1591
1592::
1593
1594 <path-to>/FVP_Base_AEMv8A-AEMv8A \
1595 -C pctl.startup=0.0.0.0 \
1596 -C bp.secure_memory=1 \
1597 -C bp.tzc_400.diagnostics=1 \
1598 -C cluster0.NUM_CORES=4 \
1599 -C cluster1.NUM_CORES=4 \
1600 -C cache_state_modelled=1 \
1601 -C bp.secureflashloader.fname="<path-to>/<bl1-binary>" \
1602 -C bp.flashloader0.fname="<path-to>/<FIP-binary>" \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001603 --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001604 --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001605 --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001606
1607Running on the AEMv8 Base FVP (AArch32) with reset to BL1 entrypoint
1608~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1609
1610The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux
1611with 8 CPUs using the AArch32 build of ARM Trusted Firmware.
1612
1613::
1614
1615 <path-to>/FVP_Base_AEMv8A-AEMv8A \
1616 -C pctl.startup=0.0.0.0 \
1617 -C bp.secure_memory=1 \
1618 -C bp.tzc_400.diagnostics=1 \
1619 -C cluster0.NUM_CORES=4 \
1620 -C cluster1.NUM_CORES=4 \
1621 -C cache_state_modelled=1 \
1622 -C cluster0.cpu0.CONFIG64=0 \
1623 -C cluster0.cpu1.CONFIG64=0 \
1624 -C cluster0.cpu2.CONFIG64=0 \
1625 -C cluster0.cpu3.CONFIG64=0 \
1626 -C cluster1.cpu0.CONFIG64=0 \
1627 -C cluster1.cpu1.CONFIG64=0 \
1628 -C cluster1.cpu2.CONFIG64=0 \
1629 -C cluster1.cpu3.CONFIG64=0 \
1630 -C bp.secureflashloader.fname="<path-to>/<bl1-binary>" \
1631 -C bp.flashloader0.fname="<path-to>/<FIP-binary>" \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001632 --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001633 --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001634 --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001635
1636Running on the Cortex-A57-A53 Base FVP with reset to BL1 entrypoint
1637~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1638
1639The following ``FVP_Base_Cortex-A57x4-A53x4`` model parameters should be used to
1640boot Linux with 8 CPUs using the AArch64 build of ARM Trusted Firmware.
1641
1642::
1643
1644 <path-to>/FVP_Base_Cortex-A57x4-A53x4 \
1645 -C pctl.startup=0.0.0.0 \
1646 -C bp.secure_memory=1 \
1647 -C bp.tzc_400.diagnostics=1 \
1648 -C cache_state_modelled=1 \
1649 -C bp.secureflashloader.fname="<path-to>/<bl1-binary>" \
1650 -C bp.flashloader0.fname="<path-to>/<FIP-binary>" \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001651 --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001652 --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001653 --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001654
1655Running on the Cortex-A32 Base FVP (AArch32) with reset to BL1 entrypoint
1656~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1657
1658The following ``FVP_Base_Cortex-A32x4`` model parameters should be used to
1659boot Linux with 4 CPUs using the AArch32 build of ARM Trusted Firmware.
1660
1661::
1662
1663 <path-to>/FVP_Base_Cortex-A32x4 \
1664 -C pctl.startup=0.0.0.0 \
1665 -C bp.secure_memory=1 \
1666 -C bp.tzc_400.diagnostics=1 \
1667 -C cache_state_modelled=1 \
1668 -C bp.secureflashloader.fname="<path-to>/<bl1-binary>" \
1669 -C bp.flashloader0.fname="<path-to>/<FIP-binary>" \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001670 --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001671 --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001672 --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001673
1674Running on the AEMv8 Base FVP with reset to BL31 entrypoint
1675~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1676
1677The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux
1678with 8 CPUs using the AArch64 build of ARM Trusted Firmware.
1679
1680::
1681
1682 <path-to>/FVP_Base_AEMv8A-AEMv8A \
1683 -C pctl.startup=0.0.0.0 \
1684 -C bp.secure_memory=1 \
1685 -C bp.tzc_400.diagnostics=1 \
1686 -C cluster0.NUM_CORES=4 \
1687 -C cluster1.NUM_CORES=4 \
1688 -C cache_state_modelled=1 \
Qixiang Xua5f72812017-08-31 11:45:32 +08001689 -C cluster0.cpu0.RVBAR=0x04020000 \
1690 -C cluster0.cpu1.RVBAR=0x04020000 \
1691 -C cluster0.cpu2.RVBAR=0x04020000 \
1692 -C cluster0.cpu3.RVBAR=0x04020000 \
1693 -C cluster1.cpu0.RVBAR=0x04020000 \
1694 -C cluster1.cpu1.RVBAR=0x04020000 \
1695 -C cluster1.cpu2.RVBAR=0x04020000 \
1696 -C cluster1.cpu3.RVBAR=0x04020000 \
1697 --data cluster0.cpu0="<path-to>/<bl31-binary>"@0x04020000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001698 --data cluster0.cpu0="<path-to>/<bl32-binary>"@0x04001000 \
1699 --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001700 --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001701 --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001702 --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001703
1704Notes:
1705
1706- Since a FIP is not loaded when using BL31 as reset entrypoint, the
1707 ``--data="<path-to><bl31|bl32|bl33-binary>"@<base-address-of-binary>``
1708 parameter is needed to load the individual bootloader images in memory.
1709 BL32 image is only needed if BL31 has been built to expect a Secure-EL1
1710 Payload.
1711
1712- The ``-C cluster<X>.cpu<Y>.RVBAR=@<base-address-of-bl31>`` parameter, where
1713 X and Y are the cluster and CPU numbers respectively, is used to set the
1714 reset vector for each core.
1715
1716- Changing the default value of ``ARM_TSP_RAM_LOCATION`` will also require
1717 changing the value of
1718 ``--data="<path-to><bl32-binary>"@<base-address-of-bl32>`` to the new value of
1719 ``BL32_BASE``.
1720
1721Running on the AEMv8 Base FVP (AArch32) with reset to SP\_MIN entrypoint
1722~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1723
1724The following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux
1725with 8 CPUs using the AArch32 build of ARM Trusted Firmware.
1726
1727::
1728
1729 <path-to>/FVP_Base_AEMv8A-AEMv8A \
1730 -C pctl.startup=0.0.0.0 \
1731 -C bp.secure_memory=1 \
1732 -C bp.tzc_400.diagnostics=1 \
1733 -C cluster0.NUM_CORES=4 \
1734 -C cluster1.NUM_CORES=4 \
1735 -C cache_state_modelled=1 \
1736 -C cluster0.cpu0.CONFIG64=0 \
1737 -C cluster0.cpu1.CONFIG64=0 \
1738 -C cluster0.cpu2.CONFIG64=0 \
1739 -C cluster0.cpu3.CONFIG64=0 \
1740 -C cluster1.cpu0.CONFIG64=0 \
1741 -C cluster1.cpu1.CONFIG64=0 \
1742 -C cluster1.cpu2.CONFIG64=0 \
1743 -C cluster1.cpu3.CONFIG64=0 \
1744 -C cluster0.cpu0.RVBAR=0x04001000 \
1745 -C cluster0.cpu1.RVBAR=0x04001000 \
1746 -C cluster0.cpu2.RVBAR=0x04001000 \
1747 -C cluster0.cpu3.RVBAR=0x04001000 \
1748 -C cluster1.cpu0.RVBAR=0x04001000 \
1749 -C cluster1.cpu1.RVBAR=0x04001000 \
1750 -C cluster1.cpu2.RVBAR=0x04001000 \
1751 -C cluster1.cpu3.RVBAR=0x04001000 \
1752 --data cluster0.cpu0="<path-to>/<bl32-binary>"@0x04001000 \
1753 --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001754 --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001755 --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001756 --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001757
1758Note: The load address of ``<bl32-binary>`` depends on the value ``BL32_BASE``.
1759It should match the address programmed into the RVBAR register as well.
1760
1761Running on the Cortex-A57-A53 Base FVP with reset to BL31 entrypoint
1762~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1763
1764The following ``FVP_Base_Cortex-A57x4-A53x4`` model parameters should be used to
1765boot Linux with 8 CPUs using the AArch64 build of ARM Trusted Firmware.
1766
1767::
1768
1769 <path-to>/FVP_Base_Cortex-A57x4-A53x4 \
1770 -C pctl.startup=0.0.0.0 \
1771 -C bp.secure_memory=1 \
1772 -C bp.tzc_400.diagnostics=1 \
1773 -C cache_state_modelled=1 \
Qixiang Xua5f72812017-08-31 11:45:32 +08001774 -C cluster0.cpu0.RVBARADDR=0x04020000 \
1775 -C cluster0.cpu1.RVBARADDR=0x04020000 \
1776 -C cluster0.cpu2.RVBARADDR=0x04020000 \
1777 -C cluster0.cpu3.RVBARADDR=0x04020000 \
1778 -C cluster1.cpu0.RVBARADDR=0x04020000 \
1779 -C cluster1.cpu1.RVBARADDR=0x04020000 \
1780 -C cluster1.cpu2.RVBARADDR=0x04020000 \
1781 -C cluster1.cpu3.RVBARADDR=0x04020000 \
1782 --data cluster0.cpu0="<path-to>/<bl31-binary>"@0x04020000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001783 --data cluster0.cpu0="<path-to>/<bl32-binary>"@0x04001000 \
1784 --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001785 --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001786 --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001787 --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001788
1789Running on the Cortex-A32 Base FVP (AArch32) with reset to SP\_MIN entrypoint
1790~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1791
1792The following ``FVP_Base_Cortex-A32x4`` model parameters should be used to
1793boot Linux with 4 CPUs using the AArch32 build of ARM Trusted Firmware.
1794
1795::
1796
1797 <path-to>/FVP_Base_Cortex-A32x4 \
1798 -C pctl.startup=0.0.0.0 \
1799 -C bp.secure_memory=1 \
1800 -C bp.tzc_400.diagnostics=1 \
1801 -C cache_state_modelled=1 \
1802 -C cluster0.cpu0.RVBARADDR=0x04001000 \
1803 -C cluster0.cpu1.RVBARADDR=0x04001000 \
1804 -C cluster0.cpu2.RVBARADDR=0x04001000 \
1805 -C cluster0.cpu3.RVBARADDR=0x04001000 \
1806 --data cluster0.cpu0="<path-to>/<bl32-binary>"@0x04001000 \
1807 --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001808 --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001809 --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001810 --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001811
1812Running the software on Juno
1813----------------------------
1814
David Cunadob2de0992017-06-29 12:01:33 +01001815This version of the ARM Trusted Firmware has been tested on variants r0, r1 and
1816r2 of Juno.
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001817
1818To execute the software stack on Juno, the version of the Juno board recovery
1819image indicated in the `Linaro Release Notes`_ must be installed. If you have an
1820earlier version installed or are unsure which version is installed, please
1821re-install the recovery image by following the
1822`Instructions for using Linaro's deliverables on Juno`_.
1823
1824Preparing Trusted Firmware images
1825~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1826
1827After building Trusted Firmware, the files ``bl1.bin`` and ``fip.bin`` need copying
1828to the ``SOFTWARE/`` directory of the Juno SD card.
1829
1830Other Juno software information
1831~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1832
1833Please visit the `ARM Platforms Portal`_ to get support and obtain any other Juno
1834software information. Please also refer to the `Juno Getting Started Guide`_ to
1835get more detailed information about the Juno ARM development platform and how to
1836configure it.
1837
1838Testing SYSTEM SUSPEND on Juno
1839~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1840
1841The SYSTEM SUSPEND is a PSCI API which can be used to implement system suspend
1842to RAM. For more details refer to section 5.16 of `PSCI`_. To test system suspend
1843on Juno, at the linux shell prompt, issue the following command:
1844
1845::
1846
1847 echo +10 > /sys/class/rtc/rtc0/wakealarm
1848 echo -n mem > /sys/power/state
1849
1850The Juno board should suspend to RAM and then wakeup after 10 seconds due to
1851wakeup interrupt from RTC.
1852
1853--------------
1854
1855*Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.*
1856
David Cunadob2de0992017-06-29 12:01:33 +01001857.. _Linaro: `Linaro Release Notes`_
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001858.. _Linaro Release: `Linaro Release Notes`_
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001859.. _Linaro Release Notes: https://community.arm.com/tools/dev-platforms/b/documents/posts/linaro-release-notes-deprecated
David Cunadob2de0992017-06-29 12:01:33 +01001860.. _Linaro Release 17.04: https://community.arm.com/tools/dev-platforms/b/documents/posts/linaro-release-notes-deprecated#LinaroRelease17.04
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001861.. _Linaro instructions: https://community.arm.com/dev-platforms/b/documents/posts/instructions-for-using-the-linaro-software-deliverables
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001862.. _Instructions for using Linaro's deliverables on Juno: https://community.arm.com/dev-platforms/b/documents/posts/using-linaros-deliverables-on-juno
1863.. _ARM Platforms Portal: https://community.arm.com/dev-platforms/
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001864.. _Development Studio 5 (DS-5): http://www.arm.com/products/tools/software-tools/ds-5/index.php
Antonio Nino Diazb5d68092017-05-23 11:49:22 +01001865.. _Dia: https://wiki.gnome.org/Apps/Dia/Download
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001866.. _here: psci-lib-integration-guide.rst
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001867.. _Trusted Board Boot: trusted-board-boot.rst
1868.. _Secure-EL1 Payloads and Dispatchers: firmware-design.rst#user-content-secure-el1-payloads-and-dispatchers
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001869.. _Firmware Update: firmware-update.rst
1870.. _Firmware Design: firmware-design.rst
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001871.. _mbed TLS Repository: https://github.com/ARMmbed/mbedtls.git
1872.. _mbed TLS Security Center: https://tls.mbed.org/security
Eleanor Bonnicic61b22e2017-07-07 14:33:24 +01001873.. _ARM's website: `FVP models`_
1874.. _FVP models: https://developer.arm.com/products/system-design/fixed-virtual-platforms
Douglas Raillardd7c21b72017-06-28 15:23:03 +01001875.. _Juno Getting Started Guide: http://infocenter.arm.com/help/topic/com.arm.doc.dui0928e/DUI0928E_juno_arm_development_platform_gsg.pdf
David Cunadob2de0992017-06-29 12:01:33 +01001876.. _PSCI: http://infocenter.arm.com/help/topic/com.arm.doc.den0022d/Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf