xref: /arm-trusted-firmware/docs/getting_started/build-options.rst (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700SchasingluluBuild Options
2*91f16700Schasinglulu=============
3*91f16700Schasinglulu
4*91f16700SchasingluluThe TF-A build system supports the following build options. Unless mentioned
5*91f16700Schasingluluotherwise, these options are expected to be specified at the build command
6*91f16700Schasinglululine and are not to be modified in any component makefiles. Note that the
7*91f16700Schasinglulubuild system doesn't track dependency for build options. Therefore, if any of
8*91f16700Schasingluluthe build options are changed from a previous build, a clean build must be
9*91f16700Schasingluluperformed.
10*91f16700Schasinglulu
11*91f16700Schasinglulu.. _build_options_common:
12*91f16700Schasinglulu
13*91f16700SchasingluluCommon build options
14*91f16700Schasinglulu--------------------
15*91f16700Schasinglulu
16*91f16700Schasinglulu-  ``AARCH32_INSTRUCTION_SET``: Choose the AArch32 instruction set that the
17*91f16700Schasinglulu   compiler should use. Valid values are T32 and A32. It defaults to T32 due to
18*91f16700Schasinglulu   code having a smaller resulting size.
19*91f16700Schasinglulu
20*91f16700Schasinglulu-  ``AARCH32_SP`` : Choose the AArch32 Secure Payload component to be built as
21*91f16700Schasinglulu   as the BL32 image when ``ARCH=aarch32``. The value should be the path to the
22*91f16700Schasinglulu   directory containing the SP source, relative to the ``bl32/``; the directory
23*91f16700Schasinglulu   is expected to contain a makefile called ``<aarch32_sp-value>.mk``.
24*91f16700Schasinglulu
25*91f16700Schasinglulu-  ``AMU_RESTRICT_COUNTERS``: Register reads to the group 1 counters will return
26*91f16700Schasinglulu   zero at all but the highest implemented exception level.  Reads from the
27*91f16700Schasinglulu   memory mapped view are unaffected by this control.
28*91f16700Schasinglulu
29*91f16700Schasinglulu-  ``ARCH`` : Choose the target build architecture for TF-A. It can take either
30*91f16700Schasinglulu   ``aarch64`` or ``aarch32`` as values. By default, it is defined to
31*91f16700Schasinglulu   ``aarch64``.
32*91f16700Schasinglulu
33*91f16700Schasinglulu-  ``ARM_ARCH_FEATURE``: Optional Arm Architecture build option which specifies
34*91f16700Schasinglulu   one or more feature modifiers. This option has the form ``[no]feature+...``
35*91f16700Schasinglulu   and defaults to ``none``. It translates into compiler option
36*91f16700Schasinglulu   ``-march=armvX[.Y]-a+[no]feature+...``. See compiler's documentation for the
37*91f16700Schasinglulu   list of supported feature modifiers.
38*91f16700Schasinglulu
39*91f16700Schasinglulu-  ``ARM_ARCH_MAJOR``: The major version of Arm Architecture to target when
40*91f16700Schasinglulu   compiling TF-A. Its value must be numeric, and defaults to 8 . See also,
41*91f16700Schasinglulu   *Armv8 Architecture Extensions* and *Armv7 Architecture Extensions* in
42*91f16700Schasinglulu   :ref:`Firmware Design`.
43*91f16700Schasinglulu
44*91f16700Schasinglulu-  ``ARM_ARCH_MINOR``: The minor version of Arm Architecture to target when
45*91f16700Schasinglulu   compiling TF-A. Its value must be a numeric, and defaults to 0. See also,
46*91f16700Schasinglulu   *Armv8 Architecture Extensions* in :ref:`Firmware Design`.
47*91f16700Schasinglulu
48*91f16700Schasinglulu-  ``ARM_BL2_SP_LIST_DTS``: Path to DTS file snippet to override the hardcoded
49*91f16700Schasinglulu   SP nodes in tb_fw_config.
50*91f16700Schasinglulu
51*91f16700Schasinglulu-  ``ARM_SPMC_MANIFEST_DTS`` : path to an alternate manifest file used as the
52*91f16700Schasinglulu   SPMC Core manifest. Valid when ``SPD=spmd`` is selected.
53*91f16700Schasinglulu
54*91f16700Schasinglulu-  ``BL2``: This is an optional build option which specifies the path to BL2
55*91f16700Schasinglulu   image for the ``fip`` target. In this case, the BL2 in the TF-A will not be
56*91f16700Schasinglulu   built.
57*91f16700Schasinglulu
58*91f16700Schasinglulu-  ``BL2U``: This is an optional build option which specifies the path to
59*91f16700Schasinglulu   BL2U image. In this case, the BL2U in TF-A will not be built.
60*91f16700Schasinglulu
61*91f16700Schasinglulu-  ``RESET_TO_BL2``: Boolean option to enable BL2 entrypoint as the CPU reset
62*91f16700Schasinglulu   vector instead of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
63*91f16700Schasinglulu   entrypoint) or 1 (CPU reset to BL2 entrypoint).
64*91f16700Schasinglulu   The default value is 0.
65*91f16700Schasinglulu
66*91f16700Schasinglulu-  ``BL2_RUNS_AT_EL3``: This is an implicit flag to denote that BL2 runs at EL3.
67*91f16700Schasinglulu   While it is explicitly set to 1 when RESET_TO_BL2 is set to 1 it can also be
68*91f16700Schasinglulu   true in a 4-world system where RESET_TO_BL2 is 0.
69*91f16700Schasinglulu
70*91f16700Schasinglulu-  ``BL2_ENABLE_SP_LOAD``: Boolean option to enable loading SP packages from the
71*91f16700Schasinglulu   FIP. Automatically enabled if ``SP_LAYOUT_FILE`` is provided.
72*91f16700Schasinglulu
73*91f16700Schasinglulu-  ``BL2_IN_XIP_MEM``: In some use-cases BL2 will be stored in eXecute In Place
74*91f16700Schasinglulu   (XIP) memory, like BL1. In these use-cases, it is necessary to initialize
75*91f16700Schasinglulu   the RW sections in RAM, while leaving the RO sections in place. This option
76*91f16700Schasinglulu   enable this use-case. For now, this option is only supported
77*91f16700Schasinglulu   when RESET_TO_BL2 is set to '1'.
78*91f16700Schasinglulu
79*91f16700Schasinglulu-  ``BL31``: This is an optional build option which specifies the path to
80*91f16700Schasinglulu   BL31 image for the ``fip`` target. In this case, the BL31 in TF-A will not
81*91f16700Schasinglulu   be built.
82*91f16700Schasinglulu
83*91f16700Schasinglulu-  ``BL31_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
84*91f16700Schasinglulu   file that contains the BL31 private key in PEM format or a PKCS11 URI. If
85*91f16700Schasinglulu   ``SAVE_KEYS=1``, only a file is accepted and it will be used to save the key.
86*91f16700Schasinglulu
87*91f16700Schasinglulu-  ``BL32``: This is an optional build option which specifies the path to
88*91f16700Schasinglulu   BL32 image for the ``fip`` target. In this case, the BL32 in TF-A will not
89*91f16700Schasinglulu   be built.
90*91f16700Schasinglulu
91*91f16700Schasinglulu-  ``BL32_EXTRA1``: This is an optional build option which specifies the path to
92*91f16700Schasinglulu   Trusted OS Extra1 image for the  ``fip`` target.
93*91f16700Schasinglulu
94*91f16700Schasinglulu-  ``BL32_EXTRA2``: This is an optional build option which specifies the path to
95*91f16700Schasinglulu   Trusted OS Extra2 image for the ``fip`` target.
96*91f16700Schasinglulu
97*91f16700Schasinglulu-  ``BL32_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
98*91f16700Schasinglulu   file that contains the BL32 private key in PEM format or a PKCS11 URI. If
99*91f16700Schasinglulu   ``SAVE_KEYS=1``, only a file is accepted and it will be used to save the key.
100*91f16700Schasinglulu
101*91f16700Schasinglulu-  ``BL33``: Path to BL33 image in the host file system. This is mandatory for
102*91f16700Schasinglulu   ``fip`` target in case TF-A BL2 is used.
103*91f16700Schasinglulu
104*91f16700Schasinglulu-  ``BL33_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
105*91f16700Schasinglulu   file that contains the BL33 private key in PEM format or a PKCS11 URI. If
106*91f16700Schasinglulu   ``SAVE_KEYS=1``, only a file is accepted and it will be used to save the key.
107*91f16700Schasinglulu
108*91f16700Schasinglulu-  ``BRANCH_PROTECTION``: Numeric value to enable ARMv8.3 Pointer Authentication
109*91f16700Schasinglulu   and ARMv8.5 Branch Target Identification support for TF-A BL images themselves.
110*91f16700Schasinglulu   If enabled, it is needed to use a compiler that supports the option
111*91f16700Schasinglulu   ``-mbranch-protection``. Selects the branch protection features to use:
112*91f16700Schasinglulu-  0: Default value turns off all types of branch protection
113*91f16700Schasinglulu-  1: Enables all types of branch protection features
114*91f16700Schasinglulu-  2: Return address signing to its standard level
115*91f16700Schasinglulu-  3: Extend the signing to include leaf functions
116*91f16700Schasinglulu-  4: Turn on branch target identification mechanism
117*91f16700Schasinglulu
118*91f16700Schasinglulu   The table below summarizes ``BRANCH_PROTECTION`` values, GCC compilation options
119*91f16700Schasinglulu   and resulting PAuth/BTI features.
120*91f16700Schasinglulu
121*91f16700Schasinglulu   +-------+--------------+-------+-----+
122*91f16700Schasinglulu   | Value |  GCC option  | PAuth | BTI |
123*91f16700Schasinglulu   +=======+==============+=======+=====+
124*91f16700Schasinglulu   |   0   |     none     |   N   |  N  |
125*91f16700Schasinglulu   +-------+--------------+-------+-----+
126*91f16700Schasinglulu   |   1   |   standard   |   Y   |  Y  |
127*91f16700Schasinglulu   +-------+--------------+-------+-----+
128*91f16700Schasinglulu   |   2   |   pac-ret    |   Y   |  N  |
129*91f16700Schasinglulu   +-------+--------------+-------+-----+
130*91f16700Schasinglulu   |   3   | pac-ret+leaf |   Y   |  N  |
131*91f16700Schasinglulu   +-------+--------------+-------+-----+
132*91f16700Schasinglulu   |   4   |     bti      |   N   |  Y  |
133*91f16700Schasinglulu   +-------+--------------+-------+-----+
134*91f16700Schasinglulu
135*91f16700Schasinglulu   This option defaults to 0.
136*91f16700Schasinglulu   Note that Pointer Authentication is enabled for Non-secure world
137*91f16700Schasinglulu   irrespective of the value of this option if the CPU supports it.
138*91f16700Schasinglulu
139*91f16700Schasinglulu-  ``BUILD_MESSAGE_TIMESTAMP``: String used to identify the time and date of the
140*91f16700Schasinglulu   compilation of each build. It must be set to a C string (including quotes
141*91f16700Schasinglulu   where applicable). Defaults to a string that contains the time and date of
142*91f16700Schasinglulu   the compilation.
143*91f16700Schasinglulu
144*91f16700Schasinglulu-  ``BUILD_STRING``: Input string for VERSION_STRING, which allows the TF-A
145*91f16700Schasinglulu   build to be uniquely identified. Defaults to the current git commit id.
146*91f16700Schasinglulu
147*91f16700Schasinglulu-  ``BUILD_BASE``: Output directory for the build. Defaults to ``./build``
148*91f16700Schasinglulu
149*91f16700Schasinglulu-  ``CFLAGS``: Extra user options appended on the compiler's command line in
150*91f16700Schasinglulu   addition to the options set by the build system.
151*91f16700Schasinglulu
152*91f16700Schasinglulu-  ``COLD_BOOT_SINGLE_CPU``: This option indicates whether the platform may
153*91f16700Schasinglulu   release several CPUs out of reset. It can take either 0 (several CPUs may be
154*91f16700Schasinglulu   brought up) or 1 (only one CPU will ever be brought up during cold reset).
155*91f16700Schasinglulu   Default is 0. If the platform always brings up a single CPU, there is no
156*91f16700Schasinglulu   need to distinguish between primary and secondary CPUs and the boot path can
157*91f16700Schasinglulu   be optimised. The ``plat_is_my_cpu_primary()`` and
158*91f16700Schasinglulu   ``plat_secondary_cold_boot_setup()`` platform porting interfaces do not need
159*91f16700Schasinglulu   to be implemented in this case.
160*91f16700Schasinglulu
161*91f16700Schasinglulu-  ``COT``: When Trusted Boot is enabled, selects the desired chain of trust.
162*91f16700Schasinglulu   Defaults to ``tbbr``.
163*91f16700Schasinglulu
164*91f16700Schasinglulu-  ``CRASH_REPORTING``: A non-zero value enables a console dump of processor
165*91f16700Schasinglulu   register state when an unexpected exception occurs during execution of
166*91f16700Schasinglulu   BL31. This option defaults to the value of ``DEBUG`` - i.e. by default
167*91f16700Schasinglulu   this is only enabled for a debug build of the firmware.
168*91f16700Schasinglulu
169*91f16700Schasinglulu-  ``CREATE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
170*91f16700Schasinglulu   certificate generation tool to create new keys in case no valid keys are
171*91f16700Schasinglulu   present or specified. Allowed options are '0' or '1'. Default is '1'.
172*91f16700Schasinglulu
173*91f16700Schasinglulu-  ``CTX_INCLUDE_AARCH32_REGS`` : Boolean option that, when set to 1, will cause
174*91f16700Schasinglulu   the AArch32 system registers to be included when saving and restoring the
175*91f16700Schasinglulu   CPU context. The option must be set to 0 for AArch64-only platforms (that
176*91f16700Schasinglulu   is on hardware that does not implement AArch32, or at least not at EL1 and
177*91f16700Schasinglulu   higher ELs). Default value is 1.
178*91f16700Schasinglulu
179*91f16700Schasinglulu-  ``CTX_INCLUDE_FPREGS``: Boolean option that, when set to 1, will cause the FP
180*91f16700Schasinglulu   registers to be included when saving and restoring the CPU context. Default
181*91f16700Schasinglulu   is 0.
182*91f16700Schasinglulu
183*91f16700Schasinglulu-  ``CTX_INCLUDE_MTE_REGS``: Numeric value to include Memory Tagging Extension
184*91f16700Schasinglulu   registers in cpu context. This must be enabled, if the platform wants to use
185*91f16700Schasinglulu   this feature in the Secure world and MTE is enabled at ELX. This flag can
186*91f16700Schasinglulu   take values 0 to 2, to align with the ``FEATURE_DETECTION`` mechanism.
187*91f16700Schasinglulu   Default value is 0.
188*91f16700Schasinglulu
189*91f16700Schasinglulu-  ``CTX_INCLUDE_NEVE_REGS``: Numeric value, when set will cause the Armv8.4-NV
190*91f16700Schasinglulu   registers to be saved/restored when entering/exiting an EL2 execution
191*91f16700Schasinglulu   context. This flag can take values 0 to 2, to align with the
192*91f16700Schasinglulu   ``FEATURE_DETECTION`` mechanism. Default value is 0.
193*91f16700Schasinglulu
194*91f16700Schasinglulu-  ``CTX_INCLUDE_PAUTH_REGS``: Numeric value to enable the Pointer
195*91f16700Schasinglulu   Authentication for Secure world. This will cause the ARMv8.3-PAuth registers
196*91f16700Schasinglulu   to be included when saving and restoring the CPU context as part of world
197*91f16700Schasinglulu   switch. This flag can take values 0 to 2, to align with ``FEATURE_DETECTION``
198*91f16700Schasinglulu   mechanism. Default value is 0.
199*91f16700Schasinglulu
200*91f16700Schasinglulu   Note that Pointer Authentication is enabled for Non-secure world irrespective
201*91f16700Schasinglulu   of the value of this flag if the CPU supports it.
202*91f16700Schasinglulu
203*91f16700Schasinglulu-  ``DEBUG``: Chooses between a debug and release build. It can take either 0
204*91f16700Schasinglulu   (release) or 1 (debug) as values. 0 is the default.
205*91f16700Schasinglulu
206*91f16700Schasinglulu-  ``DECRYPTION_SUPPORT``: This build flag enables the user to select the
207*91f16700Schasinglulu   authenticated decryption algorithm to be used to decrypt firmware/s during
208*91f16700Schasinglulu   boot. It accepts 2 values: ``aes_gcm`` and ``none``. The default value of
209*91f16700Schasinglulu   this flag is ``none`` to disable firmware decryption which is an optional
210*91f16700Schasinglulu   feature as per TBBR.
211*91f16700Schasinglulu
212*91f16700Schasinglulu-  ``DISABLE_BIN_GENERATION``: Boolean option to disable the generation
213*91f16700Schasinglulu   of the binary image. If set to 1, then only the ELF image is built.
214*91f16700Schasinglulu   0 is the default.
215*91f16700Schasinglulu
216*91f16700Schasinglulu-  ``DISABLE_MTPMU``: Numeric option to disable ``FEAT_MTPMU`` (Multi Threaded
217*91f16700Schasinglulu   PMU). ``FEAT_MTPMU`` is an optional feature available on Armv8.6 onwards.
218*91f16700Schasinglulu   This flag can take values 0 to 2, to align with the ``FEATURE_DETECTION``
219*91f16700Schasinglulu   mechanism. Default is ``0``.
220*91f16700Schasinglulu
221*91f16700Schasinglulu-  ``DYN_DISABLE_AUTH``: Provides the capability to dynamically disable Trusted
222*91f16700Schasinglulu   Board Boot authentication at runtime. This option is meant to be enabled only
223*91f16700Schasinglulu   for development platforms. ``TRUSTED_BOARD_BOOT`` flag must be set if this
224*91f16700Schasinglulu   flag has to be enabled. 0 is the default.
225*91f16700Schasinglulu
226*91f16700Schasinglulu-  ``E``: Boolean option to make warnings into errors. Default is 1.
227*91f16700Schasinglulu
228*91f16700Schasinglulu   When specifying higher warnings levels (``W=1`` and higher), this option
229*91f16700Schasinglulu   defaults to 0. This is done to encourage contributors to use them, as they
230*91f16700Schasinglulu   are expected to produce warnings that would otherwise fail the build. New
231*91f16700Schasinglulu   contributions are still expected to build with ``W=0`` and ``E=1`` (the
232*91f16700Schasinglulu   default).
233*91f16700Schasinglulu
234*91f16700Schasinglulu-  ``EL3_PAYLOAD_BASE``: This option enables booting an EL3 payload instead of
235*91f16700Schasinglulu   the normal boot flow. It must specify the entry point address of the EL3
236*91f16700Schasinglulu   payload. Please refer to the "Booting an EL3 payload" section for more
237*91f16700Schasinglulu   details.
238*91f16700Schasinglulu
239*91f16700Schasinglulu-  ``ENABLE_AMU_AUXILIARY_COUNTERS``: Enables support for AMU auxiliary counters
240*91f16700Schasinglulu   (also known as group 1 counters). These are implementation-defined counters,
241*91f16700Schasinglulu   and as such require additional platform configuration. Default is 0.
242*91f16700Schasinglulu
243*91f16700Schasinglulu-  ``ENABLE_AMU_FCONF``: Enables configuration of the AMU through FCONF, which
244*91f16700Schasinglulu   allows platforms with auxiliary counters to describe them via the
245*91f16700Schasinglulu   ``HW_CONFIG`` device tree blob. Default is 0.
246*91f16700Schasinglulu
247*91f16700Schasinglulu-  ``ENABLE_ASSERTIONS``: This option controls whether or not calls to ``assert()``
248*91f16700Schasinglulu   are compiled out. For debug builds, this option defaults to 1, and calls to
249*91f16700Schasinglulu   ``assert()`` are left in place. For release builds, this option defaults to 0
250*91f16700Schasinglulu   and calls to ``assert()`` function are compiled out. This option can be set
251*91f16700Schasinglulu   independently of ``DEBUG``. It can also be used to hide any auxiliary code
252*91f16700Schasinglulu   that is only required for the assertion and does not fit in the assertion
253*91f16700Schasinglulu   itself.
254*91f16700Schasinglulu
255*91f16700Schasinglulu-  ``ENABLE_BACKTRACE``: This option controls whether to enable backtrace
256*91f16700Schasinglulu   dumps or not. It is supported in both AArch64 and AArch32. However, in
257*91f16700Schasinglulu   AArch32 the format of the frame records are not defined in the AAPCS and they
258*91f16700Schasinglulu   are defined by the implementation. This implementation of backtrace only
259*91f16700Schasinglulu   supports the format used by GCC when T32 interworking is disabled. For this
260*91f16700Schasinglulu   reason enabling this option in AArch32 will force the compiler to only
261*91f16700Schasinglulu   generate A32 code. This option is enabled by default only in AArch64 debug
262*91f16700Schasinglulu   builds, but this behaviour can be overridden in each platform's Makefile or
263*91f16700Schasinglulu   in the build command line.
264*91f16700Schasinglulu
265*91f16700Schasinglulu-  ``ENABLE_FEAT_AMU``: Numeric value to enable Activity Monitor Unit
266*91f16700Schasinglulu   extensions. This flag can take the values 0 to 2, to align with the
267*91f16700Schasinglulu   ``FEATURE_DETECTION`` mechanism. This is an optional architectural feature
268*91f16700Schasinglulu   available on v8.4 onwards. Some v8.2 implementations also implement an AMU
269*91f16700Schasinglulu   and this option can be used to enable this feature on those systems as well.
270*91f16700Schasinglulu   This flag can take the values 0 to 2, the default is 0.
271*91f16700Schasinglulu
272*91f16700Schasinglulu-  ``ENABLE_FEAT_AMUv1p1``: Numeric value to enable the ``FEAT_AMUv1p1``
273*91f16700Schasinglulu   extension. ``FEAT_AMUv1p1`` is an optional feature available on Arm v8.6
274*91f16700Schasinglulu   onwards. This flag can take the values 0 to 2, to align with the
275*91f16700Schasinglulu   ``FEATURE_DETECTION`` mechanism. Default value is ``0``.
276*91f16700Schasinglulu
277*91f16700Schasinglulu-  ``ENABLE_FEAT_CSV2_2``: Numeric value to enable the ``FEAT_CSV2_2``
278*91f16700Schasinglulu   extension. It allows access to the SCXTNUM_EL2 (Software Context Number)
279*91f16700Schasinglulu   register during EL2 context save/restore operations. ``FEAT_CSV2_2`` is an
280*91f16700Schasinglulu   optional feature available on Arm v8.0 onwards. This flag can take values
281*91f16700Schasinglulu   0 to 2, to align with the ``FEATURE_DETECTION`` mechanism.
282*91f16700Schasinglulu   Default value is ``0``.
283*91f16700Schasinglulu
284*91f16700Schasinglulu-  ``ENABLE_FEAT_DIT``: Numeric value to enable ``FEAT_DIT`` (Data Independent
285*91f16700Schasinglulu   Timing) extension. It allows setting the ``DIT`` bit of PSTATE in EL3.
286*91f16700Schasinglulu   ``FEAT_DIT`` is a mandatory  architectural feature and is enabled from v8.4
287*91f16700Schasinglulu   and upwards. This flag can take the values 0 to 2, to align  with the
288*91f16700Schasinglulu   ``FEATURE_DETECTION`` mechanism. Default value is ``0``.
289*91f16700Schasinglulu
290*91f16700Schasinglulu-  ``ENABLE_FEAT_ECV``: Numeric value to enable support for the Enhanced Counter
291*91f16700Schasinglulu   Virtualization feature, allowing for access to the CNTPOFF_EL2 (Counter-timer
292*91f16700Schasinglulu   Physical Offset register) during EL2 to EL3 context save/restore operations.
293*91f16700Schasinglulu   Its a mandatory architectural feature and is enabled from v8.6 and upwards.
294*91f16700Schasinglulu   This flag can take the values 0 to 2, to align  with the ``FEATURE_DETECTION``
295*91f16700Schasinglulu   mechanism. Default value is ``0``.
296*91f16700Schasinglulu
297*91f16700Schasinglulu-  ``ENABLE_FEAT_FGT``: Numeric value to enable support for FGT (Fine Grain Traps)
298*91f16700Schasinglulu   feature allowing for access to the HDFGRTR_EL2 (Hypervisor Debug Fine-Grained
299*91f16700Schasinglulu   Read Trap Register) during EL2 to EL3 context save/restore operations.
300*91f16700Schasinglulu   Its a mandatory architectural feature and is enabled from v8.6 and upwards.
301*91f16700Schasinglulu   This flag can take the values 0 to 2, to align  with the ``FEATURE_DETECTION``
302*91f16700Schasinglulu   mechanism. Default value is ``0``.
303*91f16700Schasinglulu
304*91f16700Schasinglulu-  ``ENABLE_FEAT_HCX``: Numeric value to set the bit SCR_EL3.HXEn in EL3 to
305*91f16700Schasinglulu   allow access to HCRX_EL2 (extended hypervisor control register) from EL2 as
306*91f16700Schasinglulu   well as adding HCRX_EL2 to the EL2 context save/restore operations. Its a
307*91f16700Schasinglulu   mandatory architectural feature and is enabled from v8.7 and upwards. This
308*91f16700Schasinglulu   flag can take the values 0 to 2, to align  with the ``FEATURE_DETECTION``
309*91f16700Schasinglulu   mechanism. Default value is ``0``.
310*91f16700Schasinglulu
311*91f16700Schasinglulu-  ``ENABLE_FEAT_MTE_PERM``: Numeric value to enable support for
312*91f16700Schasinglulu   ``FEAT_MTE_PERM``, which introduces Allocation tag access permission to
313*91f16700Schasinglulu   memory region attributes. ``FEAT_MTE_PERM`` is a optional architectural
314*91f16700Schasinglulu   feature available from v8.9 and upwards.  This flag can take the values 0 to
315*91f16700Schasinglulu   2, to align  with the ``FEATURE_DETECTION`` mechanism. Default value is
316*91f16700Schasinglulu   ``0``.
317*91f16700Schasinglulu
318*91f16700Schasinglulu-  ``ENABLE_FEAT_PAN``: Numeric value to enable the ``FEAT_PAN`` (Privileged
319*91f16700Schasinglulu   Access Never) extension. ``FEAT_PAN`` adds a bit to PSTATE, generating a
320*91f16700Schasinglulu   permission fault for any privileged data access from EL1/EL2 to virtual
321*91f16700Schasinglulu   memory address, accessible at EL0, provided (HCR_EL2.E2H=1). It is a
322*91f16700Schasinglulu   mandatory architectural feature and is enabled from v8.1 and upwards. This
323*91f16700Schasinglulu   flag can take values 0 to 2, to align  with the ``FEATURE_DETECTION``
324*91f16700Schasinglulu   mechanism. Default value is ``0``.
325*91f16700Schasinglulu
326*91f16700Schasinglulu-  ``ENABLE_FEAT_RNG``: Numeric value to enable the ``FEAT_RNG`` extension.
327*91f16700Schasinglulu   ``FEAT_RNG`` is an optional feature available on Arm v8.5 onwards. This
328*91f16700Schasinglulu   flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
329*91f16700Schasinglulu   mechanism. Default value is ``0``.
330*91f16700Schasinglulu
331*91f16700Schasinglulu-  ``ENABLE_FEAT_RNG_TRAP``: Numeric value to enable the ``FEAT_RNG_TRAP``
332*91f16700Schasinglulu   extension. This feature is only supported in AArch64 state. This flag can
333*91f16700Schasinglulu   take values 0 to 2, to align with the ``FEATURE_DETECTION`` mechanism.
334*91f16700Schasinglulu   Default value is ``0``. ``FEAT_RNG_TRAP`` is an optional feature from
335*91f16700Schasinglulu   Armv8.5 onwards.
336*91f16700Schasinglulu
337*91f16700Schasinglulu-  ``ENABLE_FEAT_SB``: Boolean option to let the TF-A code use the ``FEAT_SB``
338*91f16700Schasinglulu   (Speculation Barrier) instruction ``FEAT_SB`` is an optional feature and
339*91f16700Schasinglulu   defaults to ``0`` for pre-Armv8.5 CPUs, but is mandatory for Armv8.5 or
340*91f16700Schasinglulu   later CPUs. It is enabled from v8.5 and upwards and if needed can be
341*91f16700Schasinglulu   overidden from platforms explicitly.
342*91f16700Schasinglulu
343*91f16700Schasinglulu-  ``ENABLE_FEAT_SEL2``: Numeric value to enable the ``FEAT_SEL2`` (Secure EL2)
344*91f16700Schasinglulu   extension. ``FEAT_SEL2`` is a mandatory feature available on Arm v8.4.
345*91f16700Schasinglulu   This flag can take values 0 to 2, to align with the ``FEATURE_DETECTION``
346*91f16700Schasinglulu   mechanism. Default is ``0``.
347*91f16700Schasinglulu
348*91f16700Schasinglulu-  ``ENABLE_FEAT_TWED``: Numeric value to enable the ``FEAT_TWED`` (Delayed
349*91f16700Schasinglulu   trapping of WFE Instruction) extension. ``FEAT_TWED`` is a optional feature
350*91f16700Schasinglulu   available on Arm v8.6. This flag can take values 0 to 2, to align with the
351*91f16700Schasinglulu   ``FEATURE_DETECTION`` mechanism. Default is ``0``.
352*91f16700Schasinglulu
353*91f16700Schasinglulu    When ``ENABLE_FEAT_TWED`` is set to ``1``, WFE instruction trapping gets
354*91f16700Schasinglulu    delayed by the amount of value in ``TWED_DELAY``.
355*91f16700Schasinglulu
356*91f16700Schasinglulu-  ``ENABLE_FEAT_VHE``: Numeric value to enable the ``FEAT_VHE`` (Virtualization
357*91f16700Schasinglulu   Host Extensions) extension. It allows access to CONTEXTIDR_EL2 register
358*91f16700Schasinglulu   during EL2 context save/restore operations.``FEAT_VHE`` is a mandatory
359*91f16700Schasinglulu   architectural feature and is enabled from v8.1 and upwards. It can take
360*91f16700Schasinglulu   values 0 to 2, to align  with the ``FEATURE_DETECTION`` mechanism.
361*91f16700Schasinglulu   Default value is ``0``.
362*91f16700Schasinglulu
363*91f16700Schasinglulu-  ``ENABLE_FEAT_TCR2``: Numeric value to set the bit SCR_EL3.ENTCR2 in EL3 to
364*91f16700Schasinglulu   allow access to TCR2_EL2 (extended translation control) from EL2 as
365*91f16700Schasinglulu   well as adding TCR2_EL2 to the EL2 context save/restore operations. Its a
366*91f16700Schasinglulu   mandatory architectural feature and is enabled from v8.9 and upwards. This
367*91f16700Schasinglulu   flag can take the values 0 to 2, to align  with the ``FEATURE_DETECTION``
368*91f16700Schasinglulu   mechanism. Default value is ``0``.
369*91f16700Schasinglulu
370*91f16700Schasinglulu-  ``ENABLE_FEAT_S2PIE``: Numeric value to enable support for FEAT_S2PIE
371*91f16700Schasinglulu   at EL2 and below, and context switch relevant registers.  This flag
372*91f16700Schasinglulu   can take the values 0 to 2, to align  with the ``FEATURE_DETECTION``
373*91f16700Schasinglulu   mechanism. Default value is ``0``.
374*91f16700Schasinglulu
375*91f16700Schasinglulu-  ``ENABLE_FEAT_S1PIE``: Numeric value to enable support for FEAT_S1PIE
376*91f16700Schasinglulu   at EL2 and below, and context switch relevant registers.  This flag
377*91f16700Schasinglulu   can take the values 0 to 2, to align  with the ``FEATURE_DETECTION``
378*91f16700Schasinglulu   mechanism. Default value is ``0``.
379*91f16700Schasinglulu
380*91f16700Schasinglulu-  ``ENABLE_FEAT_S2POE``: Numeric value to enable support for FEAT_S2POE
381*91f16700Schasinglulu   at EL2 and below, and context switch relevant registers.  This flag
382*91f16700Schasinglulu   can take the values 0 to 2, to align  with the ``FEATURE_DETECTION``
383*91f16700Schasinglulu   mechanism. Default value is ``0``.
384*91f16700Schasinglulu
385*91f16700Schasinglulu-  ``ENABLE_FEAT_S1POE``: Numeric value to enable support for FEAT_S1POE
386*91f16700Schasinglulu   at EL2 and below, and context switch relevant registers.  This flag
387*91f16700Schasinglulu   can take the values 0 to 2, to align  with the ``FEATURE_DETECTION``
388*91f16700Schasinglulu   mechanism. Default value is ``0``.
389*91f16700Schasinglulu
390*91f16700Schasinglulu-  ``ENABLE_FEAT_GCS``: Numeric value to set the bit SCR_EL3.GCSEn in EL3 to
391*91f16700Schasinglulu   allow use of Guarded Control Stack from EL2 as well as adding the GCS
392*91f16700Schasinglulu   registers to the EL2 context save/restore operations. This flag can take
393*91f16700Schasinglulu   the values 0 to 2, to align  with the ``FEATURE_DETECTION`` mechanism.
394*91f16700Schasinglulu   Default value is ``0``.
395*91f16700Schasinglulu
396*91f16700Schasinglulu-  ``ENABLE_LTO``: Boolean option to enable Link Time Optimization (LTO)
397*91f16700Schasinglulu   support in GCC for TF-A. This option is currently only supported for
398*91f16700Schasinglulu   AArch64. Default is 0.
399*91f16700Schasinglulu
400*91f16700Schasinglulu-  ``ENABLE_FEAT_MPAM``: Numeric value to enable lower ELs to use MPAM
401*91f16700Schasinglulu   feature. MPAM is an optional Armv8.4 extension that enables various memory
402*91f16700Schasinglulu   system components and resources to define partitions; software running at
403*91f16700Schasinglulu   various ELs can assign themselves to desired partition to control their
404*91f16700Schasinglulu   performance aspects.
405*91f16700Schasinglulu
406*91f16700Schasinglulu   This flag can take values 0 to 2, to align  with the ``FEATURE_DETECTION``
407*91f16700Schasinglulu   mechanism. When this option is set to ``1`` or ``2``, EL3 allows lower ELs to
408*91f16700Schasinglulu   access their own MPAM registers without trapping into EL3. This option
409*91f16700Schasinglulu   doesn't make use of partitioning in EL3, however. Platform initialisation
410*91f16700Schasinglulu   code should configure and use partitions in EL3 as required. This option
411*91f16700Schasinglulu   defaults to ``2`` since MPAM is enabled by default for NS world only.
412*91f16700Schasinglulu   The flag is automatically disabled when the target
413*91f16700Schasinglulu   architecture is AArch32.
414*91f16700Schasinglulu
415*91f16700Schasinglulu-  ``ENABLE_MPMM``: Boolean option to enable support for the Maximum Power
416*91f16700Schasinglulu   Mitigation Mechanism supported by certain Arm cores, which allows the SoC
417*91f16700Schasinglulu   firmware to detect and limit high activity events to assist in SoC processor
418*91f16700Schasinglulu   power domain dynamic power budgeting and limit the triggering of whole-rail
419*91f16700Schasinglulu   (i.e. clock chopping) responses to overcurrent conditions. Defaults to ``0``.
420*91f16700Schasinglulu
421*91f16700Schasinglulu-  ``ENABLE_MPMM_FCONF``: Enables configuration of MPMM through FCONF, which
422*91f16700Schasinglulu   allows platforms with cores supporting MPMM to describe them via the
423*91f16700Schasinglulu   ``HW_CONFIG`` device tree blob. Default is 0.
424*91f16700Schasinglulu
425*91f16700Schasinglulu-  ``ENABLE_PIE``: Boolean option to enable Position Independent Executable(PIE)
426*91f16700Schasinglulu   support within generic code in TF-A. This option is currently only supported
427*91f16700Schasinglulu   in BL2, BL31, and BL32 (TSP) for AARCH64 binaries, and
428*91f16700Schasinglulu   in BL32 (SP_min) for AARCH32. Default is 0.
429*91f16700Schasinglulu
430*91f16700Schasinglulu-  ``ENABLE_PMF``: Boolean option to enable support for optional Performance
431*91f16700Schasinglulu   Measurement Framework(PMF). Default is 0.
432*91f16700Schasinglulu
433*91f16700Schasinglulu-  ``ENABLE_PSCI_STAT``: Boolean option to enable support for optional PSCI
434*91f16700Schasinglulu   functions ``PSCI_STAT_RESIDENCY`` and ``PSCI_STAT_COUNT``. Default is 0.
435*91f16700Schasinglulu   In the absence of an alternate stat collection backend, ``ENABLE_PMF`` must
436*91f16700Schasinglulu   be enabled. If ``ENABLE_PMF`` is set, the residency statistics are tracked in
437*91f16700Schasinglulu   software.
438*91f16700Schasinglulu
439*91f16700Schasinglulu-  ``ENABLE_RUNTIME_INSTRUMENTATION``: Boolean option to enable runtime
440*91f16700Schasinglulu   instrumentation which injects timestamp collection points into TF-A to
441*91f16700Schasinglulu   allow runtime performance to be measured. Currently, only PSCI is
442*91f16700Schasinglulu   instrumented. Enabling this option enables the ``ENABLE_PMF`` build option
443*91f16700Schasinglulu   as well. Default is 0.
444*91f16700Schasinglulu
445*91f16700Schasinglulu-  ``ENABLE_SPE_FOR_NS`` : Numeric value to enable Statistical Profiling
446*91f16700Schasinglulu   extensions. This is an optional architectural feature for AArch64.
447*91f16700Schasinglulu   This flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
448*91f16700Schasinglulu   mechanism. The default is 2 but is automatically disabled when the target
449*91f16700Schasinglulu   architecture is AArch32.
450*91f16700Schasinglulu
451*91f16700Schasinglulu-  ``ENABLE_SVE_FOR_NS``: Numeric value to enable Scalable Vector Extension
452*91f16700Schasinglulu   (SVE) for the Non-secure world only. SVE is an optional architectural feature
453*91f16700Schasinglulu   for AArch64. Note that when SVE is enabled for the Non-secure world, access
454*91f16700Schasinglulu   to SIMD and floating-point functionality from the Secure world is disabled by
455*91f16700Schasinglulu   default and controlled with ENABLE_SVE_FOR_SWD.
456*91f16700Schasinglulu   This is to avoid corruption of the Non-secure world data in the Z-registers
457*91f16700Schasinglulu   which are aliased by the SIMD and FP registers. The build option is not
458*91f16700Schasinglulu   compatible with the ``CTX_INCLUDE_FPREGS`` build option, and will raise an
459*91f16700Schasinglulu   assert on platforms where SVE is implemented and ``ENABLE_SVE_FOR_NS``
460*91f16700Schasinglulu   enabled.  This flag can take the values 0 to 2, to align with the
461*91f16700Schasinglulu   ``FEATURE_DETECTION`` mechanism. At this time, this build option cannot be
462*91f16700Schasinglulu   used on systems that have SPM_MM enabled. The default is 1.
463*91f16700Schasinglulu
464*91f16700Schasinglulu-  ``ENABLE_SVE_FOR_SWD``: Boolean option to enable SVE for the Secure world.
465*91f16700Schasinglulu   SVE is an optional architectural feature for AArch64. Note that this option
466*91f16700Schasinglulu   requires ENABLE_SVE_FOR_NS to be enabled. The default is 0 and it is
467*91f16700Schasinglulu   automatically disabled when the target architecture is AArch32.
468*91f16700Schasinglulu
469*91f16700Schasinglulu-  ``ENABLE_STACK_PROTECTOR``: String option to enable the stack protection
470*91f16700Schasinglulu   checks in GCC. Allowed values are "all", "strong", "default" and "none". The
471*91f16700Schasinglulu   default value is set to "none". "strong" is the recommended stack protection
472*91f16700Schasinglulu   level if this feature is desired. "none" disables the stack protection. For
473*91f16700Schasinglulu   all values other than "none", the ``plat_get_stack_protector_canary()``
474*91f16700Schasinglulu   platform hook needs to be implemented. The value is passed as the last
475*91f16700Schasinglulu   component of the option ``-fstack-protector-$ENABLE_STACK_PROTECTOR``.
476*91f16700Schasinglulu
477*91f16700Schasinglulu-  ``ENCRYPT_BL31``: Binary flag to enable encryption of BL31 firmware. This
478*91f16700Schasinglulu   flag depends on ``DECRYPTION_SUPPORT`` build flag.
479*91f16700Schasinglulu
480*91f16700Schasinglulu-  ``ENCRYPT_BL32``: Binary flag to enable encryption of Secure BL32 payload.
481*91f16700Schasinglulu   This flag depends on ``DECRYPTION_SUPPORT`` build flag.
482*91f16700Schasinglulu
483*91f16700Schasinglulu-  ``ENC_KEY``: A 32-byte (256-bit) symmetric key in hex string format. It could
484*91f16700Schasinglulu   either be SSK or BSSK depending on ``FW_ENC_STATUS`` flag. This value depends
485*91f16700Schasinglulu   on ``DECRYPTION_SUPPORT`` build flag.
486*91f16700Schasinglulu
487*91f16700Schasinglulu-  ``ENC_NONCE``: A 12-byte (96-bit) encryption nonce or Initialization Vector
488*91f16700Schasinglulu   (IV) in hex string format. This value depends on ``DECRYPTION_SUPPORT``
489*91f16700Schasinglulu   build flag.
490*91f16700Schasinglulu
491*91f16700Schasinglulu-  ``ERROR_DEPRECATED``: This option decides whether to treat the usage of
492*91f16700Schasinglulu   deprecated platform APIs, helper functions or drivers within Trusted
493*91f16700Schasinglulu   Firmware as error. It can take the value 1 (flag the use of deprecated
494*91f16700Schasinglulu   APIs as error) or 0. The default is 0.
495*91f16700Schasinglulu
496*91f16700Schasinglulu-  ``ETHOSN_NPU_DRIVER``: boolean option to enable a SiP service that can
497*91f16700Schasinglulu   configure an Arm® Ethos™-N NPU. To use this service the target platform's
498*91f16700Schasinglulu   ``HW_CONFIG`` must include the device tree nodes for the NPU. Currently, only
499*91f16700Schasinglulu   the Arm Juno platform has this included in its ``HW_CONFIG`` and the platform
500*91f16700Schasinglulu   only loads the ``HW_CONFIG`` in AArch64 builds. Default is 0.
501*91f16700Schasinglulu
502*91f16700Schasinglulu-  ``ETHOSN_NPU_TZMP1``: boolean option to enable TZMP1 support for the
503*91f16700Schasinglulu   Arm® Ethos™-N NPU. Requires ``ETHOSN_NPU_DRIVER`` and
504*91f16700Schasinglulu   ``TRUSTED_BOARD_BOOT`` to be enabled.
505*91f16700Schasinglulu
506*91f16700Schasinglulu-  ``ETHOSN_NPU_FW``: location of the NPU firmware binary
507*91f16700Schasinglulu   (```ethosn.bin```). This firmware image will be included in the FIP and
508*91f16700Schasinglulu   loaded at runtime.
509*91f16700Schasinglulu
510*91f16700Schasinglulu-  ``EL3_EXCEPTION_HANDLING``: When set to ``1``, enable handling of exceptions
511*91f16700Schasinglulu   targeted at EL3. When set ``0`` (default), no exceptions are expected or
512*91f16700Schasinglulu   handled at EL3, and a panic will result. The exception to this rule is when
513*91f16700Schasinglulu   ``SPMD_SPM_AT_SEL2`` is set to ``1``, in which case, only exceptions
514*91f16700Schasinglulu   occuring during normal world execution, are trapped to EL3. Any exception
515*91f16700Schasinglulu   trapped during secure world execution are trapped to the SPMC. This is
516*91f16700Schasinglulu   supported only for AArch64 builds.
517*91f16700Schasinglulu
518*91f16700Schasinglulu-  ``EVENT_LOG_LEVEL``: Chooses the log level to use for Measured Boot when
519*91f16700Schasinglulu   ``MEASURED_BOOT`` is enabled. For a list of valid values, see ``LOG_LEVEL``.
520*91f16700Schasinglulu   Default value is 40 (LOG_LEVEL_INFO).
521*91f16700Schasinglulu
522*91f16700Schasinglulu-  ``FAULT_INJECTION_SUPPORT``: ARMv8.4 extensions introduced support for fault
523*91f16700Schasinglulu   injection from lower ELs, and this build option enables lower ELs to use
524*91f16700Schasinglulu   Error Records accessed via System Registers to inject faults. This is
525*91f16700Schasinglulu   applicable only to AArch64 builds.
526*91f16700Schasinglulu
527*91f16700Schasinglulu   This feature is intended for testing purposes only, and is advisable to keep
528*91f16700Schasinglulu   disabled for production images.
529*91f16700Schasinglulu
530*91f16700Schasinglulu-  ``FIP_NAME``: This is an optional build option which specifies the FIP
531*91f16700Schasinglulu   filename for the ``fip`` target. Default is ``fip.bin``.
532*91f16700Schasinglulu
533*91f16700Schasinglulu-  ``FWU_FIP_NAME``: This is an optional build option which specifies the FWU
534*91f16700Schasinglulu   FIP filename for the ``fwu_fip`` target. Default is ``fwu_fip.bin``.
535*91f16700Schasinglulu
536*91f16700Schasinglulu-  ``FW_ENC_STATUS``: Top level firmware's encryption numeric flag, values:
537*91f16700Schasinglulu
538*91f16700Schasinglulu   ::
539*91f16700Schasinglulu
540*91f16700Schasinglulu     0: Encryption is done with Secret Symmetric Key (SSK) which is common
541*91f16700Schasinglulu        for a class of devices.
542*91f16700Schasinglulu     1: Encryption is done with Binding Secret Symmetric Key (BSSK) which is
543*91f16700Schasinglulu        unique per device.
544*91f16700Schasinglulu
545*91f16700Schasinglulu   This flag depends on ``DECRYPTION_SUPPORT`` build flag.
546*91f16700Schasinglulu
547*91f16700Schasinglulu-  ``GENERATE_COT``: Boolean flag used to build and execute the ``cert_create``
548*91f16700Schasinglulu   tool to create certificates as per the Chain of Trust described in
549*91f16700Schasinglulu   :ref:`Trusted Board Boot`. The build system then calls ``fiptool`` to
550*91f16700Schasinglulu   include the certificates in the FIP and FWU_FIP. Default value is '0'.
551*91f16700Schasinglulu
552*91f16700Schasinglulu   Specify both ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=1`` to include support
553*91f16700Schasinglulu   for the Trusted Board Boot feature in the BL1 and BL2 images, to generate
554*91f16700Schasinglulu   the corresponding certificates, and to include those certificates in the
555*91f16700Schasinglulu   FIP and FWU_FIP.
556*91f16700Schasinglulu
557*91f16700Schasinglulu   Note that if ``TRUSTED_BOARD_BOOT=0`` and ``GENERATE_COT=1``, the BL1 and BL2
558*91f16700Schasinglulu   images will not include support for Trusted Board Boot. The FIP will still
559*91f16700Schasinglulu   include the corresponding certificates. This FIP can be used to verify the
560*91f16700Schasinglulu   Chain of Trust on the host machine through other mechanisms.
561*91f16700Schasinglulu
562*91f16700Schasinglulu   Note that if ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=0``, the BL1 and BL2
563*91f16700Schasinglulu   images will include support for Trusted Board Boot, but the FIP and FWU_FIP
564*91f16700Schasinglulu   will not include the corresponding certificates, causing a boot failure.
565*91f16700Schasinglulu
566*91f16700Schasinglulu-  ``GICV2_G0_FOR_EL3``: Unlike GICv3, the GICv2 architecture doesn't have
567*91f16700Schasinglulu   inherent support for specific EL3 type interrupts. Setting this build option
568*91f16700Schasinglulu   to ``1`` assumes GICv2 *Group 0* interrupts are expected to target EL3, both
569*91f16700Schasinglulu   by :ref:`platform abstraction layer<platform Interrupt Controller API>` and
570*91f16700Schasinglulu   :ref:`Interrupt Management Framework<Interrupt Management Framework>`.
571*91f16700Schasinglulu   This allows GICv2 platforms to enable features requiring EL3 interrupt type.
572*91f16700Schasinglulu   This also means that all GICv2 Group 0 interrupts are delivered to EL3, and
573*91f16700Schasinglulu   the Secure Payload interrupts needs to be synchronously handed over to Secure
574*91f16700Schasinglulu   EL1 for handling. The default value of this option is ``0``, which means the
575*91f16700Schasinglulu   Group 0 interrupts are assumed to be handled by Secure EL1.
576*91f16700Schasinglulu
577*91f16700Schasinglulu-  ``HANDLE_EA_EL3_FIRST_NS``: When set to ``1``, External Aborts and SError
578*91f16700Schasinglulu   Interrupts, resulting from errors in NS world, will be always trapped in
579*91f16700Schasinglulu   EL3 i.e. in BL31 at runtime. When set to ``0`` (default), these exceptions
580*91f16700Schasinglulu   will be trapped in the current exception level (or in EL1 if the current
581*91f16700Schasinglulu   exception level is EL0).
582*91f16700Schasinglulu
583*91f16700Schasinglulu-  ``HW_ASSISTED_COHERENCY``: On most Arm systems to-date, platform-specific
584*91f16700Schasinglulu   software operations are required for CPUs to enter and exit coherency.
585*91f16700Schasinglulu   However, newer systems exist where CPUs' entry to and exit from coherency
586*91f16700Schasinglulu   is managed in hardware. Such systems require software to only initiate these
587*91f16700Schasinglulu   operations, and the rest is managed in hardware, minimizing active software
588*91f16700Schasinglulu   management. In such systems, this boolean option enables TF-A to carry out
589*91f16700Schasinglulu   build and run-time optimizations during boot and power management operations.
590*91f16700Schasinglulu   This option defaults to 0 and if it is enabled, then it implies
591*91f16700Schasinglulu   ``WARMBOOT_ENABLE_DCACHE_EARLY`` is also enabled.
592*91f16700Schasinglulu
593*91f16700Schasinglulu   If this flag is disabled while the platform which TF-A is compiled for
594*91f16700Schasinglulu   includes cores that manage coherency in hardware, then a compilation error is
595*91f16700Schasinglulu   generated. This is based on the fact that a system cannot have, at the same
596*91f16700Schasinglulu   time, cores that manage coherency in hardware and cores that don't. In other
597*91f16700Schasinglulu   words, a platform cannot have, at the same time, cores that require
598*91f16700Schasinglulu   ``HW_ASSISTED_COHERENCY=1`` and cores that require
599*91f16700Schasinglulu   ``HW_ASSISTED_COHERENCY=0``.
600*91f16700Schasinglulu
601*91f16700Schasinglulu   Note that, when ``HW_ASSISTED_COHERENCY`` is enabled, version 2 of
602*91f16700Schasinglulu   translation library (xlat tables v2) must be used; version 1 of translation
603*91f16700Schasinglulu   library is not supported.
604*91f16700Schasinglulu
605*91f16700Schasinglulu-  ``IMPDEF_SYSREG_TRAP``: Numeric value to enable the handling traps for
606*91f16700Schasinglulu   implementation defined system register accesses from lower ELs. Default
607*91f16700Schasinglulu   value is ``0``.
608*91f16700Schasinglulu
609*91f16700Schasinglulu-  ``INVERTED_MEMMAP``: memmap tool print by default lower addresses at the
610*91f16700Schasinglulu   bottom, higher addresses at the top. This build flag can be set to '1' to
611*91f16700Schasinglulu   invert this behavior. Lower addresses will be printed at the top and higher
612*91f16700Schasinglulu   addresses at the bottom.
613*91f16700Schasinglulu
614*91f16700Schasinglulu-  ``KEY_ALG``: This build flag enables the user to select the algorithm to be
615*91f16700Schasinglulu   used for generating the PKCS keys and subsequent signing of the certificate.
616*91f16700Schasinglulu   It accepts 5 values: ``rsa``, ``rsa_1_5``, ``ecdsa``, ``ecdsa-brainpool-regular``
617*91f16700Schasinglulu   and ``ecdsa-brainpool-twisted``. The option ``rsa_1_5`` is the legacy PKCS#1
618*91f16700Schasinglulu   RSA 1.5 algorithm which is not TBBR compliant and is retained only for
619*91f16700Schasinglulu   compatibility. The default value of this flag is ``rsa`` which is the TBBR
620*91f16700Schasinglulu   compliant PKCS#1 RSA 2.1 scheme.
621*91f16700Schasinglulu
622*91f16700Schasinglulu-  ``KEY_SIZE``: This build flag enables the user to select the key size for
623*91f16700Schasinglulu   the algorithm specified by ``KEY_ALG``. The valid values for ``KEY_SIZE``
624*91f16700Schasinglulu   depend on the chosen algorithm and the cryptographic module.
625*91f16700Schasinglulu
626*91f16700Schasinglulu   +---------------------------+------------------------------------+
627*91f16700Schasinglulu   |         KEY_ALG           |        Possible key sizes          |
628*91f16700Schasinglulu   +===========================+====================================+
629*91f16700Schasinglulu   |           rsa             | 1024 , 2048 (default), 3072, 4096  |
630*91f16700Schasinglulu   +---------------------------+------------------------------------+
631*91f16700Schasinglulu   |          ecdsa            |         256 (default), 384         |
632*91f16700Schasinglulu   +---------------------------+------------------------------------+
633*91f16700Schasinglulu   |  ecdsa-brainpool-regular  |            unavailable             |
634*91f16700Schasinglulu   +---------------------------+------------------------------------+
635*91f16700Schasinglulu   |  ecdsa-brainpool-twisted  |            unavailable             |
636*91f16700Schasinglulu   +---------------------------+------------------------------------+
637*91f16700Schasinglulu
638*91f16700Schasinglulu-  ``HASH_ALG``: This build flag enables the user to select the secure hash
639*91f16700Schasinglulu   algorithm. It accepts 3 values: ``sha256``, ``sha384`` and ``sha512``.
640*91f16700Schasinglulu   The default value of this flag is ``sha256``.
641*91f16700Schasinglulu
642*91f16700Schasinglulu-  ``LDFLAGS``: Extra user options appended to the linkers' command line in
643*91f16700Schasinglulu   addition to the one set by the build system.
644*91f16700Schasinglulu
645*91f16700Schasinglulu-  ``LOG_LEVEL``: Chooses the log level, which controls the amount of console log
646*91f16700Schasinglulu   output compiled into the build. This should be one of the following:
647*91f16700Schasinglulu
648*91f16700Schasinglulu   ::
649*91f16700Schasinglulu
650*91f16700Schasinglulu       0  (LOG_LEVEL_NONE)
651*91f16700Schasinglulu       10 (LOG_LEVEL_ERROR)
652*91f16700Schasinglulu       20 (LOG_LEVEL_NOTICE)
653*91f16700Schasinglulu       30 (LOG_LEVEL_WARNING)
654*91f16700Schasinglulu       40 (LOG_LEVEL_INFO)
655*91f16700Schasinglulu       50 (LOG_LEVEL_VERBOSE)
656*91f16700Schasinglulu
657*91f16700Schasinglulu   All log output up to and including the selected log level is compiled into
658*91f16700Schasinglulu   the build. The default value is 40 in debug builds and 20 in release builds.
659*91f16700Schasinglulu
660*91f16700Schasinglulu-  ``MEASURED_BOOT``: Boolean flag to include support for the Measured Boot
661*91f16700Schasinglulu   feature. This flag can be enabled with ``TRUSTED_BOARD_BOOT`` in order to
662*91f16700Schasinglulu   provide trust that the code taking the measurements and recording them has
663*91f16700Schasinglulu   not been tampered with.
664*91f16700Schasinglulu
665*91f16700Schasinglulu   This option defaults to 0.
666*91f16700Schasinglulu
667*91f16700Schasinglulu-  ``MARCH_DIRECTIVE``: used to pass a -march option from the platform build
668*91f16700Schasinglulu   options to the compiler. An example usage:
669*91f16700Schasinglulu
670*91f16700Schasinglulu   .. code:: make
671*91f16700Schasinglulu
672*91f16700Schasinglulu      MARCH_DIRECTIVE := -march=armv8.5-a
673*91f16700Schasinglulu
674*91f16700Schasinglulu-  ``NON_TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
675*91f16700Schasinglulu   specifies a file that contains the Non-Trusted World private key in PEM
676*91f16700Schasinglulu   format or a PKCS11 URI. If ``SAVE_KEYS=1``, only a file is accepted and it
677*91f16700Schasinglulu   will be used to save the key.
678*91f16700Schasinglulu
679*91f16700Schasinglulu-  ``NS_BL2U``: Path to NS_BL2U image in the host file system. This image is
680*91f16700Schasinglulu   optional. It is only needed if the platform makefile specifies that it
681*91f16700Schasinglulu   is required in order to build the ``fwu_fip`` target.
682*91f16700Schasinglulu
683*91f16700Schasinglulu-  ``NS_TIMER_SWITCH``: Enable save and restore for non-secure timer register
684*91f16700Schasinglulu   contents upon world switch. It can take either 0 (don't save and restore) or
685*91f16700Schasinglulu   1 (do save and restore). 0 is the default. An SPD may set this to 1 if it
686*91f16700Schasinglulu   wants the timer registers to be saved and restored.
687*91f16700Schasinglulu
688*91f16700Schasinglulu-  ``OPTEE_SP_FW_CONFIG``: DTC build flag to include OP-TEE as SP in
689*91f16700Schasinglulu   tb_fw_config device tree. This flag is defined only when
690*91f16700Schasinglulu   ``ARM_SPMC_MANIFEST_DTS`` manifest file name contains pattern optee_sp.
691*91f16700Schasinglulu
692*91f16700Schasinglulu-  ``OVERRIDE_LIBC``: This option allows platforms to override the default libc
693*91f16700Schasinglulu   for the BL image. It can be either 0 (include) or 1 (remove). The default
694*91f16700Schasinglulu   value is 0.
695*91f16700Schasinglulu
696*91f16700Schasinglulu-  ``PL011_GENERIC_UART``: Boolean option to indicate the PL011 driver that
697*91f16700Schasinglulu   the underlying hardware is not a full PL011 UART but a minimally compliant
698*91f16700Schasinglulu   generic UART, which is a subset of the PL011. The driver will not access
699*91f16700Schasinglulu   any register that is not part of the SBSA generic UART specification.
700*91f16700Schasinglulu   Default value is 0 (a full PL011 compliant UART is present).
701*91f16700Schasinglulu
702*91f16700Schasinglulu-  ``PLAT``: Choose a platform to build TF-A for. The chosen platform name
703*91f16700Schasinglulu   must be subdirectory of any depth under ``plat/``, and must contain a
704*91f16700Schasinglulu   platform makefile named ``platform.mk``. For example, to build TF-A for the
705*91f16700Schasinglulu   Arm Juno board, select PLAT=juno.
706*91f16700Schasinglulu
707*91f16700Schasinglulu-  ``PRELOADED_BL33_BASE``: This option enables booting a preloaded BL33 image
708*91f16700Schasinglulu   instead of the normal boot flow. When defined, it must specify the entry
709*91f16700Schasinglulu   point address for the preloaded BL33 image. This option is incompatible with
710*91f16700Schasinglulu   ``EL3_PAYLOAD_BASE``. If both are defined, ``EL3_PAYLOAD_BASE`` has priority
711*91f16700Schasinglulu   over ``PRELOADED_BL33_BASE``.
712*91f16700Schasinglulu
713*91f16700Schasinglulu-  ``PROGRAMMABLE_RESET_ADDRESS``: This option indicates whether the reset
714*91f16700Schasinglulu   vector address can be programmed or is fixed on the platform. It can take
715*91f16700Schasinglulu   either 0 (fixed) or 1 (programmable). Default is 0. If the platform has a
716*91f16700Schasinglulu   programmable reset address, it is expected that a CPU will start executing
717*91f16700Schasinglulu   code directly at the right address, both on a cold and warm reset. In this
718*91f16700Schasinglulu   case, there is no need to identify the entrypoint on boot and the boot path
719*91f16700Schasinglulu   can be optimised. The ``plat_get_my_entrypoint()`` platform porting interface
720*91f16700Schasinglulu   does not need to be implemented in this case.
721*91f16700Schasinglulu
722*91f16700Schasinglulu-  ``PSCI_EXTENDED_STATE_ID``: As per PSCI1.0 Specification, there are 2 formats
723*91f16700Schasinglulu   possible for the PSCI power-state parameter: original and extended State-ID
724*91f16700Schasinglulu   formats. This flag if set to 1, configures the generic PSCI layer to use the
725*91f16700Schasinglulu   extended format. The default value of this flag is 0, which means by default
726*91f16700Schasinglulu   the original power-state format is used by the PSCI implementation. This flag
727*91f16700Schasinglulu   should be specified by the platform makefile and it governs the return value
728*91f16700Schasinglulu   of PSCI_FEATURES API for CPU_SUSPEND smc function id. When this option is
729*91f16700Schasinglulu   enabled on Arm platforms, the option ``ARM_RECOM_STATE_ID_ENC`` needs to be
730*91f16700Schasinglulu   set to 1 as well.
731*91f16700Schasinglulu
732*91f16700Schasinglulu-  ``PSCI_OS_INIT_MODE``: Boolean flag to enable support for optional PSCI
733*91f16700Schasinglulu   OS-initiated mode. This option defaults to 0.
734*91f16700Schasinglulu
735*91f16700Schasinglulu-  ``ENABLE_FEAT_RAS``: Boolean flag to enable Armv8.2 RAS features. RAS features
736*91f16700Schasinglulu   are an optional extension for pre-Armv8.2 CPUs, but are mandatory for Armv8.2
737*91f16700Schasinglulu   or later CPUs. This flag can take the values 0 or 1. The default value is 0.
738*91f16700Schasinglulu   NOTE: This flag enables use of IESB capability to reduce entry latency into
739*91f16700Schasinglulu   EL3 even when RAS error handling is not performed on the platform. Hence this
740*91f16700Schasinglulu   flag is recommended to be turned on Armv8.2 and later CPUs.
741*91f16700Schasinglulu
742*91f16700Schasinglulu-  ``RESET_TO_BL31``: Enable BL31 entrypoint as the CPU reset vector instead
743*91f16700Schasinglulu   of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
744*91f16700Schasinglulu   entrypoint) or 1 (CPU reset to BL31 entrypoint).
745*91f16700Schasinglulu   The default value is 0.
746*91f16700Schasinglulu
747*91f16700Schasinglulu-  ``RESET_TO_SP_MIN``: SP_MIN is the minimal AArch32 Secure Payload provided
748*91f16700Schasinglulu   in TF-A. This flag configures SP_MIN entrypoint as the CPU reset vector
749*91f16700Schasinglulu   instead of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
750*91f16700Schasinglulu   entrypoint) or 1 (CPU reset to SP_MIN entrypoint). The default value is 0.
751*91f16700Schasinglulu
752*91f16700Schasinglulu-  ``ROT_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
753*91f16700Schasinglulu   file that contains the ROT private key in PEM format or a PKCS11 URI and
754*91f16700Schasinglulu   enforces public key hash generation. If ``SAVE_KEYS=1``, only a file is
755*91f16700Schasinglulu   accepted and it will be used to save the key.
756*91f16700Schasinglulu
757*91f16700Schasinglulu-  ``SAVE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
758*91f16700Schasinglulu   certificate generation tool to save the keys used to establish the Chain of
759*91f16700Schasinglulu   Trust. Allowed options are '0' or '1'. Default is '0' (do not save).
760*91f16700Schasinglulu
761*91f16700Schasinglulu-  ``SCP_BL2``: Path to SCP_BL2 image in the host file system. This image is optional.
762*91f16700Schasinglulu   If a SCP_BL2 image is present then this option must be passed for the ``fip``
763*91f16700Schasinglulu   target.
764*91f16700Schasinglulu
765*91f16700Schasinglulu-  ``SCP_BL2_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
766*91f16700Schasinglulu   file that contains the SCP_BL2 private key in PEM format or a PKCS11 URI.
767*91f16700Schasinglulu   If ``SAVE_KEYS=1``, only a file is accepted and it will be used to save the key.
768*91f16700Schasinglulu
769*91f16700Schasinglulu-  ``SCP_BL2U``: Path to SCP_BL2U image in the host file system. This image is
770*91f16700Schasinglulu   optional. It is only needed if the platform makefile specifies that it
771*91f16700Schasinglulu   is required in order to build the ``fwu_fip`` target.
772*91f16700Schasinglulu
773*91f16700Schasinglulu-  ``SDEI_SUPPORT``: Setting this to ``1`` enables support for Software
774*91f16700Schasinglulu   Delegated Exception Interface to BL31 image. This defaults to ``0``.
775*91f16700Schasinglulu
776*91f16700Schasinglulu   When set to ``1``, the build option ``EL3_EXCEPTION_HANDLING`` must also be
777*91f16700Schasinglulu   set to ``1``.
778*91f16700Schasinglulu
779*91f16700Schasinglulu-  ``SEPARATE_CODE_AND_RODATA``: Whether code and read-only data should be
780*91f16700Schasinglulu   isolated on separate memory pages. This is a trade-off between security and
781*91f16700Schasinglulu   memory usage. See "Isolating code and read-only data on separate memory
782*91f16700Schasinglulu   pages" section in :ref:`Firmware Design`. This flag is disabled by default
783*91f16700Schasinglulu   and affects all BL images.
784*91f16700Schasinglulu
785*91f16700Schasinglulu-  ``SEPARATE_NOBITS_REGION``: Setting this option to ``1`` allows the NOBITS
786*91f16700Schasinglulu   sections of BL31 (.bss, stacks, page tables, and coherent memory) to be
787*91f16700Schasinglulu   allocated in RAM discontiguous from the loaded firmware image. When set, the
788*91f16700Schasinglulu   platform is expected to provide definitions for ``BL31_NOBITS_BASE`` and
789*91f16700Schasinglulu   ``BL31_NOBITS_LIMIT``. When the option is ``0`` (the default), NOBITS
790*91f16700Schasinglulu   sections are placed in RAM immediately following the loaded firmware image.
791*91f16700Schasinglulu
792*91f16700Schasinglulu-  ``SEPARATE_BL2_NOLOAD_REGION``: Setting this option to ``1`` allows the
793*91f16700Schasinglulu   NOLOAD sections of BL2 (.bss, stacks, page tables) to be allocated in RAM
794*91f16700Schasinglulu   discontiguous from loaded firmware images. When set, the platform need to
795*91f16700Schasinglulu   provide definitions of ``BL2_NOLOAD_START`` and ``BL2_NOLOAD_LIMIT``. This
796*91f16700Schasinglulu   flag is disabled by default and NOLOAD sections are placed in RAM immediately
797*91f16700Schasinglulu   following the loaded firmware image.
798*91f16700Schasinglulu
799*91f16700Schasinglulu-  ``SMC_PCI_SUPPORT``: This option allows platforms to handle PCI configuration
800*91f16700Schasinglulu   access requests via a standard SMCCC defined in `DEN0115`_. When combined with
801*91f16700Schasinglulu   UEFI+ACPI this can provide a certain amount of OS forward compatibility
802*91f16700Schasinglulu   with newer platforms that aren't ECAM compliant.
803*91f16700Schasinglulu
804*91f16700Schasinglulu-  ``SPD``: Choose a Secure Payload Dispatcher component to be built into TF-A.
805*91f16700Schasinglulu   This build option is only valid if ``ARCH=aarch64``. The value should be
806*91f16700Schasinglulu   the path to the directory containing the SPD source, relative to
807*91f16700Schasinglulu   ``services/spd/``; the directory is expected to contain a makefile called
808*91f16700Schasinglulu   ``<spd-value>.mk``. The SPM Dispatcher standard service is located in
809*91f16700Schasinglulu   services/std_svc/spmd and enabled by ``SPD=spmd``. The SPM Dispatcher
810*91f16700Schasinglulu   cannot be enabled when the ``SPM_MM`` option is enabled.
811*91f16700Schasinglulu
812*91f16700Schasinglulu-  ``SPIN_ON_BL1_EXIT``: This option introduces an infinite loop in BL1. It can
813*91f16700Schasinglulu   take either 0 (no loop) or 1 (add a loop). 0 is the default. This loop stops
814*91f16700Schasinglulu   execution in BL1 just before handing over to BL31. At this point, all
815*91f16700Schasinglulu   firmware images have been loaded in memory, and the MMU and caches are
816*91f16700Schasinglulu   turned off. Refer to the "Debugging options" section for more details.
817*91f16700Schasinglulu
818*91f16700Schasinglulu-  ``SPMC_AT_EL3`` : This boolean option is used jointly with the SPM
819*91f16700Schasinglulu   Dispatcher option (``SPD=spmd``). When enabled (1) it indicates the SPMC
820*91f16700Schasinglulu   component runs at the EL3 exception level. The default value is ``0`` (
821*91f16700Schasinglulu   disabled). This configuration supports pre-Armv8.4 platforms (aka not
822*91f16700Schasinglulu   implementing the ``FEAT_SEL2`` extension).
823*91f16700Schasinglulu
824*91f16700Schasinglulu-  ``SPMC_AT_EL3_SEL0_SP`` : Boolean option to enable SEL0 SP load support when
825*91f16700Schasinglulu   ``SPMC_AT_EL3`` is enabled. The default value if ``0`` (disabled). This
826*91f16700Schasinglulu   option cannot be enabled (``1``) when (``SPMC_AT_EL3``) is disabled.
827*91f16700Schasinglulu
828*91f16700Schasinglulu-  ``SPMC_OPTEE`` : This boolean option is used jointly with the SPM
829*91f16700Schasinglulu   Dispatcher option (``SPD=spmd``) and with ``SPMD_SPM_AT_SEL2=0`` to
830*91f16700Schasinglulu   indicate that the SPMC at S-EL1 is OP-TEE and an OP-TEE specific loading
831*91f16700Schasinglulu   mechanism should be used.
832*91f16700Schasinglulu
833*91f16700Schasinglulu-  ``SPMD_SPM_AT_SEL2`` : This boolean option is used jointly with the SPM
834*91f16700Schasinglulu   Dispatcher option (``SPD=spmd``). When enabled (1) it indicates the SPMC
835*91f16700Schasinglulu   component runs at the S-EL2 exception level provided by the ``FEAT_SEL2``
836*91f16700Schasinglulu   extension. This is the default when enabling the SPM Dispatcher. When
837*91f16700Schasinglulu   disabled (0) it indicates the SPMC component runs at the S-EL1 execution
838*91f16700Schasinglulu   state or at EL3 if ``SPMC_AT_EL3`` is enabled. The latter configurations
839*91f16700Schasinglulu   support pre-Armv8.4 platforms (aka not implementing the ``FEAT_SEL2``
840*91f16700Schasinglulu   extension).
841*91f16700Schasinglulu
842*91f16700Schasinglulu-  ``SPM_MM`` : Boolean option to enable the Management Mode (MM)-based Secure
843*91f16700Schasinglulu   Partition Manager (SPM) implementation. The default value is ``0``
844*91f16700Schasinglulu   (disabled). This option cannot be enabled (``1``) when SPM Dispatcher is
845*91f16700Schasinglulu   enabled (``SPD=spmd``).
846*91f16700Schasinglulu
847*91f16700Schasinglulu-  ``SP_LAYOUT_FILE``: Platform provided path to JSON file containing the
848*91f16700Schasinglulu   description of secure partitions. The build system will parse this file and
849*91f16700Schasinglulu   package all secure partition blobs into the FIP. This file is not
850*91f16700Schasinglulu   necessarily part of TF-A tree. Only available when ``SPD=spmd``.
851*91f16700Schasinglulu
852*91f16700Schasinglulu-  ``SP_MIN_WITH_SECURE_FIQ``: Boolean flag to indicate the SP_MIN handles
853*91f16700Schasinglulu   secure interrupts (caught through the FIQ line). Platforms can enable
854*91f16700Schasinglulu   this directive if they need to handle such interruption. When enabled,
855*91f16700Schasinglulu   the FIQ are handled in monitor mode and non secure world is not allowed
856*91f16700Schasinglulu   to mask these events. Platforms that enable FIQ handling in SP_MIN shall
857*91f16700Schasinglulu   implement the api ``sp_min_plat_fiq_handler()``. The default value is 0.
858*91f16700Schasinglulu
859*91f16700Schasinglulu-  ``SVE_VECTOR_LEN``: SVE vector length to configure in ZCR_EL3.
860*91f16700Schasinglulu   Platforms can configure this if they need to lower the hardware
861*91f16700Schasinglulu   limit, for example due to asymmetric configuration or limitations of
862*91f16700Schasinglulu   software run at lower ELs. The default is the architectural maximum
863*91f16700Schasinglulu   of 2048 which should be suitable for most configurations, the
864*91f16700Schasinglulu   hardware will limit the effective VL to the maximum physically supported
865*91f16700Schasinglulu   VL.
866*91f16700Schasinglulu
867*91f16700Schasinglulu-  ``TRNG_SUPPORT``: Setting this to ``1`` enables support for True
868*91f16700Schasinglulu   Random Number Generator Interface to BL31 image. This defaults to ``0``.
869*91f16700Schasinglulu
870*91f16700Schasinglulu-  ``TRUSTED_BOARD_BOOT``: Boolean flag to include support for the Trusted Board
871*91f16700Schasinglulu   Boot feature. When set to '1', BL1 and BL2 images include support to load
872*91f16700Schasinglulu   and verify the certificates and images in a FIP, and BL1 includes support
873*91f16700Schasinglulu   for the Firmware Update. The default value is '0'. Generation and inclusion
874*91f16700Schasinglulu   of certificates in the FIP and FWU_FIP depends upon the value of the
875*91f16700Schasinglulu   ``GENERATE_COT`` option.
876*91f16700Schasinglulu
877*91f16700Schasinglulu   .. warning::
878*91f16700Schasinglulu      This option depends on ``CREATE_KEYS`` to be enabled. If the keys
879*91f16700Schasinglulu      already exist in disk, they will be overwritten without further notice.
880*91f16700Schasinglulu
881*91f16700Schasinglulu-  ``TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
882*91f16700Schasinglulu   specifies a file that contains the Trusted World private key in PEM
883*91f16700Schasinglulu   format or a PKCS11 URI. If ``SAVE_KEYS=1``, only a file is accepted and
884*91f16700Schasinglulu   it will be used to save the key.
885*91f16700Schasinglulu
886*91f16700Schasinglulu-  ``TSP_INIT_ASYNC``: Choose BL32 initialization method as asynchronous or
887*91f16700Schasinglulu   synchronous, (see "Initializing a BL32 Image" section in
888*91f16700Schasinglulu   :ref:`Firmware Design`). It can take the value 0 (BL32 is initialized using
889*91f16700Schasinglulu   synchronous method) or 1 (BL32 is initialized using asynchronous method).
890*91f16700Schasinglulu   Default is 0.
891*91f16700Schasinglulu
892*91f16700Schasinglulu-  ``TSP_NS_INTR_ASYNC_PREEMPT``: A non zero value enables the interrupt
893*91f16700Schasinglulu   routing model which routes non-secure interrupts asynchronously from TSP
894*91f16700Schasinglulu   to EL3 causing immediate preemption of TSP. The EL3 is responsible
895*91f16700Schasinglulu   for saving and restoring the TSP context in this routing model. The
896*91f16700Schasinglulu   default routing model (when the value is 0) is to route non-secure
897*91f16700Schasinglulu   interrupts to TSP allowing it to save its context and hand over
898*91f16700Schasinglulu   synchronously to EL3 via an SMC.
899*91f16700Schasinglulu
900*91f16700Schasinglulu   .. note::
901*91f16700Schasinglulu      When ``EL3_EXCEPTION_HANDLING`` is ``1``, ``TSP_NS_INTR_ASYNC_PREEMPT``
902*91f16700Schasinglulu      must also be set to ``1``.
903*91f16700Schasinglulu
904*91f16700Schasinglulu-  ``TS_SP_FW_CONFIG``: DTC build flag to include Trusted Services (Crypto and
905*91f16700Schasinglulu   internal-trusted-storage) as SP in tb_fw_config device tree.
906*91f16700Schasinglulu
907*91f16700Schasinglulu-  ``TWED_DELAY``: Numeric value to be set in order to delay the trapping of
908*91f16700Schasinglulu   WFE instruction. ``ENABLE_FEAT_TWED`` build option must be enabled to set
909*91f16700Schasinglulu   this delay. It can take values in the range (0-15). Default value is ``0``
910*91f16700Schasinglulu   and based on this value, 2^(TWED_DELAY + 8) cycles will be delayed.
911*91f16700Schasinglulu   Platforms need to explicitly update this value based on their requirements.
912*91f16700Schasinglulu
913*91f16700Schasinglulu-  ``USE_ARM_LINK``: This flag determines whether to enable support for ARM
914*91f16700Schasinglulu   linker. When the ``LINKER`` build variable points to the armlink linker,
915*91f16700Schasinglulu   this flag is enabled automatically. To enable support for armlink, platforms
916*91f16700Schasinglulu   will have to provide a scatter file for the BL image. Currently, Tegra
917*91f16700Schasinglulu   platforms use the armlink support to compile BL3-1 images.
918*91f16700Schasinglulu
919*91f16700Schasinglulu-  ``USE_COHERENT_MEM``: This flag determines whether to include the coherent
920*91f16700Schasinglulu   memory region in the BL memory map or not (see "Use of Coherent memory in
921*91f16700Schasinglulu   TF-A" section in :ref:`Firmware Design`). It can take the value 1
922*91f16700Schasinglulu   (Coherent memory region is included) or 0 (Coherent memory region is
923*91f16700Schasinglulu   excluded). Default is 1.
924*91f16700Schasinglulu
925*91f16700Schasinglulu-  ``ARM_IO_IN_DTB``: This flag determines whether to use IO based on the
926*91f16700Schasinglulu   firmware configuration framework. This will move the io_policies into a
927*91f16700Schasinglulu   configuration device tree, instead of static structure in the code base.
928*91f16700Schasinglulu
929*91f16700Schasinglulu-  ``COT_DESC_IN_DTB``: This flag determines whether to create COT descriptors
930*91f16700Schasinglulu   at runtime using fconf. If this flag is enabled, COT descriptors are
931*91f16700Schasinglulu   statically captured in tb_fw_config file in the form of device tree nodes
932*91f16700Schasinglulu   and properties. Currently, COT descriptors used by BL2 are moved to the
933*91f16700Schasinglulu   device tree and COT descriptors used by BL1 are retained in the code
934*91f16700Schasinglulu   base statically.
935*91f16700Schasinglulu
936*91f16700Schasinglulu-  ``SDEI_IN_FCONF``: This flag determines whether to configure SDEI setup in
937*91f16700Schasinglulu   runtime using firmware configuration framework. The platform specific SDEI
938*91f16700Schasinglulu   shared and private events configuration is retrieved from device tree rather
939*91f16700Schasinglulu   than static C structures at compile time. This is only supported if
940*91f16700Schasinglulu   SDEI_SUPPORT build flag is enabled.
941*91f16700Schasinglulu
942*91f16700Schasinglulu-  ``SEC_INT_DESC_IN_FCONF``: This flag determines whether to configure Group 0
943*91f16700Schasinglulu   and Group1 secure interrupts using the firmware configuration framework. The
944*91f16700Schasinglulu   platform specific secure interrupt property descriptor is retrieved from
945*91f16700Schasinglulu   device tree in runtime rather than depending on static C structure at compile
946*91f16700Schasinglulu   time.
947*91f16700Schasinglulu
948*91f16700Schasinglulu-  ``USE_ROMLIB``: This flag determines whether library at ROM will be used.
949*91f16700Schasinglulu   This feature creates a library of functions to be placed in ROM and thus
950*91f16700Schasinglulu   reduces SRAM usage. Refer to :ref:`Library at ROM` for further details. Default
951*91f16700Schasinglulu   is 0.
952*91f16700Schasinglulu
953*91f16700Schasinglulu-  ``V``: Verbose build. If assigned anything other than 0, the build commands
954*91f16700Schasinglulu   are printed. Default is 0.
955*91f16700Schasinglulu
956*91f16700Schasinglulu-  ``VERSION_STRING``: String used in the log output for each TF-A image.
957*91f16700Schasinglulu   Defaults to a string formed by concatenating the version number, build type
958*91f16700Schasinglulu   and build string.
959*91f16700Schasinglulu
960*91f16700Schasinglulu-  ``W``: Warning level. Some compiler warning options of interest have been
961*91f16700Schasinglulu   regrouped and put in the root Makefile. This flag can take the values 0 to 3,
962*91f16700Schasinglulu   each level enabling more warning options. Default is 0.
963*91f16700Schasinglulu
964*91f16700Schasinglulu   This option is closely related to the ``E`` option, which enables
965*91f16700Schasinglulu   ``-Werror``.
966*91f16700Schasinglulu
967*91f16700Schasinglulu   - ``W=0`` (default)
968*91f16700Schasinglulu
969*91f16700Schasinglulu     Enables a wide assortment of warnings, most notably ``-Wall`` and
970*91f16700Schasinglulu     ``-Wextra``, as well as various bad practices and things that are likely to
971*91f16700Schasinglulu     result in errors. Includes some compiler specific flags. No warnings are
972*91f16700Schasinglulu     expected at this level for any build.
973*91f16700Schasinglulu
974*91f16700Schasinglulu   - ``W=1``
975*91f16700Schasinglulu
976*91f16700Schasinglulu     Enables warnings we want the generic build to include but are too time
977*91f16700Schasinglulu     consuming to fix at the moment. It re-enables warnings taken out for
978*91f16700Schasinglulu     ``W=0`` builds (a few of the ``-Wextra`` additions). This level is expected
979*91f16700Schasinglulu     to eventually be merged into ``W=0``. Some warnings are expected on some
980*91f16700Schasinglulu     builds, but new contributions should not introduce new ones.
981*91f16700Schasinglulu
982*91f16700Schasinglulu   - ``W=2`` (recommended)
983*91f16700Schasinglulu
984*91f16700Schasinglulu    Enables warnings we want the generic build to include but cannot be enabled
985*91f16700Schasinglulu    due to external libraries. This level is expected to eventually be merged
986*91f16700Schasinglulu    into ``W=0``. Lots of warnings are expected, primarily from external
987*91f16700Schasinglulu    libraries like zlib and compiler-rt, but new controbutions should not
988*91f16700Schasinglulu    introduce new ones.
989*91f16700Schasinglulu
990*91f16700Schasinglulu   - ``W=3``
991*91f16700Schasinglulu
992*91f16700Schasinglulu     Enables warnings that are informative but not necessary and generally too
993*91f16700Schasinglulu     verbose and frequently ignored. A very large number of warnings are
994*91f16700Schasinglulu     expected.
995*91f16700Schasinglulu
996*91f16700Schasinglulu   The exact set of warning flags depends on the compiler and TF-A warning
997*91f16700Schasinglulu   level, however they are all succinctly set in the top-level Makefile. Please
998*91f16700Schasinglulu   refer to the `GCC`_ or `Clang`_ documentation for more information on the
999*91f16700Schasinglulu   individual flags.
1000*91f16700Schasinglulu
1001*91f16700Schasinglulu-  ``WARMBOOT_ENABLE_DCACHE_EARLY`` : Boolean option to enable D-cache early on
1002*91f16700Schasinglulu   the CPU after warm boot. This is applicable for platforms which do not
1003*91f16700Schasinglulu   require interconnect programming to enable cache coherency (eg: single
1004*91f16700Schasinglulu   cluster platforms). If this option is enabled, then warm boot path
1005*91f16700Schasinglulu   enables D-caches immediately after enabling MMU. This option defaults to 0.
1006*91f16700Schasinglulu
1007*91f16700Schasinglulu-  ``SUPPORT_STACK_MEMTAG``: This flag determines whether to enable memory
1008*91f16700Schasinglulu   tagging for stack or not. It accepts 2 values: ``yes`` and ``no``. The
1009*91f16700Schasinglulu   default value of this flag is ``no``. Note this option must be enabled only
1010*91f16700Schasinglulu   for ARM architecture greater than Armv8.5-A.
1011*91f16700Schasinglulu
1012*91f16700Schasinglulu-  ``ERRATA_SPECULATIVE_AT``: This flag determines whether to enable ``AT``
1013*91f16700Schasinglulu   speculative errata workaround or not. It accepts 2 values: ``1`` and ``0``.
1014*91f16700Schasinglulu   The default value of this flag is ``0``.
1015*91f16700Schasinglulu
1016*91f16700Schasinglulu   ``AT`` speculative errata workaround disables stage1 page table walk for
1017*91f16700Schasinglulu   lower ELs (EL1 and EL0) in EL3 so that ``AT`` speculative fetch at any point
1018*91f16700Schasinglulu   produces either the correct result or failure without TLB allocation.
1019*91f16700Schasinglulu
1020*91f16700Schasinglulu   This boolean option enables errata for all below CPUs.
1021*91f16700Schasinglulu
1022*91f16700Schasinglulu   +---------+--------------+-------------------------+
1023*91f16700Schasinglulu   | Errata  |      CPU     |     Workaround Define   |
1024*91f16700Schasinglulu   +=========+==============+=========================+
1025*91f16700Schasinglulu   | 1165522 |  Cortex-A76  |  ``ERRATA_A76_1165522`` |
1026*91f16700Schasinglulu   +---------+--------------+-------------------------+
1027*91f16700Schasinglulu   | 1319367 |  Cortex-A72  |  ``ERRATA_A72_1319367`` |
1028*91f16700Schasinglulu   +---------+--------------+-------------------------+
1029*91f16700Schasinglulu   | 1319537 |  Cortex-A57  |  ``ERRATA_A57_1319537`` |
1030*91f16700Schasinglulu   +---------+--------------+-------------------------+
1031*91f16700Schasinglulu   | 1530923 |  Cortex-A55  |  ``ERRATA_A55_1530923`` |
1032*91f16700Schasinglulu   +---------+--------------+-------------------------+
1033*91f16700Schasinglulu   | 1530924 |  Cortex-A53  |  ``ERRATA_A53_1530924`` |
1034*91f16700Schasinglulu   +---------+--------------+-------------------------+
1035*91f16700Schasinglulu
1036*91f16700Schasinglulu   .. note::
1037*91f16700Schasinglulu      This option is enabled by build only if platform sets any of above defines
1038*91f16700Schasinglulu      mentioned in ’Workaround Define' column in the table.
1039*91f16700Schasinglulu      If this option is enabled for the EL3 software then EL2 software also must
1040*91f16700Schasinglulu      implement this workaround due to the behaviour of the errata mentioned
1041*91f16700Schasinglulu      in new SDEN document which will get published soon.
1042*91f16700Schasinglulu
1043*91f16700Schasinglulu- ``RAS_TRAP_NS_ERR_REC_ACCESS``: This flag enables/disables the SCR_EL3.TERR
1044*91f16700Schasinglulu  bit, to trap access to the RAS ERR and RAS ERX registers from lower ELs.
1045*91f16700Schasinglulu  This flag is disabled by default.
1046*91f16700Schasinglulu
1047*91f16700Schasinglulu- ``OPENSSL_DIR``: This option is used to provide the path to a directory on the
1048*91f16700Schasinglulu  host machine where a custom installation of OpenSSL is located, which is used
1049*91f16700Schasinglulu  to build the certificate generation, firmware encryption and FIP tools. If
1050*91f16700Schasinglulu  this option is not set, the default OS installation will be used.
1051*91f16700Schasinglulu
1052*91f16700Schasinglulu- ``USE_SP804_TIMER``: Use the SP804 timer instead of the Generic Timer for
1053*91f16700Schasinglulu  functions that wait for an arbitrary time length (udelay and mdelay). The
1054*91f16700Schasinglulu  default value is 0.
1055*91f16700Schasinglulu
1056*91f16700Schasinglulu- ``ENABLE_BRBE_FOR_NS``: Numeric value to enable access to the branch record
1057*91f16700Schasinglulu  buffer registers from NS ELs when FEAT_BRBE is implemented. BRBE is an
1058*91f16700Schasinglulu  optional architectural feature for AArch64. This flag can take the values
1059*91f16700Schasinglulu  0 to 2, to align with the ``FEATURE_DETECTION`` mechanism. The default is 0
1060*91f16700Schasinglulu  and it is automatically disabled when the target architecture is AArch32.
1061*91f16700Schasinglulu
1062*91f16700Schasinglulu- ``ENABLE_TRBE_FOR_NS``: Numeric value to enable access of trace buffer
1063*91f16700Schasinglulu  control registers from NS ELs, NS-EL2 or NS-EL1(when NS-EL2 is implemented
1064*91f16700Schasinglulu  but unused) when FEAT_TRBE is implemented. TRBE is an optional architectural
1065*91f16700Schasinglulu  feature for AArch64. This flag can take the values  0 to 2, to align with the
1066*91f16700Schasinglulu  ``FEATURE_DETECTION`` mechanism. The default is 0 and it is automatically
1067*91f16700Schasinglulu  disabled when the target architecture is AArch32.
1068*91f16700Schasinglulu
1069*91f16700Schasinglulu- ``ENABLE_SYS_REG_TRACE_FOR_NS``: Numeric value to enable trace system
1070*91f16700Schasinglulu  registers access from NS ELs, NS-EL2 or NS-EL1 (when NS-EL2 is implemented
1071*91f16700Schasinglulu  but unused). This feature is available if trace unit such as ETMv4.x, and
1072*91f16700Schasinglulu  ETE(extending ETM feature) is implemented. This flag can take the values
1073*91f16700Schasinglulu  0 to 2, to align with the ``FEATURE_DETECTION`` mechanism. The default is 0.
1074*91f16700Schasinglulu
1075*91f16700Schasinglulu- ``ENABLE_TRF_FOR_NS``: Numeric value to enable trace filter control registers
1076*91f16700Schasinglulu  access from NS ELs, NS-EL2 or NS-EL1 (when NS-EL2 is implemented but unused),
1077*91f16700Schasinglulu  if FEAT_TRF is implemented. This flag can take the values 0 to 2, to align
1078*91f16700Schasinglulu  with the ``FEATURE_DETECTION`` mechanism. This flag is disabled by default.
1079*91f16700Schasinglulu
1080*91f16700Schasinglulu- ``PLAT_RSS_NOT_SUPPORTED``: Boolean option to enable the usage of the PSA
1081*91f16700Schasinglulu  APIs on platforms that doesn't support RSS (providing Arm CCA HES
1082*91f16700Schasinglulu  functionalities). When enabled (``1``), a mocked version of the APIs are used.
1083*91f16700Schasinglulu  The default value is 0.
1084*91f16700Schasinglulu
1085*91f16700Schasinglulu- ``CONDITIONAL_CMO``: Boolean option to enable call to platform-defined routine
1086*91f16700Schasinglulu  ``plat_can_cmo`` which will return zero if cache management operations should
1087*91f16700Schasinglulu  be skipped and non-zero otherwise. By default, this option is disabled which
1088*91f16700Schasinglulu  means platform hook won't be checked and CMOs will always be performed when
1089*91f16700Schasinglulu  related functions are called.
1090*91f16700Schasinglulu
1091*91f16700Schasinglulu- ``ERRATA_ABI_SUPPORT``: Boolean option to enable support for Errata management
1092*91f16700Schasinglulu  firmware interface for the BL31 image. By default its disabled (``0``).
1093*91f16700Schasinglulu
1094*91f16700Schasinglulu- ``ERRATA_NON_ARM_INTERCONNECT``: Boolean option to enable support for the
1095*91f16700Schasinglulu  errata mitigation for platforms with a non-arm interconnect using the errata
1096*91f16700Schasinglulu  ABI. By default its disabled (``0``).
1097*91f16700Schasinglulu
1098*91f16700Schasinglulu- ``ENABLE_CONSOLE_GETC``: Boolean option to enable `getc()` feature in console
1099*91f16700Schasinglulu  driver(s). By default it is disabled (``0``) because it constitutes an attack
1100*91f16700Schasinglulu  vector into TF-A by potentially allowing an attacker to inject arbitrary data.
1101*91f16700Schasinglulu  This option should only be enabled on a need basis if there is a use case for
1102*91f16700Schasinglulu  reading characters from the console.
1103*91f16700Schasinglulu
1104*91f16700SchasingluluGICv3 driver options
1105*91f16700Schasinglulu--------------------
1106*91f16700Schasinglulu
1107*91f16700SchasingluluGICv3 driver files are included using directive:
1108*91f16700Schasinglulu
1109*91f16700Schasinglulu``include drivers/arm/gic/v3/gicv3.mk``
1110*91f16700Schasinglulu
1111*91f16700SchasingluluThe driver can be configured with the following options set in the platform
1112*91f16700Schasinglulumakefile:
1113*91f16700Schasinglulu
1114*91f16700Schasinglulu-  ``GICV3_SUPPORT_GIC600``: Add support for the GIC-600 variants of GICv3.
1115*91f16700Schasinglulu   Enabling this option will add runtime detection support for the
1116*91f16700Schasinglulu   GIC-600, so is safe to select even for a GIC500 implementation.
1117*91f16700Schasinglulu   This option defaults to 0.
1118*91f16700Schasinglulu
1119*91f16700Schasinglulu- ``GICV3_SUPPORT_GIC600AE_FMU``: Add support for the Fault Management Unit
1120*91f16700Schasinglulu   for GIC-600 AE. Enabling this option will introduce support to initialize
1121*91f16700Schasinglulu   the FMU. Platforms should call the init function during boot to enable the
1122*91f16700Schasinglulu   FMU and its safety mechanisms. This option defaults to 0.
1123*91f16700Schasinglulu
1124*91f16700Schasinglulu-  ``GICV3_IMPL_GIC600_MULTICHIP``: Selects GIC-600 variant with multichip
1125*91f16700Schasinglulu   functionality. This option defaults to 0
1126*91f16700Schasinglulu
1127*91f16700Schasinglulu-  ``GICV3_OVERRIDE_DISTIF_PWR_OPS``: Allows override of default implementation
1128*91f16700Schasinglulu   of ``arm_gicv3_distif_pre_save`` and ``arm_gicv3_distif_post_restore``
1129*91f16700Schasinglulu   functions. This is required for FVP platform which need to simulate GIC save
1130*91f16700Schasinglulu   and restore during SYSTEM_SUSPEND without powering down GIC. Default is 0.
1131*91f16700Schasinglulu
1132*91f16700Schasinglulu-  ``GIC_ENABLE_V4_EXTN`` : Enables GICv4 related changes in GICv3 driver.
1133*91f16700Schasinglulu   This option defaults to 0.
1134*91f16700Schasinglulu
1135*91f16700Schasinglulu-  ``GIC_EXT_INTID``: When set to ``1``, GICv3 driver will support extended
1136*91f16700Schasinglulu   PPI (1056-1119) and SPI (4096-5119) range. This option defaults to 0.
1137*91f16700Schasinglulu
1138*91f16700SchasingluluDebugging options
1139*91f16700Schasinglulu-----------------
1140*91f16700Schasinglulu
1141*91f16700SchasingluluTo compile a debug version and make the build more verbose use
1142*91f16700Schasinglulu
1143*91f16700Schasinglulu.. code:: shell
1144*91f16700Schasinglulu
1145*91f16700Schasinglulu    make PLAT=<platform> DEBUG=1 V=1 all
1146*91f16700Schasinglulu
1147*91f16700SchasingluluAArch64 GCC 11 uses DWARF version 5 debugging symbols by default. Some tools
1148*91f16700Schasinglulu(for example Arm-DS) might not support this and may need an older version of
1149*91f16700SchasingluluDWARF symbols to be emitted by GCC. This can be achieved by using the
1150*91f16700Schasinglulu``-gdwarf-<version>`` flag, with the version being set to 2, 3, 4 or 5. Setting
1151*91f16700Schasingluluthe version to 4 is recommended for Arm-DS.
1152*91f16700Schasinglulu
1153*91f16700SchasingluluWhen debugging logic problems it might also be useful to disable all compiler
1154*91f16700Schasingluluoptimizations by using ``-O0``.
1155*91f16700Schasinglulu
1156*91f16700Schasinglulu.. warning::
1157*91f16700Schasinglulu   Using ``-O0`` could cause output images to be larger and base addresses
1158*91f16700Schasinglulu   might need to be recalculated (see the **Memory layout on Arm development
1159*91f16700Schasinglulu   platforms** section in the :ref:`Firmware Design`).
1160*91f16700Schasinglulu
1161*91f16700SchasingluluExtra debug options can be passed to the build system by setting ``CFLAGS`` or
1162*91f16700Schasinglulu``LDFLAGS``:
1163*91f16700Schasinglulu
1164*91f16700Schasinglulu.. code:: shell
1165*91f16700Schasinglulu
1166*91f16700Schasinglulu    CFLAGS='-O0 -gdwarf-2'                                     \
1167*91f16700Schasinglulu    make PLAT=<platform> DEBUG=1 V=1 all
1168*91f16700Schasinglulu
1169*91f16700SchasingluluNote that using ``-Wl,`` style compilation driver options in ``CFLAGS`` will be
1170*91f16700Schasingluluignored as the linker is called directly.
1171*91f16700Schasinglulu
1172*91f16700SchasingluluIt is also possible to introduce an infinite loop to help in debugging the
1173*91f16700Schasinglulupost-BL2 phase of TF-A. This can be done by rebuilding BL1 with the
1174*91f16700Schasinglulu``SPIN_ON_BL1_EXIT=1`` build flag. Refer to the :ref:`build_options_common`
1175*91f16700Schasinglulusection. In this case, the developer may take control of the target using a
1176*91f16700Schasingluludebugger when indicated by the console output. When using Arm-DS, the following
1177*91f16700Schasinglulucommands can be used:
1178*91f16700Schasinglulu
1179*91f16700Schasinglulu::
1180*91f16700Schasinglulu
1181*91f16700Schasinglulu    # Stop target execution
1182*91f16700Schasinglulu    interrupt
1183*91f16700Schasinglulu
1184*91f16700Schasinglulu    #
1185*91f16700Schasinglulu    # Prepare your debugging environment, e.g. set breakpoints
1186*91f16700Schasinglulu    #
1187*91f16700Schasinglulu
1188*91f16700Schasinglulu    # Jump over the debug loop
1189*91f16700Schasinglulu    set var $AARCH64::$Core::$PC = $AARCH64::$Core::$PC + 4
1190*91f16700Schasinglulu
1191*91f16700Schasinglulu    # Resume execution
1192*91f16700Schasinglulu    continue
1193*91f16700Schasinglulu
1194*91f16700Schasinglulu.. _build_options_experimental:
1195*91f16700Schasinglulu
1196*91f16700SchasingluluExperimental build options
1197*91f16700Schasinglulu---------------------------
1198*91f16700Schasinglulu
1199*91f16700SchasingluluCommon build options
1200*91f16700Schasinglulu~~~~~~~~~~~~~~~~~~~~
1201*91f16700Schasinglulu
1202*91f16700Schasinglulu-  ``DRTM_SUPPORT``: Boolean flag to enable support for Dynamic Root of Trust
1203*91f16700Schasinglulu   for Measurement (DRTM). This feature has trust dependency on BL31 for taking
1204*91f16700Schasinglulu   the measurements and recording them as per `PSA DRTM specification`_. For
1205*91f16700Schasinglulu   platforms which use BL2 to load/authenticate BL31 ``TRUSTED_BOARD_BOOT`` can
1206*91f16700Schasinglulu   be used and for the platforms which use ``RESET_TO_BL31`` platform owners
1207*91f16700Schasinglulu   should have mechanism to authenticate BL31. This option defaults to 0.
1208*91f16700Schasinglulu
1209*91f16700Schasinglulu-  ``ENABLE_RME``: Numeric value to enable support for the ARMv9 Realm
1210*91f16700Schasinglulu   Management Extension. This flag can take the values 0 to 2, to align with
1211*91f16700Schasinglulu   the ``FEATURE_DETECTION`` mechanism. Default value is 0.
1212*91f16700Schasinglulu
1213*91f16700Schasinglulu-  ``ENABLE_SME_FOR_NS``: Numeric value to enable Scalable Matrix Extension
1214*91f16700Schasinglulu   (SME), SVE, and FPU/SIMD for the non-secure world only. These features share
1215*91f16700Schasinglulu   registers so are enabled together. Using this option without
1216*91f16700Schasinglulu   ENABLE_SME_FOR_SWD=1 will cause SME, SVE, and FPU/SIMD instructions in secure
1217*91f16700Schasinglulu   world to trap to EL3. Requires ``ENABLE_SVE_FOR_NS`` to be set as SME is a
1218*91f16700Schasinglulu   superset of SVE. SME is an optional architectural feature for AArch64.
1219*91f16700Schasinglulu   At this time, this build option cannot be used on systems that have
1220*91f16700Schasinglulu   SPD=spmd/SPM_MM and atempting to build with this option will fail.
1221*91f16700Schasinglulu   This flag can take the values 0 to 2, to align with the ``FEATURE_DETECTION``
1222*91f16700Schasinglulu   mechanism. Default is 0.
1223*91f16700Schasinglulu
1224*91f16700Schasinglulu-  ``ENABLE_SME2_FOR_NS``: Numeric value to enable Scalable Matrix Extension
1225*91f16700Schasinglulu   version 2 (SME2) for the non-secure world only. SME2 is an optional
1226*91f16700Schasinglulu   architectural feature for AArch64.
1227*91f16700Schasinglulu   This should be set along with ENABLE_SME_FOR_NS=1, if not, the default SME
1228*91f16700Schasinglulu   accesses will still be trapped. This flag can take the values 0 to 2, to
1229*91f16700Schasinglulu   align with the ``FEATURE_DETECTION`` mechanism. Default is 0.
1230*91f16700Schasinglulu
1231*91f16700Schasinglulu-  ``ENABLE_SME_FOR_SWD``: Boolean option to enable the Scalable Matrix
1232*91f16700Schasinglulu   Extension for secure world. Used along with SVE and FPU/SIMD.
1233*91f16700Schasinglulu   ENABLE_SME_FOR_NS and ENABLE_SVE_FOR_SWD must also be set to use this.
1234*91f16700Schasinglulu   Default is 0.
1235*91f16700Schasinglulu
1236*91f16700Schasinglulu-  ``ENABLE_SPMD_LP`` : This boolean option is used jointly with the SPM
1237*91f16700Schasinglulu   Dispatcher option (``SPD=spmd``). When enabled (1) it indicates support
1238*91f16700Schasinglulu   for logical partitions in EL3, managed by the SPMD as defined in the
1239*91f16700Schasinglulu   FF-A v1.2 specification. This flag is disabled by default. This flag
1240*91f16700Schasinglulu   must not be used if ``SPMC_AT_EL3`` is enabled.
1241*91f16700Schasinglulu
1242*91f16700Schasinglulu-  ``FEATURE_DETECTION``: Boolean option to enable the architectural features
1243*91f16700Schasinglulu   detection mechanism. It detects whether the Architectural features enabled
1244*91f16700Schasinglulu   through feature specific build flags are supported by the PE or not by
1245*91f16700Schasinglulu   validating them either at boot phase or at runtime based on the value
1246*91f16700Schasinglulu   possessed by the feature flag (0 to 2) and report error messages at an early
1247*91f16700Schasinglulu   stage. This flag will also enable errata ordering checking for ``DEBUG``
1248*91f16700Schasinglulu   builds.
1249*91f16700Schasinglulu
1250*91f16700Schasinglulu   This prevents and benefits us from EL3 runtime exceptions during context save
1251*91f16700Schasinglulu   and restore routines guarded by these build flags. Henceforth validating them
1252*91f16700Schasinglulu   before their usage provides more control on the actions taken under them.
1253*91f16700Schasinglulu
1254*91f16700Schasinglulu   The mechanism permits the build flags to take values 0, 1 or 2 and
1255*91f16700Schasinglulu   evaluates them accordingly.
1256*91f16700Schasinglulu
1257*91f16700Schasinglulu   Lets consider ``ENABLE_FEAT_HCX``, build flag for ``FEAT_HCX`` as an example:
1258*91f16700Schasinglulu
1259*91f16700Schasinglulu   ::
1260*91f16700Schasinglulu
1261*91f16700Schasinglulu     ENABLE_FEAT_HCX = 0: Feature disabled statically at compile time.
1262*91f16700Schasinglulu     ENABLE_FEAT_HCX = 1: Feature Enabled and the flag is validated at boottime.
1263*91f16700Schasinglulu     ENABLE_FEAT_HCX = 2: Feature Enabled and the flag is validated at runtime.
1264*91f16700Schasinglulu
1265*91f16700Schasinglulu   In the above example, if the feature build flag, ``ENABLE_FEAT_HCX`` set to
1266*91f16700Schasinglulu   0, feature is disabled statically during compilation. If it is defined as 1,
1267*91f16700Schasinglulu   feature is validated, wherein FEAT_HCX is detected at boot time. In case not
1268*91f16700Schasinglulu   implemented by the PE, a hard panic is generated. Finally, if the flag is set
1269*91f16700Schasinglulu   to 2, feature is validated at runtime.
1270*91f16700Schasinglulu
1271*91f16700Schasinglulu   Note that the entire implementation is divided into two phases, wherein as
1272*91f16700Schasinglulu   as part of phase-1 we are supporting the values 0,1. Value 2 is currently not
1273*91f16700Schasinglulu   supported and is planned to be handled explicilty in phase-2 implementation.
1274*91f16700Schasinglulu
1275*91f16700Schasinglulu   ``FEATURE_DETECTION`` macro is disabled by default. Platforms can explicitly
1276*91f16700Schasinglulu   make use of this by mechanism, by enabling it to validate whether they have
1277*91f16700Schasinglulu   set their build flags properly at an early phase.
1278*91f16700Schasinglulu
1279*91f16700Schasinglulu-  ``PSA_CRYPTO``: Boolean option for enabling MbedTLS PSA crypto APIs support.
1280*91f16700Schasinglulu   The platform will use PSA compliant Crypto APIs during authentication and
1281*91f16700Schasinglulu   image measurement process by enabling this option. It uses APIs defined as
1282*91f16700Schasinglulu   per the `PSA Crypto API specification`_. This feature is only supported if
1283*91f16700Schasinglulu   using MbedTLS 3.x version. It is disabled (``0``) by default.
1284*91f16700Schasinglulu
1285*91f16700Schasinglulu-  ``TRANSFER_LIST``: Setting this to ``1`` enables support for Firmware
1286*91f16700Schasinglulu   Handoff using Transfer List defined in `Firmware Handoff specification`_.
1287*91f16700Schasinglulu   This defaults to ``0``. Current implementation follows the Firmware Handoff
1288*91f16700Schasinglulu   specification v0.9.
1289*91f16700Schasinglulu
1290*91f16700Schasinglulu-  ``USE_DEBUGFS``: When set to 1 this option exposes a virtual filesystem
1291*91f16700Schasinglulu   interface through BL31 as a SiP SMC function.
1292*91f16700Schasinglulu   Default is disabled (0).
1293*91f16700Schasinglulu
1294*91f16700SchasingluluFirmware update options
1295*91f16700Schasinglulu~~~~~~~~~~~~~~~~~~~~~~~
1296*91f16700Schasinglulu
1297*91f16700Schasinglulu-  ``PSA_FWU_SUPPORT``: Enable the firmware update mechanism as per the
1298*91f16700Schasinglulu   `PSA FW update specification`_. The default value is 0.
1299*91f16700Schasinglulu   PSA firmware update implementation has few limitations, such as:
1300*91f16700Schasinglulu
1301*91f16700Schasinglulu   -  BL2 is not part of the protocol-updatable images. If BL2 needs to
1302*91f16700Schasinglulu      be updated, then it should be done through another platform-defined
1303*91f16700Schasinglulu      mechanism.
1304*91f16700Schasinglulu
1305*91f16700Schasinglulu   -  It assumes the platform's hardware supports CRC32 instructions.
1306*91f16700Schasinglulu
1307*91f16700Schasinglulu-  ``NR_OF_FW_BANKS``: Define the number of firmware banks. This flag is used
1308*91f16700Schasinglulu   in defining the firmware update metadata structure. This flag is by default
1309*91f16700Schasinglulu   set to '2'.
1310*91f16700Schasinglulu
1311*91f16700Schasinglulu-  ``NR_OF_IMAGES_IN_FW_BANK``: Define the number of firmware images in each
1312*91f16700Schasinglulu   firmware bank. Each firmware bank must have the same number of images as per
1313*91f16700Schasinglulu   the `PSA FW update specification`_.
1314*91f16700Schasinglulu   This flag is used in defining the firmware update metadata structure. This
1315*91f16700Schasinglulu   flag is by default set to '1'.
1316*91f16700Schasinglulu
1317*91f16700Schasinglulu--------------
1318*91f16700Schasinglulu
1319*91f16700Schasinglulu*Copyright (c) 2019-2023, Arm Limited. All rights reserved.*
1320*91f16700Schasinglulu
1321*91f16700Schasinglulu.. _DEN0115: https://developer.arm.com/docs/den0115/latest
1322*91f16700Schasinglulu.. _PSA FW update specification: https://developer.arm.com/documentation/den0118/a/
1323*91f16700Schasinglulu.. _PSA DRTM specification: https://developer.arm.com/documentation/den0113/a
1324*91f16700Schasinglulu.. _GCC: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
1325*91f16700Schasinglulu.. _Clang: https://clang.llvm.org/docs/DiagnosticsReference.html
1326*91f16700Schasinglulu.. _Firmware Handoff specification: https://github.com/FirmwareHandoff/firmware_handoff/releases/tag/v0.9
1327*91f16700Schasinglulu.. _PSA Crypto API specification: https://armmbed.github.io/mbed-crypto/html/
1328