xref: /aosp_15_r20/external/arm-trusted-firmware/docs/plat/arm/fvp/index.rst (revision 54fd6939e177f8ff529b10183254802c76df6d08)
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