1*54fd6939SJiyong ParkArm Fixed Virtual Platforms (FVP) 2*54fd6939SJiyong Park================================= 3*54fd6939SJiyong Park 4*54fd6939SJiyong ParkFixed Virtual Platform (FVP) Support 5*54fd6939SJiyong Park------------------------------------ 6*54fd6939SJiyong Park 7*54fd6939SJiyong ParkThis section lists the supported Arm |FVP| platforms. Please refer to the FVP 8*54fd6939SJiyong Parkdocumentation for a detailed description of the model parameter options. 9*54fd6939SJiyong Park 10*54fd6939SJiyong ParkThe latest version of the AArch64 build of TF-A has been tested on the following 11*54fd6939SJiyong ParkArm FVPs without shifted affinities, and that do not support threaded CPU cores 12*54fd6939SJiyong Park(64-bit host machine only). 13*54fd6939SJiyong Park 14*54fd6939SJiyong Park.. note:: 15*54fd6939SJiyong Park The FVP models used are Version 11.16 Build 16, unless otherwise stated. 16*54fd6939SJiyong Park 17*54fd6939SJiyong Park- ``Foundation_Platform`` 18*54fd6939SJiyong Park- ``FVP_Base_AEMv8A-AEMv8A-AEMv8A-AEMv8A-CCN502`` 19*54fd6939SJiyong Park- ``FVP_Base_AEMv8A-AEMv8A`` (For certain configurations also uses 11.14/21) 20*54fd6939SJiyong Park- ``FVP_Base_AEMv8A-GIC600AE`` 21*54fd6939SJiyong Park- ``FVP_Base_AEMvA`` (For certain configurations also uses 0.0/6684) 22*54fd6939SJiyong Park- ``FVP_Base_Cortex-A32x4`` (Version 11.12/38) 23*54fd6939SJiyong Park- ``FVP_Base_Cortex-A35x4`` 24*54fd6939SJiyong Park- ``FVP_Base_Cortex-A53x4`` 25*54fd6939SJiyong Park- ``FVP_Base_Cortex-A55x4`` 26*54fd6939SJiyong Park- ``FVP_Base_Cortex-A55x4+Cortex-A75x4`` 27*54fd6939SJiyong Park- ``FVP_Base_Cortex-A57x1-A53x1`` 28*54fd6939SJiyong Park- ``FVP_Base_Cortex-A57x2-A53x4`` 29*54fd6939SJiyong Park- ``FVP_Base_Cortex-A57x4-A53x4`` 30*54fd6939SJiyong Park- ``FVP_Base_Cortex-A57x4`` 31*54fd6939SJiyong Park- ``FVP_Base_Cortex-A65AEx8`` 32*54fd6939SJiyong Park- ``FVP_Base_Cortex-A65x4`` 33*54fd6939SJiyong Park- ``FVP_Base_Cortex-A710x4`` 34*54fd6939SJiyong Park- ``FVP_Base_Cortex-A72x4-A53x4`` 35*54fd6939SJiyong Park- ``FVP_Base_Cortex-A72x4`` 36*54fd6939SJiyong Park- ``FVP_Base_Cortex-A73x4-A53x4`` 37*54fd6939SJiyong Park- ``FVP_Base_Cortex-A73x4`` 38*54fd6939SJiyong Park- ``FVP_Base_Cortex-A75x4`` 39*54fd6939SJiyong Park- ``FVP_Base_Cortex-A76AEx4`` 40*54fd6939SJiyong Park- ``FVP_Base_Cortex-A76AEx8`` 41*54fd6939SJiyong Park- ``FVP_Base_Cortex-A76x4`` 42*54fd6939SJiyong Park- ``FVP_Base_Cortex-A77x4`` 43*54fd6939SJiyong Park- ``FVP_Base_Cortex-A78x4`` 44*54fd6939SJiyong Park- ``FVP_Base_Neoverse-E1x1`` 45*54fd6939SJiyong Park- ``FVP_Base_Neoverse-E1x2`` 46*54fd6939SJiyong Park- ``FVP_Base_Neoverse-E1x4`` 47*54fd6939SJiyong Park- ``FVP_Base_Neoverse-N1x4`` 48*54fd6939SJiyong Park- ``FVP_Base_Neoverse-N2x4`` (Version 11.12 build 38) 49*54fd6939SJiyong Park- ``FVP_Base_Neoverse-V1x4`` 50*54fd6939SJiyong Park- ``FVP_Base_RevC-2xAEMvA`` (For certain configurations also uses 0.0/6557) 51*54fd6939SJiyong Park- ``FVP_CSS_SGI-575`` (Version 11.15/26) 52*54fd6939SJiyong Park- ``FVP_Morello`` (Version 0.11/19) 53*54fd6939SJiyong Park- ``FVP_RD_E1_edge`` (Version 11.15/26) 54*54fd6939SJiyong Park- ``FVP_RD_N1_edge_dual`` (Version 11.15/26) 55*54fd6939SJiyong Park- ``FVP_RD_N1_edge`` (Version 11.15/26) 56*54fd6939SJiyong Park- ``FVP_RD_V1`` (Version 11.15/26) 57*54fd6939SJiyong Park- ``FVP_TC0`` 58*54fd6939SJiyong Park- ``FVP_TC1`` 59*54fd6939SJiyong Park 60*54fd6939SJiyong ParkThe latest version of the AArch32 build of TF-A has been tested on the 61*54fd6939SJiyong Parkfollowing Arm FVPs without shifted affinities, and that do not support threaded 62*54fd6939SJiyong ParkCPU cores (64-bit host machine only). 63*54fd6939SJiyong Park 64*54fd6939SJiyong Park- ``FVP_Base_AEMvA`` 65*54fd6939SJiyong Park- ``FVP_Base_AEMv8A-AEMv8A`` 66*54fd6939SJiyong Park- ``FVP_Base_Cortex-A32x4`` 67*54fd6939SJiyong Park 68*54fd6939SJiyong Park.. note:: 69*54fd6939SJiyong Park The ``FVP_Base_RevC-2xAEMv8A`` FVP only supports shifted affinities, which 70*54fd6939SJiyong Park is not compatible with legacy GIC configurations. Therefore this FVP does not 71*54fd6939SJiyong Park support these legacy GIC configurations. 72*54fd6939SJiyong Park 73*54fd6939SJiyong ParkThe *Foundation* and *Base* FVPs can be downloaded free of charge. See the `Arm 74*54fd6939SJiyong ParkFVP website`_. The Cortex-A models listed above are also available to download 75*54fd6939SJiyong Parkfrom `Arm's website`_. 76*54fd6939SJiyong Park 77*54fd6939SJiyong Park.. note:: 78*54fd6939SJiyong Park The build numbers quoted above are those reported by launching the FVP 79*54fd6939SJiyong Park with the ``--version`` parameter. 80*54fd6939SJiyong Park 81*54fd6939SJiyong Park.. note:: 82*54fd6939SJiyong Park Linaro provides a ramdisk image in prebuilt FVP configurations and full 83*54fd6939SJiyong Park file systems that can be downloaded separately. To run an FVP with a virtio 84*54fd6939SJiyong Park file system image an additional FVP configuration option 85*54fd6939SJiyong Park ``-C bp.virtioblockdevice.image_path="<path-to>/<file-system-image>`` can be 86*54fd6939SJiyong Park used. 87*54fd6939SJiyong Park 88*54fd6939SJiyong Park.. note:: 89*54fd6939SJiyong Park The software will not work on Version 1.0 of the Foundation FVP. 90*54fd6939SJiyong Park The commands below would report an ``unhandled argument`` error in this case. 91*54fd6939SJiyong Park 92*54fd6939SJiyong Park.. note:: 93*54fd6939SJiyong Park FVPs can be launched with ``--cadi-server`` option such that a 94*54fd6939SJiyong Park CADI-compliant debugger (for example, Arm DS-5) can connect to and control 95*54fd6939SJiyong Park its execution. 96*54fd6939SJiyong Park 97*54fd6939SJiyong Park.. warning:: 98*54fd6939SJiyong Park Since FVP model Version 11.0 Build 11.0.34 and Version 8.5 Build 0.8.5202 99*54fd6939SJiyong Park the internal synchronisation timings changed compared to older versions of 100*54fd6939SJiyong Park the models. The models can be launched with ``-Q 100`` option if they are 101*54fd6939SJiyong Park required to match the run time characteristics of the older versions. 102*54fd6939SJiyong Park 103*54fd6939SJiyong ParkAll the above platforms have been tested with `Linaro Release 20.01`_. 104*54fd6939SJiyong Park 105*54fd6939SJiyong Park.. _build_options_arm_fvp_platform: 106*54fd6939SJiyong Park 107*54fd6939SJiyong ParkArm FVP Platform Specific Build Options 108*54fd6939SJiyong Park--------------------------------------- 109*54fd6939SJiyong Park 110*54fd6939SJiyong Park- ``FVP_CLUSTER_COUNT`` : Configures the cluster count to be used to 111*54fd6939SJiyong Park build the topology tree within TF-A. By default TF-A is configured for dual 112*54fd6939SJiyong Park cluster topology and this option can be used to override the default value. 113*54fd6939SJiyong Park 114*54fd6939SJiyong Park- ``FVP_INTERCONNECT_DRIVER``: Selects the interconnect driver to be built. The 115*54fd6939SJiyong Park default interconnect driver depends on the value of ``FVP_CLUSTER_COUNT`` as 116*54fd6939SJiyong Park explained in the options below: 117*54fd6939SJiyong Park 118*54fd6939SJiyong Park - ``FVP_CCI`` : The CCI driver is selected. This is the default 119*54fd6939SJiyong Park if 0 < ``FVP_CLUSTER_COUNT`` <= 2. 120*54fd6939SJiyong Park - ``FVP_CCN`` : The CCN driver is selected. This is the default 121*54fd6939SJiyong Park if ``FVP_CLUSTER_COUNT`` > 2. 122*54fd6939SJiyong Park 123*54fd6939SJiyong Park- ``FVP_MAX_CPUS_PER_CLUSTER``: Sets the maximum number of CPUs implemented in 124*54fd6939SJiyong Park a single cluster. This option defaults to 4. 125*54fd6939SJiyong Park 126*54fd6939SJiyong Park- ``FVP_MAX_PE_PER_CPU``: Sets the maximum number of PEs implemented on any CPU 127*54fd6939SJiyong Park in the system. This option defaults to 1. Note that the build option 128*54fd6939SJiyong Park ``ARM_PLAT_MT`` doesn't have any effect on FVP platforms. 129*54fd6939SJiyong Park 130*54fd6939SJiyong Park- ``FVP_USE_GIC_DRIVER`` : Selects the GIC driver to be built. Options: 131*54fd6939SJiyong Park 132*54fd6939SJiyong Park - ``FVP_GICV2`` : The GICv2 only driver is selected 133*54fd6939SJiyong Park - ``FVP_GICV3`` : The GICv3 only driver is selected (default option) 134*54fd6939SJiyong Park 135*54fd6939SJiyong Park- ``FVP_HW_CONFIG_DTS`` : Specify the path to the DTS file to be compiled 136*54fd6939SJiyong Park to DTB and packaged in FIP as the HW_CONFIG. See :ref:`Firmware Design` for 137*54fd6939SJiyong Park details on HW_CONFIG. By default, this is initialized to a sensible DTS 138*54fd6939SJiyong Park file in ``fdts/`` folder depending on other build options. But some cases, 139*54fd6939SJiyong Park like shifted affinity format for MPIDR, cannot be detected at build time 140*54fd6939SJiyong Park and this option is needed to specify the appropriate DTS file. 141*54fd6939SJiyong Park 142*54fd6939SJiyong Park- ``FVP_HW_CONFIG`` : Specify the path to the HW_CONFIG blob to be packaged in 143*54fd6939SJiyong Park FIP. See :ref:`Firmware Design` for details on HW_CONFIG. This option is 144*54fd6939SJiyong Park similar to the ``FVP_HW_CONFIG_DTS`` option, but it directly specifies the 145*54fd6939SJiyong Park HW_CONFIG blob instead of the DTS file. This option is useful to override 146*54fd6939SJiyong Park the default HW_CONFIG selected by the build system. 147*54fd6939SJiyong Park 148*54fd6939SJiyong Park- ``FVP_GICR_REGION_PROTECTION``: Mark the redistributor pages of 149*54fd6939SJiyong Park inactive/fused CPU cores as read-only. The default value of this option 150*54fd6939SJiyong Park is ``0``, which means the redistributor pages of all CPU cores are marked 151*54fd6939SJiyong Park as read and write. 152*54fd6939SJiyong Park 153*54fd6939SJiyong ParkBooting Firmware Update images 154*54fd6939SJiyong Park------------------------------ 155*54fd6939SJiyong Park 156*54fd6939SJiyong ParkWhen Firmware Update (FWU) is enabled there are at least 2 new images 157*54fd6939SJiyong Parkthat have to be loaded, the Non-Secure FWU ROM (NS-BL1U), and the 158*54fd6939SJiyong ParkFWU FIP. 159*54fd6939SJiyong Park 160*54fd6939SJiyong ParkThe additional fip images must be loaded with: 161*54fd6939SJiyong Park 162*54fd6939SJiyong Park:: 163*54fd6939SJiyong Park 164*54fd6939SJiyong Park --data cluster0.cpu0="<path_to>/ns_bl1u.bin"@0x0beb8000 [ns_bl1u_base_address] 165*54fd6939SJiyong Park --data cluster0.cpu0="<path_to>/fwu_fip.bin"@0x08400000 [ns_bl2u_base_address] 166*54fd6939SJiyong Park 167*54fd6939SJiyong ParkThe address ns_bl1u_base_address is the value of NS_BL1U_BASE. 168*54fd6939SJiyong ParkIn the same way, the address ns_bl2u_base_address is the value of 169*54fd6939SJiyong ParkNS_BL2U_BASE. 170*54fd6939SJiyong Park 171*54fd6939SJiyong ParkBooting an EL3 payload 172*54fd6939SJiyong Park---------------------- 173*54fd6939SJiyong Park 174*54fd6939SJiyong ParkThe EL3 payloads boot flow requires the CPU's mailbox to be cleared at reset for 175*54fd6939SJiyong Parkthe secondary CPUs holding pen to work properly. Unfortunately, its reset value 176*54fd6939SJiyong Parkis undefined on the FVP platform and the FVP platform code doesn't clear it. 177*54fd6939SJiyong ParkTherefore, one must modify the way the model is normally invoked in order to 178*54fd6939SJiyong Parkclear the mailbox at start-up. 179*54fd6939SJiyong Park 180*54fd6939SJiyong ParkOne way to do that is to create an 8-byte file containing all zero bytes using 181*54fd6939SJiyong Parkthe following command: 182*54fd6939SJiyong Park 183*54fd6939SJiyong Park.. code:: shell 184*54fd6939SJiyong Park 185*54fd6939SJiyong Park dd if=/dev/zero of=mailbox.dat bs=1 count=8 186*54fd6939SJiyong Park 187*54fd6939SJiyong Parkand pre-load it into the FVP memory at the mailbox address (i.e. ``0x04000000``) 188*54fd6939SJiyong Parkusing the following model parameters: 189*54fd6939SJiyong Park 190*54fd6939SJiyong Park:: 191*54fd6939SJiyong Park 192*54fd6939SJiyong Park --data cluster0.cpu0=mailbox.dat@0x04000000 [Base FVPs] 193*54fd6939SJiyong Park --data=mailbox.dat@0x04000000 [Foundation FVP] 194*54fd6939SJiyong Park 195*54fd6939SJiyong ParkTo provide the model with the EL3 payload image, the following methods may be 196*54fd6939SJiyong Parkused: 197*54fd6939SJiyong Park 198*54fd6939SJiyong Park#. If the EL3 payload is able to execute in place, it may be programmed into 199*54fd6939SJiyong Park flash memory. On Base Cortex and AEM FVPs, the following model parameter 200*54fd6939SJiyong Park loads it at the base address of the NOR FLASH1 (the NOR FLASH0 is already 201*54fd6939SJiyong Park used for the FIP): 202*54fd6939SJiyong Park 203*54fd6939SJiyong Park :: 204*54fd6939SJiyong Park 205*54fd6939SJiyong Park -C bp.flashloader1.fname="<path-to>/<el3-payload>" 206*54fd6939SJiyong Park 207*54fd6939SJiyong Park On Foundation FVP, there is no flash loader component and the EL3 payload 208*54fd6939SJiyong Park may be programmed anywhere in flash using method 3 below. 209*54fd6939SJiyong Park 210*54fd6939SJiyong Park#. When using the ``SPIN_ON_BL1_EXIT=1`` loading method, the following DS-5 211*54fd6939SJiyong Park command may be used to load the EL3 payload ELF image over JTAG: 212*54fd6939SJiyong Park 213*54fd6939SJiyong Park :: 214*54fd6939SJiyong Park 215*54fd6939SJiyong Park load <path-to>/el3-payload.elf 216*54fd6939SJiyong Park 217*54fd6939SJiyong Park#. The EL3 payload may be pre-loaded in volatile memory using the following 218*54fd6939SJiyong Park model parameters: 219*54fd6939SJiyong Park 220*54fd6939SJiyong Park :: 221*54fd6939SJiyong Park 222*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/el3-payload>"@address [Base FVPs] 223*54fd6939SJiyong Park --data="<path-to>/<el3-payload>"@address [Foundation FVP] 224*54fd6939SJiyong Park 225*54fd6939SJiyong Park The address provided to the FVP must match the ``EL3_PAYLOAD_BASE`` address 226*54fd6939SJiyong Park used when building TF-A. 227*54fd6939SJiyong Park 228*54fd6939SJiyong ParkBooting a preloaded kernel image (Base FVP) 229*54fd6939SJiyong Park------------------------------------------- 230*54fd6939SJiyong Park 231*54fd6939SJiyong ParkThe following example uses a simplified boot flow by directly jumping from the 232*54fd6939SJiyong ParkTF-A to the Linux kernel, which will use a ramdisk as filesystem. This can be 233*54fd6939SJiyong Parkuseful if both the kernel and the device tree blob (DTB) are already present in 234*54fd6939SJiyong Parkmemory (like in FVP). 235*54fd6939SJiyong Park 236*54fd6939SJiyong ParkFor example, if the kernel is loaded at ``0x80080000`` and the DTB is loaded at 237*54fd6939SJiyong Parkaddress ``0x82000000``, the firmware can be built like this: 238*54fd6939SJiyong Park 239*54fd6939SJiyong Park.. code:: shell 240*54fd6939SJiyong Park 241*54fd6939SJiyong Park CROSS_COMPILE=aarch64-none-elf- \ 242*54fd6939SJiyong Park make PLAT=fvp DEBUG=1 \ 243*54fd6939SJiyong Park RESET_TO_BL31=1 \ 244*54fd6939SJiyong Park ARM_LINUX_KERNEL_AS_BL33=1 \ 245*54fd6939SJiyong Park PRELOADED_BL33_BASE=0x80080000 \ 246*54fd6939SJiyong Park ARM_PRELOADED_DTB_BASE=0x82000000 \ 247*54fd6939SJiyong Park all fip 248*54fd6939SJiyong Park 249*54fd6939SJiyong ParkNow, it is needed to modify the DTB so that the kernel knows the address of the 250*54fd6939SJiyong Parkramdisk. The following script generates a patched DTB from the provided one, 251*54fd6939SJiyong Parkassuming that the ramdisk is loaded at address ``0x84000000``. Note that this 252*54fd6939SJiyong Parkscript assumes that the user is using a ramdisk image prepared for U-Boot, like 253*54fd6939SJiyong Parkthe ones provided by Linaro. If using a ramdisk without this header,the ``0x40`` 254*54fd6939SJiyong Parkoffset in ``INITRD_START`` has to be removed. 255*54fd6939SJiyong Park 256*54fd6939SJiyong Park.. code:: bash 257*54fd6939SJiyong Park 258*54fd6939SJiyong Park #!/bin/bash 259*54fd6939SJiyong Park 260*54fd6939SJiyong Park # Path to the input DTB 261*54fd6939SJiyong Park KERNEL_DTB=<path-to>/<fdt> 262*54fd6939SJiyong Park # Path to the output DTB 263*54fd6939SJiyong Park PATCHED_KERNEL_DTB=<path-to>/<patched-fdt> 264*54fd6939SJiyong Park # Base address of the ramdisk 265*54fd6939SJiyong Park INITRD_BASE=0x84000000 266*54fd6939SJiyong Park # Path to the ramdisk 267*54fd6939SJiyong Park INITRD=<path-to>/<ramdisk.img> 268*54fd6939SJiyong Park 269*54fd6939SJiyong Park # Skip uboot header (64 bytes) 270*54fd6939SJiyong Park INITRD_START=$(printf "0x%x" $((${INITRD_BASE} + 0x40)) ) 271*54fd6939SJiyong Park INITRD_SIZE=$(stat -Lc %s ${INITRD}) 272*54fd6939SJiyong Park INITRD_END=$(printf "0x%x" $((${INITRD_BASE} + ${INITRD_SIZE})) ) 273*54fd6939SJiyong Park 274*54fd6939SJiyong Park CHOSEN_NODE=$(echo \ 275*54fd6939SJiyong Park "/ { \ 276*54fd6939SJiyong Park chosen { \ 277*54fd6939SJiyong Park linux,initrd-start = <${INITRD_START}>; \ 278*54fd6939SJiyong Park linux,initrd-end = <${INITRD_END}>; \ 279*54fd6939SJiyong Park }; \ 280*54fd6939SJiyong Park };") 281*54fd6939SJiyong Park 282*54fd6939SJiyong Park echo $(dtc -O dts -I dtb ${KERNEL_DTB}) ${CHOSEN_NODE} | \ 283*54fd6939SJiyong Park dtc -O dtb -o ${PATCHED_KERNEL_DTB} - 284*54fd6939SJiyong Park 285*54fd6939SJiyong ParkAnd the FVP binary can be run with the following command: 286*54fd6939SJiyong Park 287*54fd6939SJiyong Park.. code:: shell 288*54fd6939SJiyong Park 289*54fd6939SJiyong Park <path-to>/FVP_Base_AEMv8A-AEMv8A \ 290*54fd6939SJiyong Park -C pctl.startup=0.0.0.0 \ 291*54fd6939SJiyong Park -C bp.secure_memory=1 \ 292*54fd6939SJiyong Park -C cluster0.NUM_CORES=4 \ 293*54fd6939SJiyong Park -C cluster1.NUM_CORES=4 \ 294*54fd6939SJiyong Park -C cache_state_modelled=1 \ 295*54fd6939SJiyong Park -C cluster0.cpu0.RVBAR=0x04001000 \ 296*54fd6939SJiyong Park -C cluster0.cpu1.RVBAR=0x04001000 \ 297*54fd6939SJiyong Park -C cluster0.cpu2.RVBAR=0x04001000 \ 298*54fd6939SJiyong Park -C cluster0.cpu3.RVBAR=0x04001000 \ 299*54fd6939SJiyong Park -C cluster1.cpu0.RVBAR=0x04001000 \ 300*54fd6939SJiyong Park -C cluster1.cpu1.RVBAR=0x04001000 \ 301*54fd6939SJiyong Park -C cluster1.cpu2.RVBAR=0x04001000 \ 302*54fd6939SJiyong Park -C cluster1.cpu3.RVBAR=0x04001000 \ 303*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/bl31.bin"@0x04001000 \ 304*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<patched-fdt>"@0x82000000 \ 305*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \ 306*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<ramdisk.img>"@0x84000000 307*54fd6939SJiyong Park 308*54fd6939SJiyong ParkObtaining the Flattened Device Trees 309*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 310*54fd6939SJiyong Park 311*54fd6939SJiyong ParkDepending on the FVP configuration and Linux configuration used, different 312*54fd6939SJiyong ParkFDT files are required. FDT source files for the Foundation and Base FVPs can 313*54fd6939SJiyong Parkbe found in the TF-A source directory under ``fdts/``. The Foundation FVP has 314*54fd6939SJiyong Parka subset of the Base FVP components. For example, the Foundation FVP lacks 315*54fd6939SJiyong ParkCLCD and MMC support, and has only one CPU cluster. 316*54fd6939SJiyong Park 317*54fd6939SJiyong Park.. note:: 318*54fd6939SJiyong Park It is not recommended to use the FDTs built along the kernel because not 319*54fd6939SJiyong Park all FDTs are available from there. 320*54fd6939SJiyong Park 321*54fd6939SJiyong ParkThe dynamic configuration capability is enabled in the firmware for FVPs. 322*54fd6939SJiyong ParkThis means that the firmware can authenticate and load the FDT if present in 323*54fd6939SJiyong ParkFIP. A default FDT is packaged into FIP during the build based on 324*54fd6939SJiyong Parkthe build configuration. This can be overridden by using the ``FVP_HW_CONFIG`` 325*54fd6939SJiyong Parkor ``FVP_HW_CONFIG_DTS`` build options (refer to 326*54fd6939SJiyong Park:ref:`build_options_arm_fvp_platform` for details on the options). 327*54fd6939SJiyong Park 328*54fd6939SJiyong Park- ``fvp-base-gicv2-psci.dts`` 329*54fd6939SJiyong Park 330*54fd6939SJiyong Park For use with models such as the Cortex-A57-A53 Base FVPs without shifted 331*54fd6939SJiyong Park affinities and with Base memory map configuration. 332*54fd6939SJiyong Park 333*54fd6939SJiyong Park- ``fvp-base-gicv2-psci-aarch32.dts`` 334*54fd6939SJiyong Park 335*54fd6939SJiyong Park For use with models such as the Cortex-A32 Base FVPs without shifted 336*54fd6939SJiyong Park affinities and running Linux in AArch32 state with Base memory map 337*54fd6939SJiyong Park configuration. 338*54fd6939SJiyong Park 339*54fd6939SJiyong Park- ``fvp-base-gicv3-psci.dts`` 340*54fd6939SJiyong Park 341*54fd6939SJiyong Park For use with models such as the Cortex-A57-A53 Base FVPs without shifted 342*54fd6939SJiyong Park affinities and with Base memory map configuration and Linux GICv3 support. 343*54fd6939SJiyong Park 344*54fd6939SJiyong Park- ``fvp-base-gicv3-psci-1t.dts`` 345*54fd6939SJiyong Park 346*54fd6939SJiyong Park For use with models such as the AEMv8-RevC Base FVP with shifted affinities, 347*54fd6939SJiyong Park single threaded CPUs, Base memory map configuration and Linux GICv3 support. 348*54fd6939SJiyong Park 349*54fd6939SJiyong Park- ``fvp-base-gicv3-psci-dynamiq.dts`` 350*54fd6939SJiyong Park 351*54fd6939SJiyong Park For use with models as the Cortex-A55-A75 Base FVPs with shifted affinities, 352*54fd6939SJiyong Park single cluster, single threaded CPUs, Base memory map configuration and Linux 353*54fd6939SJiyong Park GICv3 support. 354*54fd6939SJiyong Park 355*54fd6939SJiyong Park- ``fvp-base-gicv3-psci-aarch32.dts`` 356*54fd6939SJiyong Park 357*54fd6939SJiyong Park For use with models such as the Cortex-A32 Base FVPs without shifted 358*54fd6939SJiyong Park affinities and running Linux in AArch32 state with Base memory map 359*54fd6939SJiyong Park configuration and Linux GICv3 support. 360*54fd6939SJiyong Park 361*54fd6939SJiyong Park- ``fvp-foundation-gicv2-psci.dts`` 362*54fd6939SJiyong Park 363*54fd6939SJiyong Park For use with Foundation FVP with Base memory map configuration. 364*54fd6939SJiyong Park 365*54fd6939SJiyong Park- ``fvp-foundation-gicv3-psci.dts`` 366*54fd6939SJiyong Park 367*54fd6939SJiyong Park (Default) For use with Foundation FVP with Base memory map configuration 368*54fd6939SJiyong Park and Linux GICv3 support. 369*54fd6939SJiyong Park 370*54fd6939SJiyong Park 371*54fd6939SJiyong ParkRunning on the Foundation FVP with reset to BL1 entrypoint 372*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 373*54fd6939SJiyong Park 374*54fd6939SJiyong ParkThe following ``Foundation_Platform`` parameters should be used to boot Linux with 375*54fd6939SJiyong Park4 CPUs using the AArch64 build of TF-A. 376*54fd6939SJiyong Park 377*54fd6939SJiyong Park.. code:: shell 378*54fd6939SJiyong Park 379*54fd6939SJiyong Park <path-to>/Foundation_Platform \ 380*54fd6939SJiyong Park --cores=4 \ 381*54fd6939SJiyong Park --arm-v8.0 \ 382*54fd6939SJiyong Park --secure-memory \ 383*54fd6939SJiyong Park --visualization \ 384*54fd6939SJiyong Park --gicv3 \ 385*54fd6939SJiyong Park --data="<path-to>/<bl1-binary>"@0x0 \ 386*54fd6939SJiyong Park --data="<path-to>/<FIP-binary>"@0x08000000 \ 387*54fd6939SJiyong Park --data="<path-to>/<kernel-binary>"@0x80080000 \ 388*54fd6939SJiyong Park --data="<path-to>/<ramdisk-binary>"@0x84000000 389*54fd6939SJiyong Park 390*54fd6939SJiyong ParkNotes: 391*54fd6939SJiyong Park 392*54fd6939SJiyong Park- BL1 is loaded at the start of the Trusted ROM. 393*54fd6939SJiyong Park- The Firmware Image Package is loaded at the start of NOR FLASH0. 394*54fd6939SJiyong Park- The firmware loads the FDT packaged in FIP to the DRAM. The FDT load address 395*54fd6939SJiyong Park is specified via the ``hw_config_addr`` property in `TB_FW_CONFIG for FVP`_. 396*54fd6939SJiyong Park- The default use-case for the Foundation FVP is to use the ``--gicv3`` option 397*54fd6939SJiyong Park and enable the GICv3 device in the model. Note that without this option, 398*54fd6939SJiyong Park the Foundation FVP defaults to legacy (Versatile Express) memory map which 399*54fd6939SJiyong Park is not supported by TF-A. 400*54fd6939SJiyong Park- In order for TF-A to run correctly on the Foundation FVP, the architecture 401*54fd6939SJiyong Park versions must match. The Foundation FVP defaults to the highest v8.x 402*54fd6939SJiyong Park version it supports but the default build for TF-A is for v8.0. To avoid 403*54fd6939SJiyong Park issues either start the Foundation FVP to use v8.0 architecture using the 404*54fd6939SJiyong Park ``--arm-v8.0`` option, or build TF-A with an appropriate value for 405*54fd6939SJiyong Park ``ARM_ARCH_MINOR``. 406*54fd6939SJiyong Park 407*54fd6939SJiyong ParkRunning on the AEMv8 Base FVP with reset to BL1 entrypoint 408*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 409*54fd6939SJiyong Park 410*54fd6939SJiyong ParkThe following ``FVP_Base_RevC-2xAEMv8A`` parameters should be used to boot Linux 411*54fd6939SJiyong Parkwith 8 CPUs using the AArch64 build of TF-A. 412*54fd6939SJiyong Park 413*54fd6939SJiyong Park.. code:: shell 414*54fd6939SJiyong Park 415*54fd6939SJiyong Park <path-to>/FVP_Base_RevC-2xAEMv8A \ 416*54fd6939SJiyong Park -C pctl.startup=0.0.0.0 \ 417*54fd6939SJiyong Park -C bp.secure_memory=1 \ 418*54fd6939SJiyong Park -C bp.tzc_400.diagnostics=1 \ 419*54fd6939SJiyong Park -C cluster0.NUM_CORES=4 \ 420*54fd6939SJiyong Park -C cluster1.NUM_CORES=4 \ 421*54fd6939SJiyong Park -C cache_state_modelled=1 \ 422*54fd6939SJiyong Park -C bp.secureflashloader.fname="<path-to>/<bl1-binary>" \ 423*54fd6939SJiyong Park -C bp.flashloader0.fname="<path-to>/<FIP-binary>" \ 424*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \ 425*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000 426*54fd6939SJiyong Park 427*54fd6939SJiyong Park.. note:: 428*54fd6939SJiyong Park The ``FVP_Base_RevC-2xAEMv8A`` has shifted affinities and requires 429*54fd6939SJiyong Park a specific DTS for all the CPUs to be loaded. 430*54fd6939SJiyong Park 431*54fd6939SJiyong ParkRunning on the AEMv8 Base FVP (AArch32) with reset to BL1 entrypoint 432*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 433*54fd6939SJiyong Park 434*54fd6939SJiyong ParkThe following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux 435*54fd6939SJiyong Parkwith 8 CPUs using the AArch32 build of TF-A. 436*54fd6939SJiyong Park 437*54fd6939SJiyong Park.. code:: shell 438*54fd6939SJiyong Park 439*54fd6939SJiyong Park <path-to>/FVP_Base_AEMv8A-AEMv8A \ 440*54fd6939SJiyong Park -C pctl.startup=0.0.0.0 \ 441*54fd6939SJiyong Park -C bp.secure_memory=1 \ 442*54fd6939SJiyong Park -C bp.tzc_400.diagnostics=1 \ 443*54fd6939SJiyong Park -C cluster0.NUM_CORES=4 \ 444*54fd6939SJiyong Park -C cluster1.NUM_CORES=4 \ 445*54fd6939SJiyong Park -C cache_state_modelled=1 \ 446*54fd6939SJiyong Park -C cluster0.cpu0.CONFIG64=0 \ 447*54fd6939SJiyong Park -C cluster0.cpu1.CONFIG64=0 \ 448*54fd6939SJiyong Park -C cluster0.cpu2.CONFIG64=0 \ 449*54fd6939SJiyong Park -C cluster0.cpu3.CONFIG64=0 \ 450*54fd6939SJiyong Park -C cluster1.cpu0.CONFIG64=0 \ 451*54fd6939SJiyong Park -C cluster1.cpu1.CONFIG64=0 \ 452*54fd6939SJiyong Park -C cluster1.cpu2.CONFIG64=0 \ 453*54fd6939SJiyong Park -C cluster1.cpu3.CONFIG64=0 \ 454*54fd6939SJiyong Park -C bp.secureflashloader.fname="<path-to>/<bl1-binary>" \ 455*54fd6939SJiyong Park -C bp.flashloader0.fname="<path-to>/<FIP-binary>" \ 456*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \ 457*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000 458*54fd6939SJiyong Park 459*54fd6939SJiyong ParkRunning on the Cortex-A57-A53 Base FVP with reset to BL1 entrypoint 460*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 461*54fd6939SJiyong Park 462*54fd6939SJiyong ParkThe following ``FVP_Base_Cortex-A57x4-A53x4`` model parameters should be used to 463*54fd6939SJiyong Parkboot Linux with 8 CPUs using the AArch64 build of TF-A. 464*54fd6939SJiyong Park 465*54fd6939SJiyong Park.. code:: shell 466*54fd6939SJiyong Park 467*54fd6939SJiyong Park <path-to>/FVP_Base_Cortex-A57x4-A53x4 \ 468*54fd6939SJiyong Park -C pctl.startup=0.0.0.0 \ 469*54fd6939SJiyong Park -C bp.secure_memory=1 \ 470*54fd6939SJiyong Park -C bp.tzc_400.diagnostics=1 \ 471*54fd6939SJiyong Park -C cache_state_modelled=1 \ 472*54fd6939SJiyong Park -C bp.secureflashloader.fname="<path-to>/<bl1-binary>" \ 473*54fd6939SJiyong Park -C bp.flashloader0.fname="<path-to>/<FIP-binary>" \ 474*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \ 475*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000 476*54fd6939SJiyong Park 477*54fd6939SJiyong ParkRunning on the Cortex-A32 Base FVP (AArch32) with reset to BL1 entrypoint 478*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 479*54fd6939SJiyong Park 480*54fd6939SJiyong ParkThe following ``FVP_Base_Cortex-A32x4`` model parameters should be used to 481*54fd6939SJiyong Parkboot Linux with 4 CPUs using the AArch32 build of TF-A. 482*54fd6939SJiyong Park 483*54fd6939SJiyong Park.. code:: shell 484*54fd6939SJiyong Park 485*54fd6939SJiyong Park <path-to>/FVP_Base_Cortex-A32x4 \ 486*54fd6939SJiyong Park -C pctl.startup=0.0.0.0 \ 487*54fd6939SJiyong Park -C bp.secure_memory=1 \ 488*54fd6939SJiyong Park -C bp.tzc_400.diagnostics=1 \ 489*54fd6939SJiyong Park -C cache_state_modelled=1 \ 490*54fd6939SJiyong Park -C bp.secureflashloader.fname="<path-to>/<bl1-binary>" \ 491*54fd6939SJiyong Park -C bp.flashloader0.fname="<path-to>/<FIP-binary>" \ 492*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \ 493*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000 494*54fd6939SJiyong Park 495*54fd6939SJiyong Park 496*54fd6939SJiyong ParkRunning on the AEMv8 Base FVP with reset to BL31 entrypoint 497*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 498*54fd6939SJiyong Park 499*54fd6939SJiyong ParkThe following ``FVP_Base_RevC-2xAEMv8A`` parameters should be used to boot Linux 500*54fd6939SJiyong Parkwith 8 CPUs using the AArch64 build of TF-A. 501*54fd6939SJiyong Park 502*54fd6939SJiyong Park.. code:: shell 503*54fd6939SJiyong Park 504*54fd6939SJiyong Park <path-to>/FVP_Base_RevC-2xAEMv8A \ 505*54fd6939SJiyong Park -C pctl.startup=0.0.0.0 \ 506*54fd6939SJiyong Park -C bp.secure_memory=1 \ 507*54fd6939SJiyong Park -C bp.tzc_400.diagnostics=1 \ 508*54fd6939SJiyong Park -C cluster0.NUM_CORES=4 \ 509*54fd6939SJiyong Park -C cluster1.NUM_CORES=4 \ 510*54fd6939SJiyong Park -C cache_state_modelled=1 \ 511*54fd6939SJiyong Park -C cluster0.cpu0.RVBAR=0x04010000 \ 512*54fd6939SJiyong Park -C cluster0.cpu1.RVBAR=0x04010000 \ 513*54fd6939SJiyong Park -C cluster0.cpu2.RVBAR=0x04010000 \ 514*54fd6939SJiyong Park -C cluster0.cpu3.RVBAR=0x04010000 \ 515*54fd6939SJiyong Park -C cluster1.cpu0.RVBAR=0x04010000 \ 516*54fd6939SJiyong Park -C cluster1.cpu1.RVBAR=0x04010000 \ 517*54fd6939SJiyong Park -C cluster1.cpu2.RVBAR=0x04010000 \ 518*54fd6939SJiyong Park -C cluster1.cpu3.RVBAR=0x04010000 \ 519*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl31-binary>"@0x04010000 \ 520*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl32-binary>"@0xff000000 \ 521*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000 \ 522*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \ 523*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \ 524*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000 525*54fd6939SJiyong Park 526*54fd6939SJiyong ParkNotes: 527*54fd6939SJiyong Park 528*54fd6939SJiyong Park- Position Independent Executable (PIE) support is enabled in this 529*54fd6939SJiyong Park config allowing BL31 to be loaded at any valid address for execution. 530*54fd6939SJiyong Park 531*54fd6939SJiyong Park- Since a FIP is not loaded when using BL31 as reset entrypoint, the 532*54fd6939SJiyong Park ``--data="<path-to><bl31|bl32|bl33-binary>"@<base-address-of-binary>`` 533*54fd6939SJiyong Park parameter is needed to load the individual bootloader images in memory. 534*54fd6939SJiyong Park BL32 image is only needed if BL31 has been built to expect a Secure-EL1 535*54fd6939SJiyong Park Payload. For the same reason, the FDT needs to be compiled from the DT source 536*54fd6939SJiyong Park and loaded via the ``--data cluster0.cpu0="<path-to>/<fdt>"@0x82000000`` 537*54fd6939SJiyong Park parameter. 538*54fd6939SJiyong Park 539*54fd6939SJiyong Park- The ``FVP_Base_RevC-2xAEMv8A`` has shifted affinities and requires a 540*54fd6939SJiyong Park specific DTS for all the CPUs to be loaded. 541*54fd6939SJiyong Park 542*54fd6939SJiyong Park- The ``-C cluster<X>.cpu<Y>.RVBAR=@<base-address-of-bl31>`` parameter, where 543*54fd6939SJiyong Park X and Y are the cluster and CPU numbers respectively, is used to set the 544*54fd6939SJiyong Park reset vector for each core. 545*54fd6939SJiyong Park 546*54fd6939SJiyong Park- Changing the default value of ``ARM_TSP_RAM_LOCATION`` will also require 547*54fd6939SJiyong Park changing the value of 548*54fd6939SJiyong Park ``--data="<path-to><bl32-binary>"@<base-address-of-bl32>`` to the new value of 549*54fd6939SJiyong Park ``BL32_BASE``. 550*54fd6939SJiyong Park 551*54fd6939SJiyong Park 552*54fd6939SJiyong ParkRunning on the AEMv8 Base FVP (AArch32) with reset to SP_MIN entrypoint 553*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 554*54fd6939SJiyong Park 555*54fd6939SJiyong ParkThe following ``FVP_Base_AEMv8A-AEMv8A`` parameters should be used to boot Linux 556*54fd6939SJiyong Parkwith 8 CPUs using the AArch32 build of TF-A. 557*54fd6939SJiyong Park 558*54fd6939SJiyong Park.. code:: shell 559*54fd6939SJiyong Park 560*54fd6939SJiyong Park <path-to>/FVP_Base_AEMv8A-AEMv8A \ 561*54fd6939SJiyong Park -C pctl.startup=0.0.0.0 \ 562*54fd6939SJiyong Park -C bp.secure_memory=1 \ 563*54fd6939SJiyong Park -C bp.tzc_400.diagnostics=1 \ 564*54fd6939SJiyong Park -C cluster0.NUM_CORES=4 \ 565*54fd6939SJiyong Park -C cluster1.NUM_CORES=4 \ 566*54fd6939SJiyong Park -C cache_state_modelled=1 \ 567*54fd6939SJiyong Park -C cluster0.cpu0.CONFIG64=0 \ 568*54fd6939SJiyong Park -C cluster0.cpu1.CONFIG64=0 \ 569*54fd6939SJiyong Park -C cluster0.cpu2.CONFIG64=0 \ 570*54fd6939SJiyong Park -C cluster0.cpu3.CONFIG64=0 \ 571*54fd6939SJiyong Park -C cluster1.cpu0.CONFIG64=0 \ 572*54fd6939SJiyong Park -C cluster1.cpu1.CONFIG64=0 \ 573*54fd6939SJiyong Park -C cluster1.cpu2.CONFIG64=0 \ 574*54fd6939SJiyong Park -C cluster1.cpu3.CONFIG64=0 \ 575*54fd6939SJiyong Park -C cluster0.cpu0.RVBAR=0x04002000 \ 576*54fd6939SJiyong Park -C cluster0.cpu1.RVBAR=0x04002000 \ 577*54fd6939SJiyong Park -C cluster0.cpu2.RVBAR=0x04002000 \ 578*54fd6939SJiyong Park -C cluster0.cpu3.RVBAR=0x04002000 \ 579*54fd6939SJiyong Park -C cluster1.cpu0.RVBAR=0x04002000 \ 580*54fd6939SJiyong Park -C cluster1.cpu1.RVBAR=0x04002000 \ 581*54fd6939SJiyong Park -C cluster1.cpu2.RVBAR=0x04002000 \ 582*54fd6939SJiyong Park -C cluster1.cpu3.RVBAR=0x04002000 \ 583*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl32-binary>"@0x04002000 \ 584*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000 \ 585*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \ 586*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \ 587*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000 588*54fd6939SJiyong Park 589*54fd6939SJiyong Park.. note:: 590*54fd6939SJiyong Park Position Independent Executable (PIE) support is enabled in this 591*54fd6939SJiyong Park config allowing SP_MIN to be loaded at any valid address for execution. 592*54fd6939SJiyong Park 593*54fd6939SJiyong ParkRunning on the Cortex-A57-A53 Base FVP with reset to BL31 entrypoint 594*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 595*54fd6939SJiyong Park 596*54fd6939SJiyong ParkThe following ``FVP_Base_Cortex-A57x4-A53x4`` model parameters should be used to 597*54fd6939SJiyong Parkboot Linux with 8 CPUs using the AArch64 build of TF-A. 598*54fd6939SJiyong Park 599*54fd6939SJiyong Park.. code:: shell 600*54fd6939SJiyong Park 601*54fd6939SJiyong Park <path-to>/FVP_Base_Cortex-A57x4-A53x4 \ 602*54fd6939SJiyong Park -C pctl.startup=0.0.0.0 \ 603*54fd6939SJiyong Park -C bp.secure_memory=1 \ 604*54fd6939SJiyong Park -C bp.tzc_400.diagnostics=1 \ 605*54fd6939SJiyong Park -C cache_state_modelled=1 \ 606*54fd6939SJiyong Park -C cluster0.cpu0.RVBARADDR=0x04010000 \ 607*54fd6939SJiyong Park -C cluster0.cpu1.RVBARADDR=0x04010000 \ 608*54fd6939SJiyong Park -C cluster0.cpu2.RVBARADDR=0x04010000 \ 609*54fd6939SJiyong Park -C cluster0.cpu3.RVBARADDR=0x04010000 \ 610*54fd6939SJiyong Park -C cluster1.cpu0.RVBARADDR=0x04010000 \ 611*54fd6939SJiyong Park -C cluster1.cpu1.RVBARADDR=0x04010000 \ 612*54fd6939SJiyong Park -C cluster1.cpu2.RVBARADDR=0x04010000 \ 613*54fd6939SJiyong Park -C cluster1.cpu3.RVBARADDR=0x04010000 \ 614*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl31-binary>"@0x04010000 \ 615*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl32-binary>"@0xff000000 \ 616*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000 \ 617*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \ 618*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \ 619*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000 620*54fd6939SJiyong Park 621*54fd6939SJiyong ParkRunning on the Cortex-A32 Base FVP (AArch32) with reset to SP_MIN entrypoint 622*54fd6939SJiyong Park^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 623*54fd6939SJiyong Park 624*54fd6939SJiyong ParkThe following ``FVP_Base_Cortex-A32x4`` model parameters should be used to 625*54fd6939SJiyong Parkboot Linux with 4 CPUs using the AArch32 build of TF-A. 626*54fd6939SJiyong Park 627*54fd6939SJiyong Park.. code:: shell 628*54fd6939SJiyong Park 629*54fd6939SJiyong Park <path-to>/FVP_Base_Cortex-A32x4 \ 630*54fd6939SJiyong Park -C pctl.startup=0.0.0.0 \ 631*54fd6939SJiyong Park -C bp.secure_memory=1 \ 632*54fd6939SJiyong Park -C bp.tzc_400.diagnostics=1 \ 633*54fd6939SJiyong Park -C cache_state_modelled=1 \ 634*54fd6939SJiyong Park -C cluster0.cpu0.RVBARADDR=0x04002000 \ 635*54fd6939SJiyong Park -C cluster0.cpu1.RVBARADDR=0x04002000 \ 636*54fd6939SJiyong Park -C cluster0.cpu2.RVBARADDR=0x04002000 \ 637*54fd6939SJiyong Park -C cluster0.cpu3.RVBARADDR=0x04002000 \ 638*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl32-binary>"@0x04002000 \ 639*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<bl33-binary>"@0x88000000 \ 640*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<fdt>"@0x82000000 \ 641*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<kernel-binary>"@0x80080000 \ 642*54fd6939SJiyong Park --data cluster0.cpu0="<path-to>/<ramdisk>"@0x84000000 643*54fd6939SJiyong Park 644*54fd6939SJiyong Park-------------- 645*54fd6939SJiyong Park 646*54fd6939SJiyong Park*Copyright (c) 2019-2021, Arm Limited. All rights reserved.* 647*54fd6939SJiyong Park 648*54fd6939SJiyong Park.. _TB_FW_CONFIG for FVP: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/tree/plat/arm/board/fvp/fdts/fvp_tb_fw_config.dts 649*54fd6939SJiyong Park.. _Arm's website: `FVP models`_ 650*54fd6939SJiyong Park.. _FVP models: https://developer.arm.com/products/system-design/fixed-virtual-platforms 651*54fd6939SJiyong Park.. _Linaro Release 20.01: http://releases.linaro.org/members/arm/platforms/20.01 652*54fd6939SJiyong Park.. _Arm FVP website: https://developer.arm.com/products/system-design/fixed-virtual-platforms 653