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