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