xref: /aosp_15_r20/external/arm-trusted-firmware/docs/getting_started/build-options.rst (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong ParkBuild Options
2*54fd6939SJiyong Park=============
3*54fd6939SJiyong Park
4*54fd6939SJiyong ParkThe TF-A build system supports the following build options. Unless mentioned
5*54fd6939SJiyong Parkotherwise, these options are expected to be specified at the build command
6*54fd6939SJiyong Parkline and are not to be modified in any component makefiles. Note that the
7*54fd6939SJiyong Parkbuild system doesn't track dependency for build options. Therefore, if any of
8*54fd6939SJiyong Parkthe build options are changed from a previous build, a clean build must be
9*54fd6939SJiyong Parkperformed.
10*54fd6939SJiyong Park
11*54fd6939SJiyong Park.. _build_options_common:
12*54fd6939SJiyong Park
13*54fd6939SJiyong ParkCommon build options
14*54fd6939SJiyong Park--------------------
15*54fd6939SJiyong Park
16*54fd6939SJiyong Park-  ``AARCH32_INSTRUCTION_SET``: Choose the AArch32 instruction set that the
17*54fd6939SJiyong Park   compiler should use. Valid values are T32 and A32. It defaults to T32 due to
18*54fd6939SJiyong Park   code having a smaller resulting size.
19*54fd6939SJiyong Park
20*54fd6939SJiyong Park-  ``AARCH32_SP`` : Choose the AArch32 Secure Payload component to be built as
21*54fd6939SJiyong Park   as the BL32 image when ``ARCH=aarch32``. The value should be the path to the
22*54fd6939SJiyong Park   directory containing the SP source, relative to the ``bl32/``; the directory
23*54fd6939SJiyong Park   is expected to contain a makefile called ``<aarch32_sp-value>.mk``.
24*54fd6939SJiyong Park
25*54fd6939SJiyong Park-  ``AMU_RESTRICT_COUNTERS``: Register reads to the group 1 counters will return
26*54fd6939SJiyong Park   zero at all but the highest implemented exception level.  Reads from the
27*54fd6939SJiyong Park   memory mapped view are unaffected by this control.
28*54fd6939SJiyong Park
29*54fd6939SJiyong Park-  ``ARCH`` : Choose the target build architecture for TF-A. It can take either
30*54fd6939SJiyong Park   ``aarch64`` or ``aarch32`` as values. By default, it is defined to
31*54fd6939SJiyong Park   ``aarch64``.
32*54fd6939SJiyong Park
33*54fd6939SJiyong Park-  ``ARM_ARCH_FEATURE``: Optional Arm Architecture build option which specifies
34*54fd6939SJiyong Park   one or more feature modifiers. This option has the form ``[no]feature+...``
35*54fd6939SJiyong Park   and defaults to ``none``. It translates into compiler option
36*54fd6939SJiyong Park   ``-march=armvX[.Y]-a+[no]feature+...``. See compiler's documentation for the
37*54fd6939SJiyong Park   list of supported feature modifiers.
38*54fd6939SJiyong Park
39*54fd6939SJiyong Park-  ``ARM_ARCH_MAJOR``: The major version of Arm Architecture to target when
40*54fd6939SJiyong Park   compiling TF-A. Its value must be numeric, and defaults to 8 . See also,
41*54fd6939SJiyong Park   *Armv8 Architecture Extensions* and *Armv7 Architecture Extensions* in
42*54fd6939SJiyong Park   :ref:`Firmware Design`.
43*54fd6939SJiyong Park
44*54fd6939SJiyong Park-  ``ARM_ARCH_MINOR``: The minor version of Arm Architecture to target when
45*54fd6939SJiyong Park   compiling TF-A. Its value must be a numeric, and defaults to 0. See also,
46*54fd6939SJiyong Park   *Armv8 Architecture Extensions* in :ref:`Firmware Design`.
47*54fd6939SJiyong Park
48*54fd6939SJiyong Park-  ``BL2``: This is an optional build option which specifies the path to BL2
49*54fd6939SJiyong Park   image for the ``fip`` target. In this case, the BL2 in the TF-A will not be
50*54fd6939SJiyong Park   built.
51*54fd6939SJiyong Park
52*54fd6939SJiyong Park-  ``BL2U``: This is an optional build option which specifies the path to
53*54fd6939SJiyong Park   BL2U image. In this case, the BL2U in TF-A will not be built.
54*54fd6939SJiyong Park
55*54fd6939SJiyong Park-  ``BL2_AT_EL3``: This is an optional build option that enables the use of
56*54fd6939SJiyong Park   BL2 at EL3 execution level.
57*54fd6939SJiyong Park
58*54fd6939SJiyong Park-  ``BL2_ENABLE_SP_LOAD``: Boolean option to enable loading SP packages from the
59*54fd6939SJiyong Park   FIP. Automatically enabled if ``SP_LAYOUT_FILE`` is provided.
60*54fd6939SJiyong Park
61*54fd6939SJiyong Park-  ``BL2_IN_XIP_MEM``: In some use-cases BL2 will be stored in eXecute In Place
62*54fd6939SJiyong Park   (XIP) memory, like BL1. In these use-cases, it is necessary to initialize
63*54fd6939SJiyong Park   the RW sections in RAM, while leaving the RO sections in place. This option
64*54fd6939SJiyong Park   enable this use-case. For now, this option is only supported when BL2_AT_EL3
65*54fd6939SJiyong Park   is set to '1'.
66*54fd6939SJiyong Park
67*54fd6939SJiyong Park-  ``BL31``: This is an optional build option which specifies the path to
68*54fd6939SJiyong Park   BL31 image for the ``fip`` target. In this case, the BL31 in TF-A will not
69*54fd6939SJiyong Park   be built.
70*54fd6939SJiyong Park
71*54fd6939SJiyong Park-  ``BL31_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
72*54fd6939SJiyong Park   file that contains the BL31 private key in PEM format. If ``SAVE_KEYS=1``,
73*54fd6939SJiyong Park   this file name will be used to save the key.
74*54fd6939SJiyong Park
75*54fd6939SJiyong Park-  ``BL32``: This is an optional build option which specifies the path to
76*54fd6939SJiyong Park   BL32 image for the ``fip`` target. In this case, the BL32 in TF-A will not
77*54fd6939SJiyong Park   be built.
78*54fd6939SJiyong Park
79*54fd6939SJiyong Park-  ``BL32_EXTRA1``: This is an optional build option which specifies the path to
80*54fd6939SJiyong Park   Trusted OS Extra1 image for the  ``fip`` target.
81*54fd6939SJiyong Park
82*54fd6939SJiyong Park-  ``BL32_EXTRA2``: This is an optional build option which specifies the path to
83*54fd6939SJiyong Park   Trusted OS Extra2 image for the ``fip`` target.
84*54fd6939SJiyong Park
85*54fd6939SJiyong Park-  ``BL32_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
86*54fd6939SJiyong Park   file that contains the BL32 private key in PEM format. If ``SAVE_KEYS=1``,
87*54fd6939SJiyong Park   this file name will be used to save the key.
88*54fd6939SJiyong Park
89*54fd6939SJiyong Park-  ``BL33``: Path to BL33 image in the host file system. This is mandatory for
90*54fd6939SJiyong Park   ``fip`` target in case TF-A BL2 is used.
91*54fd6939SJiyong Park
92*54fd6939SJiyong Park-  ``BL33_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
93*54fd6939SJiyong Park   file that contains the BL33 private key in PEM format. If ``SAVE_KEYS=1``,
94*54fd6939SJiyong Park   this file name will be used to save the key.
95*54fd6939SJiyong Park
96*54fd6939SJiyong Park-  ``BRANCH_PROTECTION``: Numeric value to enable ARMv8.3 Pointer Authentication
97*54fd6939SJiyong Park   and ARMv8.5 Branch Target Identification support for TF-A BL images themselves.
98*54fd6939SJiyong Park   If enabled, it is needed to use a compiler that supports the option
99*54fd6939SJiyong Park   ``-mbranch-protection``. Selects the branch protection features to use:
100*54fd6939SJiyong Park-  0: Default value turns off all types of branch protection
101*54fd6939SJiyong Park-  1: Enables all types of branch protection features
102*54fd6939SJiyong Park-  2: Return address signing to its standard level
103*54fd6939SJiyong Park-  3: Extend the signing to include leaf functions
104*54fd6939SJiyong Park-  4: Turn on branch target identification mechanism
105*54fd6939SJiyong Park
106*54fd6939SJiyong Park   The table below summarizes ``BRANCH_PROTECTION`` values, GCC compilation options
107*54fd6939SJiyong Park   and resulting PAuth/BTI features.
108*54fd6939SJiyong Park
109*54fd6939SJiyong Park   +-------+--------------+-------+-----+
110*54fd6939SJiyong Park   | Value |  GCC option  | PAuth | BTI |
111*54fd6939SJiyong Park   +=======+==============+=======+=====+
112*54fd6939SJiyong Park   |   0   |     none     |   N   |  N  |
113*54fd6939SJiyong Park   +-------+--------------+-------+-----+
114*54fd6939SJiyong Park   |   1   |   standard   |   Y   |  Y  |
115*54fd6939SJiyong Park   +-------+--------------+-------+-----+
116*54fd6939SJiyong Park   |   2   |   pac-ret    |   Y   |  N  |
117*54fd6939SJiyong Park   +-------+--------------+-------+-----+
118*54fd6939SJiyong Park   |   3   | pac-ret+leaf |   Y   |  N  |
119*54fd6939SJiyong Park   +-------+--------------+-------+-----+
120*54fd6939SJiyong Park   |   4   |     bti      |   N   |  Y  |
121*54fd6939SJiyong Park   +-------+--------------+-------+-----+
122*54fd6939SJiyong Park
123*54fd6939SJiyong Park   This option defaults to 0.
124*54fd6939SJiyong Park   Note that Pointer Authentication is enabled for Non-secure world
125*54fd6939SJiyong Park   irrespective of the value of this option if the CPU supports it.
126*54fd6939SJiyong Park
127*54fd6939SJiyong Park-  ``BUILD_MESSAGE_TIMESTAMP``: String used to identify the time and date of the
128*54fd6939SJiyong Park   compilation of each build. It must be set to a C string (including quotes
129*54fd6939SJiyong Park   where applicable). Defaults to a string that contains the time and date of
130*54fd6939SJiyong Park   the compilation.
131*54fd6939SJiyong Park
132*54fd6939SJiyong Park-  ``BUILD_STRING``: Input string for VERSION_STRING, which allows the TF-A
133*54fd6939SJiyong Park   build to be uniquely identified. Defaults to the current git commit id.
134*54fd6939SJiyong Park
135*54fd6939SJiyong Park-  ``BUILD_BASE``: Output directory for the build. Defaults to ``./build``
136*54fd6939SJiyong Park
137*54fd6939SJiyong Park-  ``CFLAGS``: Extra user options appended on the compiler's command line in
138*54fd6939SJiyong Park   addition to the options set by the build system.
139*54fd6939SJiyong Park
140*54fd6939SJiyong Park-  ``COLD_BOOT_SINGLE_CPU``: This option indicates whether the platform may
141*54fd6939SJiyong Park   release several CPUs out of reset. It can take either 0 (several CPUs may be
142*54fd6939SJiyong Park   brought up) or 1 (only one CPU will ever be brought up during cold reset).
143*54fd6939SJiyong Park   Default is 0. If the platform always brings up a single CPU, there is no
144*54fd6939SJiyong Park   need to distinguish between primary and secondary CPUs and the boot path can
145*54fd6939SJiyong Park   be optimised. The ``plat_is_my_cpu_primary()`` and
146*54fd6939SJiyong Park   ``plat_secondary_cold_boot_setup()`` platform porting interfaces do not need
147*54fd6939SJiyong Park   to be implemented in this case.
148*54fd6939SJiyong Park
149*54fd6939SJiyong Park-  ``COT``: When Trusted Boot is enabled, selects the desired chain of trust.
150*54fd6939SJiyong Park   Defaults to ``tbbr``.
151*54fd6939SJiyong Park
152*54fd6939SJiyong Park-  ``CRASH_REPORTING``: A non-zero value enables a console dump of processor
153*54fd6939SJiyong Park   register state when an unexpected exception occurs during execution of
154*54fd6939SJiyong Park   BL31. This option defaults to the value of ``DEBUG`` - i.e. by default
155*54fd6939SJiyong Park   this is only enabled for a debug build of the firmware.
156*54fd6939SJiyong Park
157*54fd6939SJiyong Park-  ``CREATE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
158*54fd6939SJiyong Park   certificate generation tool to create new keys in case no valid keys are
159*54fd6939SJiyong Park   present or specified. Allowed options are '0' or '1'. Default is '1'.
160*54fd6939SJiyong Park
161*54fd6939SJiyong Park-  ``CTX_INCLUDE_AARCH32_REGS`` : Boolean option that, when set to 1, will cause
162*54fd6939SJiyong Park   the AArch32 system registers to be included when saving and restoring the
163*54fd6939SJiyong Park   CPU context. The option must be set to 0 for AArch64-only platforms (that
164*54fd6939SJiyong Park   is on hardware that does not implement AArch32, or at least not at EL1 and
165*54fd6939SJiyong Park   higher ELs). Default value is 1.
166*54fd6939SJiyong Park
167*54fd6939SJiyong Park-  ``CTX_INCLUDE_EL2_REGS`` : This boolean option provides context save/restore
168*54fd6939SJiyong Park   operations when entering/exiting an EL2 execution context. This is of primary
169*54fd6939SJiyong Park   interest when Armv8.4-SecEL2 extension is implemented. Default is 0 (disabled).
170*54fd6939SJiyong Park   This option must be equal to 1 (enabled) when ``SPD=spmd`` and
171*54fd6939SJiyong Park   ``SPMD_SPM_AT_SEL2`` is set.
172*54fd6939SJiyong Park
173*54fd6939SJiyong Park-  ``CTX_INCLUDE_FPREGS``: Boolean option that, when set to 1, will cause the FP
174*54fd6939SJiyong Park   registers to be included when saving and restoring the CPU context. Default
175*54fd6939SJiyong Park   is 0.
176*54fd6939SJiyong Park
177*54fd6939SJiyong Park-  ``CTX_INCLUDE_NEVE_REGS``: Boolean option that, when set to 1, will cause the
178*54fd6939SJiyong Park   Armv8.4-NV registers to be saved/restored when entering/exiting an EL2
179*54fd6939SJiyong Park   execution context. Default value is 0.
180*54fd6939SJiyong Park
181*54fd6939SJiyong Park-  ``CTX_INCLUDE_PAUTH_REGS``: Boolean option that, when set to 1, enables
182*54fd6939SJiyong Park   Pointer Authentication for Secure world. This will cause the ARMv8.3-PAuth
183*54fd6939SJiyong Park   registers to be included when saving and restoring the CPU context as
184*54fd6939SJiyong Park   part of world switch. Default value is 0.
185*54fd6939SJiyong Park   Note that Pointer Authentication is enabled for Non-secure world irrespective
186*54fd6939SJiyong Park   of the value of this flag if the CPU supports it.
187*54fd6939SJiyong Park
188*54fd6939SJiyong Park-  ``DEBUG``: Chooses between a debug and release build. It can take either 0
189*54fd6939SJiyong Park   (release) or 1 (debug) as values. 0 is the default.
190*54fd6939SJiyong Park
191*54fd6939SJiyong Park-  ``DECRYPTION_SUPPORT``: This build flag enables the user to select the
192*54fd6939SJiyong Park   authenticated decryption algorithm to be used to decrypt firmware/s during
193*54fd6939SJiyong Park   boot. It accepts 2 values: ``aes_gcm`` and ``none``. The default value of
194*54fd6939SJiyong Park   this flag is ``none`` to disable firmware decryption which is an optional
195*54fd6939SJiyong Park   feature as per TBBR.
196*54fd6939SJiyong Park
197*54fd6939SJiyong Park-  ``DISABLE_BIN_GENERATION``: Boolean option to disable the generation
198*54fd6939SJiyong Park   of the binary image. If set to 1, then only the ELF image is built.
199*54fd6939SJiyong Park   0 is the default.
200*54fd6939SJiyong Park
201*54fd6939SJiyong Park-  ``DISABLE_MTPMU``: Boolean option to disable FEAT_MTPMU if implemented
202*54fd6939SJiyong Park   (Armv8.6 onwards). Its default value is 0 to keep consistency with platforms
203*54fd6939SJiyong Park   that do not implement FEAT_MTPMU. For more information on FEAT_MTPMU,
204*54fd6939SJiyong Park   check the latest Arm ARM.
205*54fd6939SJiyong Park
206*54fd6939SJiyong Park-  ``DYN_DISABLE_AUTH``: Provides the capability to dynamically disable Trusted
207*54fd6939SJiyong Park   Board Boot authentication at runtime. This option is meant to be enabled only
208*54fd6939SJiyong Park   for development platforms. ``TRUSTED_BOARD_BOOT`` flag must be set if this
209*54fd6939SJiyong Park   flag has to be enabled. 0 is the default.
210*54fd6939SJiyong Park
211*54fd6939SJiyong Park-  ``E``: Boolean option to make warnings into errors. Default is 1.
212*54fd6939SJiyong Park
213*54fd6939SJiyong Park-  ``EL3_PAYLOAD_BASE``: This option enables booting an EL3 payload instead of
214*54fd6939SJiyong Park   the normal boot flow. It must specify the entry point address of the EL3
215*54fd6939SJiyong Park   payload. Please refer to the "Booting an EL3 payload" section for more
216*54fd6939SJiyong Park   details.
217*54fd6939SJiyong Park
218*54fd6939SJiyong Park-  ``ENABLE_AMU``: Boolean option to enable Activity Monitor Unit extensions.
219*54fd6939SJiyong Park   This is an optional architectural feature available on v8.4 onwards. Some
220*54fd6939SJiyong Park   v8.2 implementations also implement an AMU and this option can be used to
221*54fd6939SJiyong Park   enable this feature on those systems as well. Default is 0.
222*54fd6939SJiyong Park
223*54fd6939SJiyong Park-  ``ENABLE_AMU_AUXILIARY_COUNTERS``: Enables support for AMU auxiliary counters
224*54fd6939SJiyong Park   (also known as group 1 counters). These are implementation-defined counters,
225*54fd6939SJiyong Park   and as such require additional platform configuration. Default is 0.
226*54fd6939SJiyong Park
227*54fd6939SJiyong Park-  ``ENABLE_AMU_FCONF``: Enables configuration of the AMU through FCONF, which
228*54fd6939SJiyong Park   allows platforms with auxiliary counters to describe them via the
229*54fd6939SJiyong Park   ``HW_CONFIG`` device tree blob. Default is 0.
230*54fd6939SJiyong Park
231*54fd6939SJiyong Park-  ``ENABLE_ASSERTIONS``: This option controls whether or not calls to ``assert()``
232*54fd6939SJiyong Park   are compiled out. For debug builds, this option defaults to 1, and calls to
233*54fd6939SJiyong Park   ``assert()`` are left in place. For release builds, this option defaults to 0
234*54fd6939SJiyong Park   and calls to ``assert()`` function are compiled out. This option can be set
235*54fd6939SJiyong Park   independently of ``DEBUG``. It can also be used to hide any auxiliary code
236*54fd6939SJiyong Park   that is only required for the assertion and does not fit in the assertion
237*54fd6939SJiyong Park   itself.
238*54fd6939SJiyong Park
239*54fd6939SJiyong Park-  ``ENABLE_BACKTRACE``: This option controls whether to enable backtrace
240*54fd6939SJiyong Park   dumps or not. It is supported in both AArch64 and AArch32. However, in
241*54fd6939SJiyong Park   AArch32 the format of the frame records are not defined in the AAPCS and they
242*54fd6939SJiyong Park   are defined by the implementation. This implementation of backtrace only
243*54fd6939SJiyong Park   supports the format used by GCC when T32 interworking is disabled. For this
244*54fd6939SJiyong Park   reason enabling this option in AArch32 will force the compiler to only
245*54fd6939SJiyong Park   generate A32 code. This option is enabled by default only in AArch64 debug
246*54fd6939SJiyong Park   builds, but this behaviour can be overridden in each platform's Makefile or
247*54fd6939SJiyong Park   in the build command line.
248*54fd6939SJiyong Park
249*54fd6939SJiyong Park-  ``ENABLE_FEAT_HCX``: This option sets the bit SCR_EL3.HXEn in EL3 to allow
250*54fd6939SJiyong Park   access to HCRX_EL2 (extended hypervisor control register) from EL2 as well as
251*54fd6939SJiyong Park   adding HCRX_EL2 to the EL2 context save/restore operations.
252*54fd6939SJiyong Park
253*54fd6939SJiyong Park-  ``ENABLE_LTO``: Boolean option to enable Link Time Optimization (LTO)
254*54fd6939SJiyong Park   support in GCC for TF-A. This option is currently only supported for
255*54fd6939SJiyong Park   AArch64. Default is 0.
256*54fd6939SJiyong Park
257*54fd6939SJiyong Park-  ``ENABLE_MPAM_FOR_LOWER_ELS``: Boolean option to enable lower ELs to use MPAM
258*54fd6939SJiyong Park   feature. MPAM is an optional Armv8.4 extension that enables various memory
259*54fd6939SJiyong Park   system components and resources to define partitions; software running at
260*54fd6939SJiyong Park   various ELs can assign themselves to desired partition to control their
261*54fd6939SJiyong Park   performance aspects.
262*54fd6939SJiyong Park
263*54fd6939SJiyong Park   When this option is set to ``1``, EL3 allows lower ELs to access their own
264*54fd6939SJiyong Park   MPAM registers without trapping into EL3. This option doesn't make use of
265*54fd6939SJiyong Park   partitioning in EL3, however. Platform initialisation code should configure
266*54fd6939SJiyong Park   and use partitions in EL3 as required. This option defaults to ``0``.
267*54fd6939SJiyong Park
268*54fd6939SJiyong Park-  ``ENABLE_MPMM``: Boolean option to enable support for the Maximum Power
269*54fd6939SJiyong Park   Mitigation Mechanism supported by certain Arm cores, which allows the SoC
270*54fd6939SJiyong Park   firmware to detect and limit high activity events to assist in SoC processor
271*54fd6939SJiyong Park   power domain dynamic power budgeting and limit the triggering of whole-rail
272*54fd6939SJiyong Park   (i.e. clock chopping) responses to overcurrent conditions. Defaults to ``0``.
273*54fd6939SJiyong Park
274*54fd6939SJiyong Park-  ``ENABLE_MPMM_FCONF``: Enables configuration of MPMM through FCONF, which
275*54fd6939SJiyong Park   allows platforms with cores supporting MPMM to describe them via the
276*54fd6939SJiyong Park   ``HW_CONFIG`` device tree blob. Default is 0.
277*54fd6939SJiyong Park
278*54fd6939SJiyong Park-  ``ENABLE_PIE``: Boolean option to enable Position Independent Executable(PIE)
279*54fd6939SJiyong Park   support within generic code in TF-A. This option is currently only supported
280*54fd6939SJiyong Park   in BL2_AT_EL3, BL31, and BL32 (TSP) for AARCH64 binaries, and in BL32
281*54fd6939SJiyong Park   (SP_min) for AARCH32. Default is 0.
282*54fd6939SJiyong Park
283*54fd6939SJiyong Park-  ``ENABLE_PMF``: Boolean option to enable support for optional Performance
284*54fd6939SJiyong Park   Measurement Framework(PMF). Default is 0.
285*54fd6939SJiyong Park
286*54fd6939SJiyong Park-  ``ENABLE_PSCI_STAT``: Boolean option to enable support for optional PSCI
287*54fd6939SJiyong Park   functions ``PSCI_STAT_RESIDENCY`` and ``PSCI_STAT_COUNT``. Default is 0.
288*54fd6939SJiyong Park   In the absence of an alternate stat collection backend, ``ENABLE_PMF`` must
289*54fd6939SJiyong Park   be enabled. If ``ENABLE_PMF`` is set, the residency statistics are tracked in
290*54fd6939SJiyong Park   software.
291*54fd6939SJiyong Park
292*54fd6939SJiyong Park- ``ENABLE_RME``: Boolean option to enable support for the ARMv9 Realm
293*54fd6939SJiyong Park   Management Extension. Default value is 0. This is currently an experimental
294*54fd6939SJiyong Park   feature.
295*54fd6939SJiyong Park
296*54fd6939SJiyong Park-  ``ENABLE_RUNTIME_INSTRUMENTATION``: Boolean option to enable runtime
297*54fd6939SJiyong Park   instrumentation which injects timestamp collection points into TF-A to
298*54fd6939SJiyong Park   allow runtime performance to be measured. Currently, only PSCI is
299*54fd6939SJiyong Park   instrumented. Enabling this option enables the ``ENABLE_PMF`` build option
300*54fd6939SJiyong Park   as well. Default is 0.
301*54fd6939SJiyong Park
302*54fd6939SJiyong Park-  ``ENABLE_SME_FOR_NS``: Boolean option to enable Scalable Matrix Extension
303*54fd6939SJiyong Park   (SME), SVE, and FPU/SIMD for the non-secure world only. These features share
304*54fd6939SJiyong Park   registers so are enabled together. Using this option without
305*54fd6939SJiyong Park   ENABLE_SME_FOR_SWD=1 will cause SME, SVE, and FPU/SIMD instructions in secure
306*54fd6939SJiyong Park   world to trap to EL3. SME is an optional architectural feature for AArch64
307*54fd6939SJiyong Park   and TF-A support is experimental. At this time, this build option cannot be
308*54fd6939SJiyong Park   used on systems that have SPD=spmd/SPM_MM or ENABLE_RME, and attempting to
309*54fd6939SJiyong Park   build with these options will fail. Default is 0.
310*54fd6939SJiyong Park
311*54fd6939SJiyong Park-  ``ENABLE_SME_FOR_SWD``: Boolean option to enable the Scalable Matrix
312*54fd6939SJiyong Park   Extension for secure world use along with SVE and FPU/SIMD, ENABLE_SME_FOR_NS
313*54fd6939SJiyong Park   must also be set to use this. If enabling this, the secure world MUST
314*54fd6939SJiyong Park   handle context switching for SME, SVE, and FPU/SIMD registers to ensure that
315*54fd6939SJiyong Park   no data is leaked to non-secure world. This is experimental. Default is 0.
316*54fd6939SJiyong Park
317*54fd6939SJiyong Park-  ``ENABLE_SPE_FOR_LOWER_ELS`` : Boolean option to enable Statistical Profiling
318*54fd6939SJiyong Park   extensions. This is an optional architectural feature for AArch64.
319*54fd6939SJiyong Park   The default is 1 but is automatically disabled when the target architecture
320*54fd6939SJiyong Park   is AArch32.
321*54fd6939SJiyong Park
322*54fd6939SJiyong Park-  ``ENABLE_SVE_FOR_NS``: Boolean option to enable Scalable Vector Extension
323*54fd6939SJiyong Park   (SVE) for the Non-secure world only. SVE is an optional architectural feature
324*54fd6939SJiyong Park   for AArch64. Note that when SVE is enabled for the Non-secure world, access
325*54fd6939SJiyong Park   to SIMD and floating-point functionality from the Secure world is disabled by
326*54fd6939SJiyong Park   default and controlled with ENABLE_SVE_FOR_SWD.
327*54fd6939SJiyong Park   This is to avoid corruption of the Non-secure world data in the Z-registers
328*54fd6939SJiyong Park   which are aliased by the SIMD and FP registers. The build option is not
329*54fd6939SJiyong Park   compatible with the ``CTX_INCLUDE_FPREGS`` build option, and will raise an
330*54fd6939SJiyong Park   assert on platforms where SVE is implemented and ``ENABLE_SVE_FOR_NS`` set to
331*54fd6939SJiyong Park   1. The default is 1 but is automatically disabled when ENABLE_SME_FOR_NS=1
332*54fd6939SJiyong Park   since SME encompasses SVE. At this time, this build option cannot be used on
333*54fd6939SJiyong Park   systems that have SPM_MM enabled.
334*54fd6939SJiyong Park
335*54fd6939SJiyong Park-  ``ENABLE_SVE_FOR_SWD``: Boolean option to enable SVE for the Secure world.
336*54fd6939SJiyong Park   SVE is an optional architectural feature for AArch64. Note that this option
337*54fd6939SJiyong Park   requires ENABLE_SVE_FOR_NS to be enabled.  The default is 0 and it is
338*54fd6939SJiyong Park   automatically disabled when the target architecture is AArch32.
339*54fd6939SJiyong Park
340*54fd6939SJiyong Park-  ``ENABLE_STACK_PROTECTOR``: String option to enable the stack protection
341*54fd6939SJiyong Park   checks in GCC. Allowed values are "all", "strong", "default" and "none". The
342*54fd6939SJiyong Park   default value is set to "none". "strong" is the recommended stack protection
343*54fd6939SJiyong Park   level if this feature is desired. "none" disables the stack protection. For
344*54fd6939SJiyong Park   all values other than "none", the ``plat_get_stack_protector_canary()``
345*54fd6939SJiyong Park   platform hook needs to be implemented. The value is passed as the last
346*54fd6939SJiyong Park   component of the option ``-fstack-protector-$ENABLE_STACK_PROTECTOR``.
347*54fd6939SJiyong Park
348*54fd6939SJiyong Park-  ``ENCRYPT_BL31``: Binary flag to enable encryption of BL31 firmware. This
349*54fd6939SJiyong Park   flag depends on ``DECRYPTION_SUPPORT`` build flag.
350*54fd6939SJiyong Park
351*54fd6939SJiyong Park-  ``ENCRYPT_BL32``: Binary flag to enable encryption of Secure BL32 payload.
352*54fd6939SJiyong Park   This flag depends on ``DECRYPTION_SUPPORT`` build flag.
353*54fd6939SJiyong Park
354*54fd6939SJiyong Park-  ``ENC_KEY``: A 32-byte (256-bit) symmetric key in hex string format. It could
355*54fd6939SJiyong Park   either be SSK or BSSK depending on ``FW_ENC_STATUS`` flag. This value depends
356*54fd6939SJiyong Park   on ``DECRYPTION_SUPPORT`` build flag.
357*54fd6939SJiyong Park
358*54fd6939SJiyong Park-  ``ENC_NONCE``: A 12-byte (96-bit) encryption nonce or Initialization Vector
359*54fd6939SJiyong Park   (IV) in hex string format. This value depends on ``DECRYPTION_SUPPORT``
360*54fd6939SJiyong Park   build flag.
361*54fd6939SJiyong Park
362*54fd6939SJiyong Park-  ``ERROR_DEPRECATED``: This option decides whether to treat the usage of
363*54fd6939SJiyong Park   deprecated platform APIs, helper functions or drivers within Trusted
364*54fd6939SJiyong Park   Firmware as error. It can take the value 1 (flag the use of deprecated
365*54fd6939SJiyong Park   APIs as error) or 0. The default is 0.
366*54fd6939SJiyong Park
367*54fd6939SJiyong Park-  ``EL3_EXCEPTION_HANDLING``: When set to ``1``, enable handling of exceptions
368*54fd6939SJiyong Park   targeted at EL3. When set ``0`` (default), no exceptions are expected or
369*54fd6939SJiyong Park   handled at EL3, and a panic will result. This is supported only for AArch64
370*54fd6939SJiyong Park   builds.
371*54fd6939SJiyong Park
372*54fd6939SJiyong Park-  ``EVENT_LOG_LEVEL``: Chooses the log level to use for Measured Boot when
373*54fd6939SJiyong Park   ``MEASURED_BOOT`` is enabled. For a list of valid values, see ``LOG_LEVEL``.
374*54fd6939SJiyong Park   Default value is 40 (LOG_LEVEL_INFO).
375*54fd6939SJiyong Park
376*54fd6939SJiyong Park-  ``FAULT_INJECTION_SUPPORT``: ARMv8.4 extensions introduced support for fault
377*54fd6939SJiyong Park   injection from lower ELs, and this build option enables lower ELs to use
378*54fd6939SJiyong Park   Error Records accessed via System Registers to inject faults. This is
379*54fd6939SJiyong Park   applicable only to AArch64 builds.
380*54fd6939SJiyong Park
381*54fd6939SJiyong Park   This feature is intended for testing purposes only, and is advisable to keep
382*54fd6939SJiyong Park   disabled for production images.
383*54fd6939SJiyong Park
384*54fd6939SJiyong Park-  ``FIP_NAME``: This is an optional build option which specifies the FIP
385*54fd6939SJiyong Park   filename for the ``fip`` target. Default is ``fip.bin``.
386*54fd6939SJiyong Park
387*54fd6939SJiyong Park-  ``FWU_FIP_NAME``: This is an optional build option which specifies the FWU
388*54fd6939SJiyong Park   FIP filename for the ``fwu_fip`` target. Default is ``fwu_fip.bin``.
389*54fd6939SJiyong Park
390*54fd6939SJiyong Park-  ``FW_ENC_STATUS``: Top level firmware's encryption numeric flag, values:
391*54fd6939SJiyong Park
392*54fd6939SJiyong Park   ::
393*54fd6939SJiyong Park
394*54fd6939SJiyong Park     0: Encryption is done with Secret Symmetric Key (SSK) which is common
395*54fd6939SJiyong Park        for a class of devices.
396*54fd6939SJiyong Park     1: Encryption is done with Binding Secret Symmetric Key (BSSK) which is
397*54fd6939SJiyong Park        unique per device.
398*54fd6939SJiyong Park
399*54fd6939SJiyong Park   This flag depends on ``DECRYPTION_SUPPORT`` build flag.
400*54fd6939SJiyong Park
401*54fd6939SJiyong Park-  ``GENERATE_COT``: Boolean flag used to build and execute the ``cert_create``
402*54fd6939SJiyong Park   tool to create certificates as per the Chain of Trust described in
403*54fd6939SJiyong Park   :ref:`Trusted Board Boot`. The build system then calls ``fiptool`` to
404*54fd6939SJiyong Park   include the certificates in the FIP and FWU_FIP. Default value is '0'.
405*54fd6939SJiyong Park
406*54fd6939SJiyong Park   Specify both ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=1`` to include support
407*54fd6939SJiyong Park   for the Trusted Board Boot feature in the BL1 and BL2 images, to generate
408*54fd6939SJiyong Park   the corresponding certificates, and to include those certificates in the
409*54fd6939SJiyong Park   FIP and FWU_FIP.
410*54fd6939SJiyong Park
411*54fd6939SJiyong Park   Note that if ``TRUSTED_BOARD_BOOT=0`` and ``GENERATE_COT=1``, the BL1 and BL2
412*54fd6939SJiyong Park   images will not include support for Trusted Board Boot. The FIP will still
413*54fd6939SJiyong Park   include the corresponding certificates. This FIP can be used to verify the
414*54fd6939SJiyong Park   Chain of Trust on the host machine through other mechanisms.
415*54fd6939SJiyong Park
416*54fd6939SJiyong Park   Note that if ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=0``, the BL1 and BL2
417*54fd6939SJiyong Park   images will include support for Trusted Board Boot, but the FIP and FWU_FIP
418*54fd6939SJiyong Park   will not include the corresponding certificates, causing a boot failure.
419*54fd6939SJiyong Park
420*54fd6939SJiyong Park-  ``GICV2_G0_FOR_EL3``: Unlike GICv3, the GICv2 architecture doesn't have
421*54fd6939SJiyong Park   inherent support for specific EL3 type interrupts. Setting this build option
422*54fd6939SJiyong Park   to ``1`` assumes GICv2 *Group 0* interrupts are expected to target EL3, both
423*54fd6939SJiyong Park   by :ref:`platform abstraction layer<platform Interrupt Controller API>` and
424*54fd6939SJiyong Park   :ref:`Interrupt Management Framework<Interrupt Management Framework>`.
425*54fd6939SJiyong Park   This allows GICv2 platforms to enable features requiring EL3 interrupt type.
426*54fd6939SJiyong Park   This also means that all GICv2 Group 0 interrupts are delivered to EL3, and
427*54fd6939SJiyong Park   the Secure Payload interrupts needs to be synchronously handed over to Secure
428*54fd6939SJiyong Park   EL1 for handling. The default value of this option is ``0``, which means the
429*54fd6939SJiyong Park   Group 0 interrupts are assumed to be handled by Secure EL1.
430*54fd6939SJiyong Park
431*54fd6939SJiyong Park-  ``HANDLE_EA_EL3_FIRST``: When set to ``1``, External Aborts and SError
432*54fd6939SJiyong Park   Interrupts will be always trapped in EL3 i.e. in BL31 at runtime. When set to
433*54fd6939SJiyong Park   ``0`` (default), these exceptions will be trapped in the current exception
434*54fd6939SJiyong Park   level (or in EL1 if the current exception level is EL0).
435*54fd6939SJiyong Park
436*54fd6939SJiyong Park-  ``HW_ASSISTED_COHERENCY``: On most Arm systems to-date, platform-specific
437*54fd6939SJiyong Park   software operations are required for CPUs to enter and exit coherency.
438*54fd6939SJiyong Park   However, newer systems exist where CPUs' entry to and exit from coherency
439*54fd6939SJiyong Park   is managed in hardware. Such systems require software to only initiate these
440*54fd6939SJiyong Park   operations, and the rest is managed in hardware, minimizing active software
441*54fd6939SJiyong Park   management. In such systems, this boolean option enables TF-A to carry out
442*54fd6939SJiyong Park   build and run-time optimizations during boot and power management operations.
443*54fd6939SJiyong Park   This option defaults to 0 and if it is enabled, then it implies
444*54fd6939SJiyong Park   ``WARMBOOT_ENABLE_DCACHE_EARLY`` is also enabled.
445*54fd6939SJiyong Park
446*54fd6939SJiyong Park   If this flag is disabled while the platform which TF-A is compiled for
447*54fd6939SJiyong Park   includes cores that manage coherency in hardware, then a compilation error is
448*54fd6939SJiyong Park   generated. This is based on the fact that a system cannot have, at the same
449*54fd6939SJiyong Park   time, cores that manage coherency in hardware and cores that don't. In other
450*54fd6939SJiyong Park   words, a platform cannot have, at the same time, cores that require
451*54fd6939SJiyong Park   ``HW_ASSISTED_COHERENCY=1`` and cores that require
452*54fd6939SJiyong Park   ``HW_ASSISTED_COHERENCY=0``.
453*54fd6939SJiyong Park
454*54fd6939SJiyong Park   Note that, when ``HW_ASSISTED_COHERENCY`` is enabled, version 2 of
455*54fd6939SJiyong Park   translation library (xlat tables v2) must be used; version 1 of translation
456*54fd6939SJiyong Park   library is not supported.
457*54fd6939SJiyong Park
458*54fd6939SJiyong Park-  ``INVERTED_MEMMAP``: memmap tool print by default lower addresses at the
459*54fd6939SJiyong Park   bottom, higher addresses at the top. This build flag can be set to '1' to
460*54fd6939SJiyong Park   invert this behavior. Lower addresses will be printed at the top and higher
461*54fd6939SJiyong Park   addresses at the bottom.
462*54fd6939SJiyong Park
463*54fd6939SJiyong Park-  ``JUNO_AARCH32_EL3_RUNTIME``: This build flag enables you to execute EL3
464*54fd6939SJiyong Park   runtime software in AArch32 mode, which is required to run AArch32 on Juno.
465*54fd6939SJiyong Park   By default this flag is set to '0'. Enabling this flag builds BL1 and BL2 in
466*54fd6939SJiyong Park   AArch64 and facilitates the loading of ``SP_MIN`` and BL33 as AArch32 executable
467*54fd6939SJiyong Park   images.
468*54fd6939SJiyong Park
469*54fd6939SJiyong Park-  ``KEY_ALG``: This build flag enables the user to select the algorithm to be
470*54fd6939SJiyong Park   used for generating the PKCS keys and subsequent signing of the certificate.
471*54fd6939SJiyong Park   It accepts 3 values: ``rsa``, ``rsa_1_5`` and ``ecdsa``. The option
472*54fd6939SJiyong Park   ``rsa_1_5`` is the legacy PKCS#1 RSA 1.5 algorithm which is not TBBR
473*54fd6939SJiyong Park   compliant and is retained only for compatibility. The default value of this
474*54fd6939SJiyong Park   flag is ``rsa`` which is the TBBR compliant PKCS#1 RSA 2.1 scheme.
475*54fd6939SJiyong Park
476*54fd6939SJiyong Park-  ``KEY_SIZE``: This build flag enables the user to select the key size for
477*54fd6939SJiyong Park   the algorithm specified by ``KEY_ALG``. The valid values for ``KEY_SIZE``
478*54fd6939SJiyong Park   depend on the chosen algorithm and the cryptographic module.
479*54fd6939SJiyong Park
480*54fd6939SJiyong Park   +-----------+------------------------------------+
481*54fd6939SJiyong Park   |  KEY_ALG  |        Possible key sizes          |
482*54fd6939SJiyong Park   +===========+====================================+
483*54fd6939SJiyong Park   |    rsa    | 1024 , 2048 (default), 3072, 4096* |
484*54fd6939SJiyong Park   +-----------+------------------------------------+
485*54fd6939SJiyong Park   |   ecdsa   |            unavailable             |
486*54fd6939SJiyong Park   +-----------+------------------------------------+
487*54fd6939SJiyong Park
488*54fd6939SJiyong Park   * Only 2048 bits size is available with CryptoCell 712 SBROM release 1.
489*54fd6939SJiyong Park     Only 3072 bits size is available with CryptoCell 712 SBROM release 2.
490*54fd6939SJiyong Park
491*54fd6939SJiyong Park-  ``HASH_ALG``: This build flag enables the user to select the secure hash
492*54fd6939SJiyong Park   algorithm. It accepts 3 values: ``sha256``, ``sha384`` and ``sha512``.
493*54fd6939SJiyong Park   The default value of this flag is ``sha256``.
494*54fd6939SJiyong Park
495*54fd6939SJiyong Park-  ``LDFLAGS``: Extra user options appended to the linkers' command line in
496*54fd6939SJiyong Park   addition to the one set by the build system.
497*54fd6939SJiyong Park
498*54fd6939SJiyong Park-  ``LOG_LEVEL``: Chooses the log level, which controls the amount of console log
499*54fd6939SJiyong Park   output compiled into the build. This should be one of the following:
500*54fd6939SJiyong Park
501*54fd6939SJiyong Park   ::
502*54fd6939SJiyong Park
503*54fd6939SJiyong Park       0  (LOG_LEVEL_NONE)
504*54fd6939SJiyong Park       10 (LOG_LEVEL_ERROR)
505*54fd6939SJiyong Park       20 (LOG_LEVEL_NOTICE)
506*54fd6939SJiyong Park       30 (LOG_LEVEL_WARNING)
507*54fd6939SJiyong Park       40 (LOG_LEVEL_INFO)
508*54fd6939SJiyong Park       50 (LOG_LEVEL_VERBOSE)
509*54fd6939SJiyong Park
510*54fd6939SJiyong Park   All log output up to and including the selected log level is compiled into
511*54fd6939SJiyong Park   the build. The default value is 40 in debug builds and 20 in release builds.
512*54fd6939SJiyong Park
513*54fd6939SJiyong Park-  ``MEASURED_BOOT``: Boolean flag to include support for the Measured Boot
514*54fd6939SJiyong Park   feature. If this flag is enabled ``TRUSTED_BOARD_BOOT`` must be set as well
515*54fd6939SJiyong Park   in order to provide trust that the code taking the measurements and recording
516*54fd6939SJiyong Park   them has not been tampered with.
517*54fd6939SJiyong Park
518*54fd6939SJiyong Park   This option defaults to 0.
519*54fd6939SJiyong Park
520*54fd6939SJiyong Park-  ``NON_TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
521*54fd6939SJiyong Park   specifies the file that contains the Non-Trusted World private key in PEM
522*54fd6939SJiyong Park   format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
523*54fd6939SJiyong Park
524*54fd6939SJiyong Park-  ``NS_BL2U``: Path to NS_BL2U image in the host file system. This image is
525*54fd6939SJiyong Park   optional. It is only needed if the platform makefile specifies that it
526*54fd6939SJiyong Park   is required in order to build the ``fwu_fip`` target.
527*54fd6939SJiyong Park
528*54fd6939SJiyong Park-  ``NS_TIMER_SWITCH``: Enable save and restore for non-secure timer register
529*54fd6939SJiyong Park   contents upon world switch. It can take either 0 (don't save and restore) or
530*54fd6939SJiyong Park   1 (do save and restore). 0 is the default. An SPD may set this to 1 if it
531*54fd6939SJiyong Park   wants the timer registers to be saved and restored.
532*54fd6939SJiyong Park
533*54fd6939SJiyong Park-  ``OVERRIDE_LIBC``: This option allows platforms to override the default libc
534*54fd6939SJiyong Park   for the BL image. It can be either 0 (include) or 1 (remove). The default
535*54fd6939SJiyong Park   value is 0.
536*54fd6939SJiyong Park
537*54fd6939SJiyong Park-  ``PL011_GENERIC_UART``: Boolean option to indicate the PL011 driver that
538*54fd6939SJiyong Park   the underlying hardware is not a full PL011 UART but a minimally compliant
539*54fd6939SJiyong Park   generic UART, which is a subset of the PL011. The driver will not access
540*54fd6939SJiyong Park   any register that is not part of the SBSA generic UART specification.
541*54fd6939SJiyong Park   Default value is 0 (a full PL011 compliant UART is present).
542*54fd6939SJiyong Park
543*54fd6939SJiyong Park-  ``PLAT``: Choose a platform to build TF-A for. The chosen platform name
544*54fd6939SJiyong Park   must be subdirectory of any depth under ``plat/``, and must contain a
545*54fd6939SJiyong Park   platform makefile named ``platform.mk``. For example, to build TF-A for the
546*54fd6939SJiyong Park   Arm Juno board, select PLAT=juno.
547*54fd6939SJiyong Park
548*54fd6939SJiyong Park-  ``PRELOADED_BL33_BASE``: This option enables booting a preloaded BL33 image
549*54fd6939SJiyong Park   instead of the normal boot flow. When defined, it must specify the entry
550*54fd6939SJiyong Park   point address for the preloaded BL33 image. This option is incompatible with
551*54fd6939SJiyong Park   ``EL3_PAYLOAD_BASE``. If both are defined, ``EL3_PAYLOAD_BASE`` has priority
552*54fd6939SJiyong Park   over ``PRELOADED_BL33_BASE``.
553*54fd6939SJiyong Park
554*54fd6939SJiyong Park-  ``PROGRAMMABLE_RESET_ADDRESS``: This option indicates whether the reset
555*54fd6939SJiyong Park   vector address can be programmed or is fixed on the platform. It can take
556*54fd6939SJiyong Park   either 0 (fixed) or 1 (programmable). Default is 0. If the platform has a
557*54fd6939SJiyong Park   programmable reset address, it is expected that a CPU will start executing
558*54fd6939SJiyong Park   code directly at the right address, both on a cold and warm reset. In this
559*54fd6939SJiyong Park   case, there is no need to identify the entrypoint on boot and the boot path
560*54fd6939SJiyong Park   can be optimised. The ``plat_get_my_entrypoint()`` platform porting interface
561*54fd6939SJiyong Park   does not need to be implemented in this case.
562*54fd6939SJiyong Park
563*54fd6939SJiyong Park-  ``PSCI_EXTENDED_STATE_ID``: As per PSCI1.0 Specification, there are 2 formats
564*54fd6939SJiyong Park   possible for the PSCI power-state parameter: original and extended State-ID
565*54fd6939SJiyong Park   formats. This flag if set to 1, configures the generic PSCI layer to use the
566*54fd6939SJiyong Park   extended format. The default value of this flag is 0, which means by default
567*54fd6939SJiyong Park   the original power-state format is used by the PSCI implementation. This flag
568*54fd6939SJiyong Park   should be specified by the platform makefile and it governs the return value
569*54fd6939SJiyong Park   of PSCI_FEATURES API for CPU_SUSPEND smc function id. When this option is
570*54fd6939SJiyong Park   enabled on Arm platforms, the option ``ARM_RECOM_STATE_ID_ENC`` needs to be
571*54fd6939SJiyong Park   set to 1 as well.
572*54fd6939SJiyong Park
573*54fd6939SJiyong Park-  ``RAS_EXTENSION``: When set to ``1``, enable Armv8.2 RAS features. RAS features
574*54fd6939SJiyong Park   are an optional extension for pre-Armv8.2 CPUs, but are mandatory for Armv8.2
575*54fd6939SJiyong Park   or later CPUs.
576*54fd6939SJiyong Park
577*54fd6939SJiyong Park   When ``RAS_EXTENSION`` is set to ``1``, ``HANDLE_EA_EL3_FIRST`` must also be
578*54fd6939SJiyong Park   set to ``1``.
579*54fd6939SJiyong Park
580*54fd6939SJiyong Park   This option is disabled by default.
581*54fd6939SJiyong Park
582*54fd6939SJiyong Park-  ``RESET_TO_BL31``: Enable BL31 entrypoint as the CPU reset vector instead
583*54fd6939SJiyong Park   of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
584*54fd6939SJiyong Park   entrypoint) or 1 (CPU reset to BL31 entrypoint).
585*54fd6939SJiyong Park   The default value is 0.
586*54fd6939SJiyong Park
587*54fd6939SJiyong Park-  ``RESET_TO_SP_MIN``: SP_MIN is the minimal AArch32 Secure Payload provided
588*54fd6939SJiyong Park   in TF-A. This flag configures SP_MIN entrypoint as the CPU reset vector
589*54fd6939SJiyong Park   instead of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
590*54fd6939SJiyong Park   entrypoint) or 1 (CPU reset to SP_MIN entrypoint). The default value is 0.
591*54fd6939SJiyong Park
592*54fd6939SJiyong Park-  ``ROT_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
593*54fd6939SJiyong Park   file that contains the ROT private key in PEM format and enforces public key
594*54fd6939SJiyong Park   hash generation. If ``SAVE_KEYS=1``, this
595*54fd6939SJiyong Park   file name will be used to save the key.
596*54fd6939SJiyong Park
597*54fd6939SJiyong Park-  ``SAVE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
598*54fd6939SJiyong Park   certificate generation tool to save the keys used to establish the Chain of
599*54fd6939SJiyong Park   Trust. Allowed options are '0' or '1'. Default is '0' (do not save).
600*54fd6939SJiyong Park
601*54fd6939SJiyong Park-  ``SCP_BL2``: Path to SCP_BL2 image in the host file system. This image is optional.
602*54fd6939SJiyong Park   If a SCP_BL2 image is present then this option must be passed for the ``fip``
603*54fd6939SJiyong Park   target.
604*54fd6939SJiyong Park
605*54fd6939SJiyong Park-  ``SCP_BL2_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
606*54fd6939SJiyong Park   file that contains the SCP_BL2 private key in PEM format. If ``SAVE_KEYS=1``,
607*54fd6939SJiyong Park   this file name will be used to save the key.
608*54fd6939SJiyong Park
609*54fd6939SJiyong Park-  ``SCP_BL2U``: Path to SCP_BL2U image in the host file system. This image is
610*54fd6939SJiyong Park   optional. It is only needed if the platform makefile specifies that it
611*54fd6939SJiyong Park   is required in order to build the ``fwu_fip`` target.
612*54fd6939SJiyong Park
613*54fd6939SJiyong Park-  ``SDEI_SUPPORT``: Setting this to ``1`` enables support for Software
614*54fd6939SJiyong Park   Delegated Exception Interface to BL31 image. This defaults to ``0``.
615*54fd6939SJiyong Park
616*54fd6939SJiyong Park   When set to ``1``, the build option ``EL3_EXCEPTION_HANDLING`` must also be
617*54fd6939SJiyong Park   set to ``1``.
618*54fd6939SJiyong Park
619*54fd6939SJiyong Park-  ``SEPARATE_CODE_AND_RODATA``: Whether code and read-only data should be
620*54fd6939SJiyong Park   isolated on separate memory pages. This is a trade-off between security and
621*54fd6939SJiyong Park   memory usage. See "Isolating code and read-only data on separate memory
622*54fd6939SJiyong Park   pages" section in :ref:`Firmware Design`. This flag is disabled by default
623*54fd6939SJiyong Park   and affects all BL images.
624*54fd6939SJiyong Park
625*54fd6939SJiyong Park-  ``SEPARATE_NOBITS_REGION``: Setting this option to ``1`` allows the NOBITS
626*54fd6939SJiyong Park   sections of BL31 (.bss, stacks, page tables, and coherent memory) to be
627*54fd6939SJiyong Park   allocated in RAM discontiguous from the loaded firmware image. When set, the
628*54fd6939SJiyong Park   platform is expected to provide definitions for ``BL31_NOBITS_BASE`` and
629*54fd6939SJiyong Park   ``BL31_NOBITS_LIMIT``. When the option is ``0`` (the default), NOBITS
630*54fd6939SJiyong Park   sections are placed in RAM immediately following the loaded firmware image.
631*54fd6939SJiyong Park
632*54fd6939SJiyong Park-  ``SMC_PCI_SUPPORT``: This option allows platforms to handle PCI configuration
633*54fd6939SJiyong Park   access requests via a standard SMCCC defined in `DEN0115`_. When combined with
634*54fd6939SJiyong Park   UEFI+ACPI this can provide a certain amount of OS forward compatibility
635*54fd6939SJiyong Park   with newer platforms that aren't ECAM compliant.
636*54fd6939SJiyong Park
637*54fd6939SJiyong Park-  ``SPD``: Choose a Secure Payload Dispatcher component to be built into TF-A.
638*54fd6939SJiyong Park   This build option is only valid if ``ARCH=aarch64``. The value should be
639*54fd6939SJiyong Park   the path to the directory containing the SPD source, relative to
640*54fd6939SJiyong Park   ``services/spd/``; the directory is expected to contain a makefile called
641*54fd6939SJiyong Park   ``<spd-value>.mk``. The SPM Dispatcher standard service is located in
642*54fd6939SJiyong Park   services/std_svc/spmd and enabled by ``SPD=spmd``. The SPM Dispatcher
643*54fd6939SJiyong Park   cannot be enabled when the ``SPM_MM`` option is enabled.
644*54fd6939SJiyong Park
645*54fd6939SJiyong Park-  ``SPIN_ON_BL1_EXIT``: This option introduces an infinite loop in BL1. It can
646*54fd6939SJiyong Park   take either 0 (no loop) or 1 (add a loop). 0 is the default. This loop stops
647*54fd6939SJiyong Park   execution in BL1 just before handing over to BL31. At this point, all
648*54fd6939SJiyong Park   firmware images have been loaded in memory, and the MMU and caches are
649*54fd6939SJiyong Park   turned off. Refer to the "Debugging options" section for more details.
650*54fd6939SJiyong Park
651*54fd6939SJiyong Park-  ``SPMD_SPM_AT_SEL2`` : this boolean option is used jointly with the SPM
652*54fd6939SJiyong Park   Dispatcher option (``SPD=spmd``). When enabled (1) it indicates the SPMC
653*54fd6939SJiyong Park   component runs at the S-EL2 execution state provided by the Armv8.4-SecEL2
654*54fd6939SJiyong Park   extension. This is the default when enabling the SPM Dispatcher. When
655*54fd6939SJiyong Park   disabled (0) it indicates the SPMC component runs at the S-EL1 execution
656*54fd6939SJiyong Park   state. This latter configuration supports pre-Armv8.4 platforms (aka not
657*54fd6939SJiyong Park   implementing the Armv8.4-SecEL2 extension).
658*54fd6939SJiyong Park
659*54fd6939SJiyong Park-  ``SPM_MM`` : Boolean option to enable the Management Mode (MM)-based Secure
660*54fd6939SJiyong Park   Partition Manager (SPM) implementation. The default value is ``0``
661*54fd6939SJiyong Park   (disabled). This option cannot be enabled (``1``) when SPM Dispatcher is
662*54fd6939SJiyong Park   enabled (``SPD=spmd``).
663*54fd6939SJiyong Park
664*54fd6939SJiyong Park-  ``SP_LAYOUT_FILE``: Platform provided path to JSON file containing the
665*54fd6939SJiyong Park   description of secure partitions. The build system will parse this file and
666*54fd6939SJiyong Park   package all secure partition blobs into the FIP. This file is not
667*54fd6939SJiyong Park   necessarily part of TF-A tree. Only available when ``SPD=spmd``.
668*54fd6939SJiyong Park
669*54fd6939SJiyong Park-  ``SP_MIN_WITH_SECURE_FIQ``: Boolean flag to indicate the SP_MIN handles
670*54fd6939SJiyong Park   secure interrupts (caught through the FIQ line). Platforms can enable
671*54fd6939SJiyong Park   this directive if they need to handle such interruption. When enabled,
672*54fd6939SJiyong Park   the FIQ are handled in monitor mode and non secure world is not allowed
673*54fd6939SJiyong Park   to mask these events. Platforms that enable FIQ handling in SP_MIN shall
674*54fd6939SJiyong Park   implement the api ``sp_min_plat_fiq_handler()``. The default value is 0.
675*54fd6939SJiyong Park
676*54fd6939SJiyong Park-  ``TRUSTED_BOARD_BOOT``: Boolean flag to include support for the Trusted Board
677*54fd6939SJiyong Park   Boot feature. When set to '1', BL1 and BL2 images include support to load
678*54fd6939SJiyong Park   and verify the certificates and images in a FIP, and BL1 includes support
679*54fd6939SJiyong Park   for the Firmware Update. The default value is '0'. Generation and inclusion
680*54fd6939SJiyong Park   of certificates in the FIP and FWU_FIP depends upon the value of the
681*54fd6939SJiyong Park   ``GENERATE_COT`` option.
682*54fd6939SJiyong Park
683*54fd6939SJiyong Park   .. warning::
684*54fd6939SJiyong Park      This option depends on ``CREATE_KEYS`` to be enabled. If the keys
685*54fd6939SJiyong Park      already exist in disk, they will be overwritten without further notice.
686*54fd6939SJiyong Park
687*54fd6939SJiyong Park-  ``TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
688*54fd6939SJiyong Park   specifies the file that contains the Trusted World private key in PEM
689*54fd6939SJiyong Park   format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
690*54fd6939SJiyong Park
691*54fd6939SJiyong Park-  ``TSP_INIT_ASYNC``: Choose BL32 initialization method as asynchronous or
692*54fd6939SJiyong Park   synchronous, (see "Initializing a BL32 Image" section in
693*54fd6939SJiyong Park   :ref:`Firmware Design`). It can take the value 0 (BL32 is initialized using
694*54fd6939SJiyong Park   synchronous method) or 1 (BL32 is initialized using asynchronous method).
695*54fd6939SJiyong Park   Default is 0.
696*54fd6939SJiyong Park
697*54fd6939SJiyong Park-  ``TSP_NS_INTR_ASYNC_PREEMPT``: A non zero value enables the interrupt
698*54fd6939SJiyong Park   routing model which routes non-secure interrupts asynchronously from TSP
699*54fd6939SJiyong Park   to EL3 causing immediate preemption of TSP. The EL3 is responsible
700*54fd6939SJiyong Park   for saving and restoring the TSP context in this routing model. The
701*54fd6939SJiyong Park   default routing model (when the value is 0) is to route non-secure
702*54fd6939SJiyong Park   interrupts to TSP allowing it to save its context and hand over
703*54fd6939SJiyong Park   synchronously to EL3 via an SMC.
704*54fd6939SJiyong Park
705*54fd6939SJiyong Park   .. note::
706*54fd6939SJiyong Park      When ``EL3_EXCEPTION_HANDLING`` is ``1``, ``TSP_NS_INTR_ASYNC_PREEMPT``
707*54fd6939SJiyong Park      must also be set to ``1``.
708*54fd6939SJiyong Park
709*54fd6939SJiyong Park-  ``USE_ARM_LINK``: This flag determines whether to enable support for ARM
710*54fd6939SJiyong Park   linker. When the ``LINKER`` build variable points to the armlink linker,
711*54fd6939SJiyong Park   this flag is enabled automatically. To enable support for armlink, platforms
712*54fd6939SJiyong Park   will have to provide a scatter file for the BL image. Currently, Tegra
713*54fd6939SJiyong Park   platforms use the armlink support to compile BL3-1 images.
714*54fd6939SJiyong Park
715*54fd6939SJiyong Park-  ``USE_COHERENT_MEM``: This flag determines whether to include the coherent
716*54fd6939SJiyong Park   memory region in the BL memory map or not (see "Use of Coherent memory in
717*54fd6939SJiyong Park   TF-A" section in :ref:`Firmware Design`). It can take the value 1
718*54fd6939SJiyong Park   (Coherent memory region is included) or 0 (Coherent memory region is
719*54fd6939SJiyong Park   excluded). Default is 1.
720*54fd6939SJiyong Park
721*54fd6939SJiyong Park-  ``USE_DEBUGFS``: When set to 1 this option activates an EXPERIMENTAL feature
722*54fd6939SJiyong Park   exposing a virtual filesystem interface through BL31 as a SiP SMC function.
723*54fd6939SJiyong Park   Default is 0.
724*54fd6939SJiyong Park
725*54fd6939SJiyong Park-  ``ARM_IO_IN_DTB``: This flag determines whether to use IO based on the
726*54fd6939SJiyong Park   firmware configuration framework. This will move the io_policies into a
727*54fd6939SJiyong Park   configuration device tree, instead of static structure in the code base.
728*54fd6939SJiyong Park
729*54fd6939SJiyong Park-  ``COT_DESC_IN_DTB``: This flag determines whether to create COT descriptors
730*54fd6939SJiyong Park   at runtime using fconf. If this flag is enabled, COT descriptors are
731*54fd6939SJiyong Park   statically captured in tb_fw_config file in the form of device tree nodes
732*54fd6939SJiyong Park   and properties. Currently, COT descriptors used by BL2 are moved to the
733*54fd6939SJiyong Park   device tree and COT descriptors used by BL1 are retained in the code
734*54fd6939SJiyong Park   base statically.
735*54fd6939SJiyong Park
736*54fd6939SJiyong Park-  ``SDEI_IN_FCONF``: This flag determines whether to configure SDEI setup in
737*54fd6939SJiyong Park   runtime using firmware configuration framework. The platform specific SDEI
738*54fd6939SJiyong Park   shared and private events configuration is retrieved from device tree rather
739*54fd6939SJiyong Park   than static C structures at compile time. This is only supported if
740*54fd6939SJiyong Park   SDEI_SUPPORT build flag is enabled.
741*54fd6939SJiyong Park
742*54fd6939SJiyong Park-  ``SEC_INT_DESC_IN_FCONF``: This flag determines whether to configure Group 0
743*54fd6939SJiyong Park   and Group1 secure interrupts using the firmware configuration framework. The
744*54fd6939SJiyong Park   platform specific secure interrupt property descriptor is retrieved from
745*54fd6939SJiyong Park   device tree in runtime rather than depending on static C structure at compile
746*54fd6939SJiyong Park   time.
747*54fd6939SJiyong Park
748*54fd6939SJiyong Park-  ``USE_ROMLIB``: This flag determines whether library at ROM will be used.
749*54fd6939SJiyong Park   This feature creates a library of functions to be placed in ROM and thus
750*54fd6939SJiyong Park   reduces SRAM usage. Refer to :ref:`Library at ROM` for further details. Default
751*54fd6939SJiyong Park   is 0.
752*54fd6939SJiyong Park
753*54fd6939SJiyong Park-  ``V``: Verbose build. If assigned anything other than 0, the build commands
754*54fd6939SJiyong Park   are printed. Default is 0.
755*54fd6939SJiyong Park
756*54fd6939SJiyong Park-  ``VERSION_STRING``: String used in the log output for each TF-A image.
757*54fd6939SJiyong Park   Defaults to a string formed by concatenating the version number, build type
758*54fd6939SJiyong Park   and build string.
759*54fd6939SJiyong Park
760*54fd6939SJiyong Park-  ``W``: Warning level. Some compiler warning options of interest have been
761*54fd6939SJiyong Park   regrouped and put in the root Makefile. This flag can take the values 0 to 3,
762*54fd6939SJiyong Park   each level enabling more warning options. Default is 0.
763*54fd6939SJiyong Park
764*54fd6939SJiyong Park-  ``WARMBOOT_ENABLE_DCACHE_EARLY`` : Boolean option to enable D-cache early on
765*54fd6939SJiyong Park   the CPU after warm boot. This is applicable for platforms which do not
766*54fd6939SJiyong Park   require interconnect programming to enable cache coherency (eg: single
767*54fd6939SJiyong Park   cluster platforms). If this option is enabled, then warm boot path
768*54fd6939SJiyong Park   enables D-caches immediately after enabling MMU. This option defaults to 0.
769*54fd6939SJiyong Park
770*54fd6939SJiyong Park-  ``SUPPORT_STACK_MEMTAG``: This flag determines whether to enable memory
771*54fd6939SJiyong Park   tagging for stack or not. It accepts 2 values: ``yes`` and ``no``. The
772*54fd6939SJiyong Park   default value of this flag is ``no``. Note this option must be enabled only
773*54fd6939SJiyong Park   for ARM architecture greater than Armv8.5-A.
774*54fd6939SJiyong Park
775*54fd6939SJiyong Park-  ``ERRATA_SPECULATIVE_AT``: This flag determines whether to enable ``AT``
776*54fd6939SJiyong Park   speculative errata workaround or not. It accepts 2 values: ``1`` and ``0``.
777*54fd6939SJiyong Park   The default value of this flag is ``0``.
778*54fd6939SJiyong Park
779*54fd6939SJiyong Park   ``AT`` speculative errata workaround disables stage1 page table walk for
780*54fd6939SJiyong Park   lower ELs (EL1 and EL0) in EL3 so that ``AT`` speculative fetch at any point
781*54fd6939SJiyong Park   produces either the correct result or failure without TLB allocation.
782*54fd6939SJiyong Park
783*54fd6939SJiyong Park   This boolean option enables errata for all below CPUs.
784*54fd6939SJiyong Park
785*54fd6939SJiyong Park   +---------+--------------+-------------------------+
786*54fd6939SJiyong Park   | Errata  |      CPU     |     Workaround Define   |
787*54fd6939SJiyong Park   +=========+==============+=========================+
788*54fd6939SJiyong Park   | 1165522 |  Cortex-A76  |  ``ERRATA_A76_1165522`` |
789*54fd6939SJiyong Park   +---------+--------------+-------------------------+
790*54fd6939SJiyong Park   | 1319367 |  Cortex-A72  |  ``ERRATA_A72_1319367`` |
791*54fd6939SJiyong Park   +---------+--------------+-------------------------+
792*54fd6939SJiyong Park   | 1319537 |  Cortex-A57  |  ``ERRATA_A57_1319537`` |
793*54fd6939SJiyong Park   +---------+--------------+-------------------------+
794*54fd6939SJiyong Park   | 1530923 |  Cortex-A55  |  ``ERRATA_A55_1530923`` |
795*54fd6939SJiyong Park   +---------+--------------+-------------------------+
796*54fd6939SJiyong Park   | 1530924 |  Cortex-A53  |  ``ERRATA_A53_1530924`` |
797*54fd6939SJiyong Park   +---------+--------------+-------------------------+
798*54fd6939SJiyong Park
799*54fd6939SJiyong Park   .. note::
800*54fd6939SJiyong Park      This option is enabled by build only if platform sets any of above defines
801*54fd6939SJiyong Park      mentioned in ’Workaround Define' column in the table.
802*54fd6939SJiyong Park      If this option is enabled for the EL3 software then EL2 software also must
803*54fd6939SJiyong Park      implement this workaround due to the behaviour of the errata mentioned
804*54fd6939SJiyong Park      in new SDEN document which will get published soon.
805*54fd6939SJiyong Park
806*54fd6939SJiyong Park- ``RAS_TRAP_LOWER_EL_ERR_ACCESS``: This flag enables/disables the SCR_EL3.TERR
807*54fd6939SJiyong Park  bit, to trap access to the RAS ERR and RAS ERX registers from lower ELs.
808*54fd6939SJiyong Park  This flag is disabled by default.
809*54fd6939SJiyong Park
810*54fd6939SJiyong Park- ``OPENSSL_DIR``: This flag is used to provide the installed openssl directory
811*54fd6939SJiyong Park  path on the host machine which is used to build certificate generation and
812*54fd6939SJiyong Park  firmware encryption tool.
813*54fd6939SJiyong Park
814*54fd6939SJiyong Park- ``USE_SP804_TIMER``: Use the SP804 timer instead of the Generic Timer for
815*54fd6939SJiyong Park  functions that wait for an arbitrary time length (udelay and mdelay). The
816*54fd6939SJiyong Park  default value is 0.
817*54fd6939SJiyong Park
818*54fd6939SJiyong Park- ``ENABLE_TRBE_FOR_NS``: This flag is used to enable access of trace buffer
819*54fd6939SJiyong Park  control registers from NS ELs, NS-EL2 or NS-EL1(when NS-EL2 is implemented
820*54fd6939SJiyong Park  but unused) when FEAT_TRBE is implemented. TRBE is an optional architectural
821*54fd6939SJiyong Park  feature for AArch64. The default is 0 and it is automatically disabled when
822*54fd6939SJiyong Park  the target architecture is AArch32.
823*54fd6939SJiyong Park
824*54fd6939SJiyong Park- ``ENABLE_SYS_REG_TRACE_FOR_NS``: Boolean option to enable trace system
825*54fd6939SJiyong Park  registers access from NS ELs, NS-EL2 or NS-EL1 (when NS-EL2 is implemented
826*54fd6939SJiyong Park  but unused). This feature is available if trace unit such as ETMv4.x, and
827*54fd6939SJiyong Park  ETE(extending ETM feature) is implemented. This flag is disabled by default.
828*54fd6939SJiyong Park
829*54fd6939SJiyong Park- ``ENABLE_TRF_FOR_NS``: Boolean option to enable trace filter control registers
830*54fd6939SJiyong Park  access from NS ELs, NS-EL2 or NS-EL1 (when NS-EL2 is implemented but unused),
831*54fd6939SJiyong Park  if FEAT_TRF is implemented. This flag is disabled by default.
832*54fd6939SJiyong Park
833*54fd6939SJiyong ParkGICv3 driver options
834*54fd6939SJiyong Park--------------------
835*54fd6939SJiyong Park
836*54fd6939SJiyong ParkGICv3 driver files are included using directive:
837*54fd6939SJiyong Park
838*54fd6939SJiyong Park``include drivers/arm/gic/v3/gicv3.mk``
839*54fd6939SJiyong Park
840*54fd6939SJiyong ParkThe driver can be configured with the following options set in the platform
841*54fd6939SJiyong Parkmakefile:
842*54fd6939SJiyong Park
843*54fd6939SJiyong Park-  ``GICV3_SUPPORT_GIC600``: Add support for the GIC-600 variants of GICv3.
844*54fd6939SJiyong Park   Enabling this option will add runtime detection support for the
845*54fd6939SJiyong Park   GIC-600, so is safe to select even for a GIC500 implementation.
846*54fd6939SJiyong Park   This option defaults to 0.
847*54fd6939SJiyong Park
848*54fd6939SJiyong Park- ``GICV3_SUPPORT_GIC600AE_FMU``: Add support for the Fault Management Unit
849*54fd6939SJiyong Park   for GIC-600 AE. Enabling this option will introduce support to initialize
850*54fd6939SJiyong Park   the FMU. Platforms should call the init function during boot to enable the
851*54fd6939SJiyong Park   FMU and its safety mechanisms. This option defaults to 0.
852*54fd6939SJiyong Park
853*54fd6939SJiyong Park-  ``GICV3_IMPL_GIC600_MULTICHIP``: Selects GIC-600 variant with multichip
854*54fd6939SJiyong Park   functionality. This option defaults to 0
855*54fd6939SJiyong Park
856*54fd6939SJiyong Park-  ``GICV3_OVERRIDE_DISTIF_PWR_OPS``: Allows override of default implementation
857*54fd6939SJiyong Park   of ``arm_gicv3_distif_pre_save`` and ``arm_gicv3_distif_post_restore``
858*54fd6939SJiyong Park   functions. This is required for FVP platform which need to simulate GIC save
859*54fd6939SJiyong Park   and restore during SYSTEM_SUSPEND without powering down GIC. Default is 0.
860*54fd6939SJiyong Park
861*54fd6939SJiyong Park-  ``GIC_ENABLE_V4_EXTN`` : Enables GICv4 related changes in GICv3 driver.
862*54fd6939SJiyong Park   This option defaults to 0.
863*54fd6939SJiyong Park
864*54fd6939SJiyong Park-  ``GIC_EXT_INTID``: When set to ``1``, GICv3 driver will support extended
865*54fd6939SJiyong Park   PPI (1056-1119) and SPI (4096-5119) range. This option defaults to 0.
866*54fd6939SJiyong Park
867*54fd6939SJiyong ParkDebugging options
868*54fd6939SJiyong Park-----------------
869*54fd6939SJiyong Park
870*54fd6939SJiyong ParkTo compile a debug version and make the build more verbose use
871*54fd6939SJiyong Park
872*54fd6939SJiyong Park.. code:: shell
873*54fd6939SJiyong Park
874*54fd6939SJiyong Park    make PLAT=<platform> DEBUG=1 V=1 all
875*54fd6939SJiyong Park
876*54fd6939SJiyong ParkAArch64 GCC uses DWARF version 4 debugging symbols by default. Some tools (for
877*54fd6939SJiyong Parkexample DS-5) might not support this and may need an older version of DWARF
878*54fd6939SJiyong Parksymbols to be emitted by GCC. This can be achieved by using the
879*54fd6939SJiyong Park``-gdwarf-<version>`` flag, with the version being set to 2 or 3. Setting the
880*54fd6939SJiyong Parkversion to 2 is recommended for DS-5 versions older than 5.16.
881*54fd6939SJiyong Park
882*54fd6939SJiyong ParkWhen debugging logic problems it might also be useful to disable all compiler
883*54fd6939SJiyong Parkoptimizations by using ``-O0``.
884*54fd6939SJiyong Park
885*54fd6939SJiyong Park.. warning::
886*54fd6939SJiyong Park   Using ``-O0`` could cause output images to be larger and base addresses
887*54fd6939SJiyong Park   might need to be recalculated (see the **Memory layout on Arm development
888*54fd6939SJiyong Park   platforms** section in the :ref:`Firmware Design`).
889*54fd6939SJiyong Park
890*54fd6939SJiyong ParkExtra debug options can be passed to the build system by setting ``CFLAGS`` or
891*54fd6939SJiyong Park``LDFLAGS``:
892*54fd6939SJiyong Park
893*54fd6939SJiyong Park.. code:: shell
894*54fd6939SJiyong Park
895*54fd6939SJiyong Park    CFLAGS='-O0 -gdwarf-2'                                     \
896*54fd6939SJiyong Park    make PLAT=<platform> DEBUG=1 V=1 all
897*54fd6939SJiyong Park
898*54fd6939SJiyong ParkNote that using ``-Wl,`` style compilation driver options in ``CFLAGS`` will be
899*54fd6939SJiyong Parkignored as the linker is called directly.
900*54fd6939SJiyong Park
901*54fd6939SJiyong ParkIt is also possible to introduce an infinite loop to help in debugging the
902*54fd6939SJiyong Parkpost-BL2 phase of TF-A. This can be done by rebuilding BL1 with the
903*54fd6939SJiyong Park``SPIN_ON_BL1_EXIT=1`` build flag. Refer to the :ref:`build_options_common`
904*54fd6939SJiyong Parksection. In this case, the developer may take control of the target using a
905*54fd6939SJiyong Parkdebugger when indicated by the console output. When using DS-5, the following
906*54fd6939SJiyong Parkcommands can be used:
907*54fd6939SJiyong Park
908*54fd6939SJiyong Park::
909*54fd6939SJiyong Park
910*54fd6939SJiyong Park    # Stop target execution
911*54fd6939SJiyong Park    interrupt
912*54fd6939SJiyong Park
913*54fd6939SJiyong Park    #
914*54fd6939SJiyong Park    # Prepare your debugging environment, e.g. set breakpoints
915*54fd6939SJiyong Park    #
916*54fd6939SJiyong Park
917*54fd6939SJiyong Park    # Jump over the debug loop
918*54fd6939SJiyong Park    set var $AARCH64::$Core::$PC = $AARCH64::$Core::$PC + 4
919*54fd6939SJiyong Park
920*54fd6939SJiyong Park    # Resume execution
921*54fd6939SJiyong Park    continue
922*54fd6939SJiyong Park
923*54fd6939SJiyong ParkFirmware update options
924*54fd6939SJiyong Park-----------------------
925*54fd6939SJiyong Park
926*54fd6939SJiyong Park-  ``NR_OF_FW_BANKS``: Define the number of firmware banks. This flag is used
927*54fd6939SJiyong Park   in defining the firmware update metadata structure. This flag is by default
928*54fd6939SJiyong Park   set to '2'.
929*54fd6939SJiyong Park
930*54fd6939SJiyong Park-  ``NR_OF_IMAGES_IN_FW_BANK``: Define the number of firmware images in each
931*54fd6939SJiyong Park   firmware bank. Each firmware bank must have the same number of images as per
932*54fd6939SJiyong Park   the `PSA FW update specification`_.
933*54fd6939SJiyong Park   This flag is used in defining the firmware update metadata structure. This
934*54fd6939SJiyong Park   flag is by default set to '1'.
935*54fd6939SJiyong Park
936*54fd6939SJiyong Park-  ``PSA_FWU_SUPPORT``: Enable the firmware update mechanism as per the
937*54fd6939SJiyong Park   `PSA FW update specification`_. The default value is 0, and this is an
938*54fd6939SJiyong Park   experimental feature.
939*54fd6939SJiyong Park   PSA firmware update implementation has some limitations, such as BL2 is
940*54fd6939SJiyong Park   not part of the protocol-updatable images, if BL2 needs to be updated, then
941*54fd6939SJiyong Park   it should be done through another platform-defined mechanism, and it assumes
942*54fd6939SJiyong Park   that the platform's hardware supports CRC32 instructions.
943*54fd6939SJiyong Park
944*54fd6939SJiyong Park--------------
945*54fd6939SJiyong Park
946*54fd6939SJiyong Park*Copyright (c) 2019-2021, Arm Limited. All rights reserved.*
947*54fd6939SJiyong Park
948*54fd6939SJiyong Park.. _DEN0115: https://developer.arm.com/docs/den0115/latest
949*54fd6939SJiyong Park.. _PSA FW update specification: https://developer.arm.com/documentation/den0118/a/
950