xref: /rk3399_ARM-atf/docs/plat/marvell/armada/build.rst (revision a28471722afb3ae784d7bce2118c2ea703f8444c)
1*a2847172SGrzegorz JaszczykTF-A Build Instructions for Marvell Platforms
2*a2847172SGrzegorz Jaszczyk=============================================
3*a2847172SGrzegorz Jaszczyk
4*a2847172SGrzegorz JaszczykThis section describes how to compile the Trusted Firmware-A (TF-A) project for Marvell's platforms.
5*a2847172SGrzegorz Jaszczyk
6*a2847172SGrzegorz JaszczykBuild Instructions
7*a2847172SGrzegorz Jaszczyk------------------
8*a2847172SGrzegorz Jaszczyk(1) Set the cross compiler
9*a2847172SGrzegorz Jaszczyk
10*a2847172SGrzegorz Jaszczyk    .. code:: shell
11*a2847172SGrzegorz Jaszczyk
12*a2847172SGrzegorz Jaszczyk        > export CROSS_COMPILE=/path/to/toolchain/aarch64-linux-gnu-
13*a2847172SGrzegorz Jaszczyk
14*a2847172SGrzegorz Jaszczyk(2) Set path for FIP images:
15*a2847172SGrzegorz Jaszczyk
16*a2847172SGrzegorz JaszczykSet U-Boot image path (relatively to TF-A root or absolute path)
17*a2847172SGrzegorz Jaszczyk
18*a2847172SGrzegorz Jaszczyk    .. code:: shell
19*a2847172SGrzegorz Jaszczyk
20*a2847172SGrzegorz Jaszczyk        > export BL33=path/to/u-boot.bin
21*a2847172SGrzegorz Jaszczyk
22*a2847172SGrzegorz JaszczykFor example: if U-Boot project (and its images) is located at ``~/project/u-boot``,
23*a2847172SGrzegorz JaszczykBL33 should be ``~/project/u-boot/u-boot.bin``
24*a2847172SGrzegorz Jaszczyk
25*a2847172SGrzegorz Jaszczyk    .. note::
26*a2847172SGrzegorz Jaszczyk
27*a2847172SGrzegorz Jaszczyk       *u-boot.bin* should be used and not *u-boot-spl.bin*
28*a2847172SGrzegorz Jaszczyk
29*a2847172SGrzegorz JaszczykSet MSS/SCP image path (mandatory only for Armada80x0)
30*a2847172SGrzegorz Jaszczyk
31*a2847172SGrzegorz Jaszczyk    .. code:: shell
32*a2847172SGrzegorz Jaszczyk
33*a2847172SGrzegorz Jaszczyk        > export SCP_BL2=path/to/mrvl_scp_bl2*.img
34*a2847172SGrzegorz Jaszczyk
35*a2847172SGrzegorz Jaszczyk(3) Armada-37x0 build requires WTP tools installation.
36*a2847172SGrzegorz Jaszczyk
37*a2847172SGrzegorz JaszczykSee below in the section "Tools and external components installation".
38*a2847172SGrzegorz JaszczykInstall ARM 32-bit cross compiler, which is required for building WTMI image for CM3
39*a2847172SGrzegorz Jaszczyk
40*a2847172SGrzegorz Jaszczyk    .. code:: shell
41*a2847172SGrzegorz Jaszczyk
42*a2847172SGrzegorz Jaszczyk        > sudo apt-get install gcc-arm-linux-gnueabi
43*a2847172SGrzegorz Jaszczyk
44*a2847172SGrzegorz Jaszczyk(4) Clean previous build residuals (if any)
45*a2847172SGrzegorz Jaszczyk
46*a2847172SGrzegorz Jaszczyk    .. code:: shell
47*a2847172SGrzegorz Jaszczyk
48*a2847172SGrzegorz Jaszczyk        > make distclean
49*a2847172SGrzegorz Jaszczyk
50*a2847172SGrzegorz Jaszczyk(5) Build TF-A
51*a2847172SGrzegorz Jaszczyk
52*a2847172SGrzegorz JaszczykThere are several build options:
53*a2847172SGrzegorz Jaszczyk
54*a2847172SGrzegorz Jaszczyk- DEBUG
55*a2847172SGrzegorz Jaszczyk
56*a2847172SGrzegorz Jaszczyk        Default is without debug information (=0). in order to enable it use ``DEBUG=1``.
57*a2847172SGrzegorz Jaszczyk        Must be disabled when building UART recovery images due to current console driver
58*a2847172SGrzegorz Jaszczyk        implementation that is not compatible with Xmodem protocol used for boot image download.
59*a2847172SGrzegorz Jaszczyk
60*a2847172SGrzegorz Jaszczyk- LOG_LEVEL
61*a2847172SGrzegorz Jaszczyk
62*a2847172SGrzegorz Jaszczyk        Defines the level of logging which will be purged to the default output port.
63*a2847172SGrzegorz Jaszczyk
64*a2847172SGrzegorz Jaszczyk        LOG_LEVEL_NONE		0
65*a2847172SGrzegorz Jaszczyk        LOG_LEVEL_ERROR		10
66*a2847172SGrzegorz Jaszczyk        LOG_LEVEL_NOTICE	20
67*a2847172SGrzegorz Jaszczyk        LOG_LEVEL_WARNING	30
68*a2847172SGrzegorz Jaszczyk        LOG_LEVEL_INFO		40
69*a2847172SGrzegorz Jaszczyk        LOG_LEVEL_VERBOSE	50
70*a2847172SGrzegorz Jaszczyk
71*a2847172SGrzegorz Jaszczyk- USE_COHERENT_MEM
72*a2847172SGrzegorz Jaszczyk
73*a2847172SGrzegorz Jaszczyk        This flag determines whether to include the coherent memory region in the
74*a2847172SGrzegorz Jaszczyk        BL memory map or not.
75*a2847172SGrzegorz Jaszczyk
76*a2847172SGrzegorz Jaszczyk- LLC_ENABLE
77*a2847172SGrzegorz Jaszczyk
78*a2847172SGrzegorz Jaszczyk        Flag defining the LLC (L3) cache state. The cache is enabled by default (``LLC_ENABLE=1``).
79*a2847172SGrzegorz Jaszczyk
80*a2847172SGrzegorz Jaszczyk- MARVELL_SECURE_BOOT
81*a2847172SGrzegorz Jaszczyk
82*a2847172SGrzegorz Jaszczyk        Build trusted(=1)/non trusted(=0) image, default is non trusted.
83*a2847172SGrzegorz Jaszczyk
84*a2847172SGrzegorz Jaszczyk- BLE_PATH
85*a2847172SGrzegorz Jaszczyk
86*a2847172SGrzegorz Jaszczyk        Points to BLE (Binary ROM extension) sources folder. Only required for A8K builds.
87*a2847172SGrzegorz Jaszczyk        The parameter is optional, its default value is ``plat/marvell/armada/a8k/common/ble``.
88*a2847172SGrzegorz Jaszczyk
89*a2847172SGrzegorz Jaszczyk- MV_DDR_PATH
90*a2847172SGrzegorz Jaszczyk
91*a2847172SGrzegorz Jaszczyk        For A7/8K, use this parameter to point to mv_ddr driver sources to allow BLE build. For A37x0,
92*a2847172SGrzegorz Jaszczyk        it is used for ddr_tool build.
93*a2847172SGrzegorz Jaszczyk
94*a2847172SGrzegorz Jaszczyk        Usage example: MV_DDR_PATH=path/to/mv_ddr
95*a2847172SGrzegorz Jaszczyk
96*a2847172SGrzegorz Jaszczyk        The parameter is optional for A7/8K, when this parameter is not set, the mv_ddr
97*a2847172SGrzegorz Jaszczyk        sources are expected to be located at: drivers/marvell/mv_ddr. However, the parameter
98*a2847172SGrzegorz Jaszczyk        is necessary for A37x0.
99*a2847172SGrzegorz Jaszczyk
100*a2847172SGrzegorz Jaszczyk        For the mv_ddr source location, check the section "Tools and external components installation"
101*a2847172SGrzegorz Jaszczyk
102*a2847172SGrzegorz Jaszczyk- DDR_TOPOLOGY
103*a2847172SGrzegorz Jaszczyk
104*a2847172SGrzegorz Jaszczyk        For Armada37x0 only, the DDR topology map index/name, default is 0.
105*a2847172SGrzegorz Jaszczyk
106*a2847172SGrzegorz Jaszczyk        Supported Options:
107*a2847172SGrzegorz Jaszczyk            - DDR3 1CS (0): DB-88F3720-DDR3-Modular (512MB); EspressoBIN (512MB)
108*a2847172SGrzegorz Jaszczyk            - DDR4 1CS (1): DB-88F3720-DDR4-Modular (512MB)
109*a2847172SGrzegorz Jaszczyk            - DDR3 2CS (2): EspressoBIN V3-V5 (1GB)
110*a2847172SGrzegorz Jaszczyk            - DDR4 2CS (3): DB-88F3720-DDR4-Modular (4GB)
111*a2847172SGrzegorz Jaszczyk            - DDR3 1CS (4): DB-88F3720-DDR3-Modular (1GB)
112*a2847172SGrzegorz Jaszczyk            - DDR4 1CS (5): EspressoBin V7 (1GB)
113*a2847172SGrzegorz Jaszczyk            - DDR4 2CS (6): EspressoBin V7 (2GB)
114*a2847172SGrzegorz Jaszczyk            - CUSTOMER (CUST): Customer board, DDR3 1CS 512MB
115*a2847172SGrzegorz Jaszczyk
116*a2847172SGrzegorz Jaszczyk- CLOCKSPRESET
117*a2847172SGrzegorz Jaszczyk
118*a2847172SGrzegorz Jaszczyk        For Armada37x0 only, the clock tree configuration preset including CPU and DDR frequency,
119*a2847172SGrzegorz Jaszczyk        default is CPU_800_DDR_800.
120*a2847172SGrzegorz Jaszczyk
121*a2847172SGrzegorz Jaszczyk            - CPU_600_DDR_600	-	CPU at 600 MHz, DDR at 600 MHz
122*a2847172SGrzegorz Jaszczyk            - CPU_800_DDR_800	-	CPU at 800 MHz, DDR at 800 MHz
123*a2847172SGrzegorz Jaszczyk            - CPU_1000_DDR_800	-	CPU at 1000 MHz, DDR at 800 MHz
124*a2847172SGrzegorz Jaszczyk            - CPU_1200_DDR_750	-	CPU at 1200 MHz, DDR at 750 MHz
125*a2847172SGrzegorz Jaszczyk
126*a2847172SGrzegorz Jaszczyk- BOOTDEV
127*a2847172SGrzegorz Jaszczyk
128*a2847172SGrzegorz Jaszczyk        For Armada37x0 only, the flash boot device, default is ``SPINOR``.
129*a2847172SGrzegorz Jaszczyk
130*a2847172SGrzegorz Jaszczyk        Currently, Armada37x0 only supports ``SPINOR``, ``SPINAND``, ``EMMCNORM`` and ``SATA``:
131*a2847172SGrzegorz Jaszczyk
132*a2847172SGrzegorz Jaszczyk            - SPINOR - SPI NOR flash boot
133*a2847172SGrzegorz Jaszczyk            - SPINAND - SPI NAND flash boot
134*a2847172SGrzegorz Jaszczyk            - EMMCNORM - eMMC Download Mode
135*a2847172SGrzegorz Jaszczyk
136*a2847172SGrzegorz Jaszczyk                Download boot loader or program code from eMMC flash into CM3 or CA53
137*a2847172SGrzegorz Jaszczyk                Requires full initialization and command sequence
138*a2847172SGrzegorz Jaszczyk
139*a2847172SGrzegorz Jaszczyk            - SATA - SATA device boot
140*a2847172SGrzegorz Jaszczyk
141*a2847172SGrzegorz Jaszczyk- PARTNUM
142*a2847172SGrzegorz Jaszczyk
143*a2847172SGrzegorz Jaszczyk        For Armada37x0 only, the boot partition number, default is 0.
144*a2847172SGrzegorz Jaszczyk
145*a2847172SGrzegorz Jaszczyk        To boot from eMMC, the value should be aligned with the parameter in
146*a2847172SGrzegorz Jaszczyk        U-Boot with name of ``CONFIG_SYS_MMC_ENV_PART``, whose value by default is
147*a2847172SGrzegorz Jaszczyk        1. For details about CONFIG_SYS_MMC_ENV_PART, please refer to the U-Boot
148*a2847172SGrzegorz Jaszczyk        build instructions.
149*a2847172SGrzegorz Jaszczyk
150*a2847172SGrzegorz Jaszczyk- WTMI_IMG
151*a2847172SGrzegorz Jaszczyk
152*a2847172SGrzegorz Jaszczyk        For Armada37x0 only, the path of the WTMI image can point to an image which
153*a2847172SGrzegorz Jaszczyk        does nothing, an image which supports EFUSE or a customized CM3 firmware
154*a2847172SGrzegorz Jaszczyk        binary. The default image is wtmi.bin that built from sources in WTP
155*a2847172SGrzegorz Jaszczyk        folder, which is the next option. If the default image is OK, then this
156*a2847172SGrzegorz Jaszczyk        option should be skipped.
157*a2847172SGrzegorz Jaszczyk
158*a2847172SGrzegorz Jaszczyk- WTP
159*a2847172SGrzegorz Jaszczyk
160*a2847172SGrzegorz Jaszczyk    For Armada37x0 only, use this parameter to point to wtptools source code
161*a2847172SGrzegorz Jaszczyk    directory, which can be found as a3700_utils.zip in the release. Usage
162*a2847172SGrzegorz Jaszczyk    example: ``WTP=/path/to/a3700_utils``
163*a2847172SGrzegorz Jaszczyk
164*a2847172SGrzegorz Jaszczyk    For example, in order to build the image in debug mode with log level up to 'notice' level run
165*a2847172SGrzegorz Jaszczyk
166*a2847172SGrzegorz Jaszczyk    .. code:: shell
167*a2847172SGrzegorz Jaszczyk
168*a2847172SGrzegorz Jaszczyk        > make DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 PLAT=<MARVELL_PLATFORM> all fip
169*a2847172SGrzegorz Jaszczyk
170*a2847172SGrzegorz Jaszczyk    And if we want to build a Armada37x0 image in debug mode with log level up to 'notice' level,
171*a2847172SGrzegorz Jaszczyk    the image has the preset CPU at 1000 MHz, preset DDR3 at 800 MHz, the DDR topology of DDR4 2CS,
172*a2847172SGrzegorz Jaszczyk    the image boot from SPI NOR flash partition 0, and the image is non trusted in WTP, the command
173*a2847172SGrzegorz Jaszczyk    line is as following
174*a2847172SGrzegorz Jaszczyk
175*a2847172SGrzegorz Jaszczyk    .. code:: shell
176*a2847172SGrzegorz Jaszczyk
177*a2847172SGrzegorz Jaszczyk        > make DEBUG=1 USE_COHERENT_MEM=0 LOG_LEVEL=20 CLOCKSPRESET=CPU_1000_DDR_800 \
178*a2847172SGrzegorz Jaszczyk            MARVELL_SECURE_BOOT=0 DDR_TOPOLOGY=3 BOOTDEV=SPINOR PARTNUM=0 PLAT=a3700 all fip
179*a2847172SGrzegorz Jaszczyk
180*a2847172SGrzegorz Jaszczyk    Supported MARVELL_PLATFORM are:
181*a2847172SGrzegorz Jaszczyk        - a3700 (for both A3720 DB and EspressoBin)
182*a2847172SGrzegorz Jaszczyk        - a70x0
183*a2847172SGrzegorz Jaszczyk        - a70x0_amc (for AMC board)
184*a2847172SGrzegorz Jaszczyk        - a80x0
185*a2847172SGrzegorz Jaszczyk        - a80x0_mcbin (for MacciatoBin)
186*a2847172SGrzegorz Jaszczyk
187*a2847172SGrzegorz JaszczykSpecial Build Flags
188*a2847172SGrzegorz Jaszczyk--------------------
189*a2847172SGrzegorz Jaszczyk
190*a2847172SGrzegorz Jaszczyk- PLAT_RECOVERY_IMAGE_ENABLE
191*a2847172SGrzegorz Jaszczyk    When set this option to enable secondary recovery function when build atf.
192*a2847172SGrzegorz Jaszczyk    In order to build UART recovery image this operation should be disabled for
193*a2847172SGrzegorz Jaszczyk    a70x0 and a80x0 because of hardware limitation (boot from secondary image
194*a2847172SGrzegorz Jaszczyk    can interrupt UART recovery process). This MACRO definition is set in
195*a2847172SGrzegorz Jaszczyk    ``plat/marvell/armada/a8k/common/include/platform_def.h`` file.
196*a2847172SGrzegorz Jaszczyk
197*a2847172SGrzegorz JaszczykFor more information about build options, please refer to the
198*a2847172SGrzegorz Jaszczyk:ref:`Build Options` document.
199*a2847172SGrzegorz Jaszczyk
200*a2847172SGrzegorz Jaszczyk
201*a2847172SGrzegorz JaszczykBuild output
202*a2847172SGrzegorz Jaszczyk------------
203*a2847172SGrzegorz JaszczykMarvell's TF-A compilation generates 7 files:
204*a2847172SGrzegorz Jaszczyk
205*a2847172SGrzegorz Jaszczyk    - ble.bin		- BLe image
206*a2847172SGrzegorz Jaszczyk    - bl1.bin		- BL1 image
207*a2847172SGrzegorz Jaszczyk    - bl2.bin		- BL2 image
208*a2847172SGrzegorz Jaszczyk    - bl31.bin		- BL31 image
209*a2847172SGrzegorz Jaszczyk    - fip.bin		- FIP image (contains BL2, BL31 & BL33 (U-Boot) images)
210*a2847172SGrzegorz Jaszczyk    - boot-image.bin	- TF-A image (contains BL1 and FIP images)
211*a2847172SGrzegorz Jaszczyk    - flash-image.bin	- Image which contains boot-image.bin and SPL image.
212*a2847172SGrzegorz Jaszczyk      Should be placed on the boot flash/device.
213*a2847172SGrzegorz Jaszczyk
214*a2847172SGrzegorz Jaszczyk
215*a2847172SGrzegorz JaszczykTools and external components installation
216*a2847172SGrzegorz Jaszczyk------------------------------------------
217*a2847172SGrzegorz Jaszczyk
218*a2847172SGrzegorz JaszczykArmada37x0 Builds require installation of 3 components
219*a2847172SGrzegorz Jaszczyk~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
220*a2847172SGrzegorz Jaszczyk
221*a2847172SGrzegorz Jaszczyk(1) ARM cross compiler capable of building images for the service CPU (CM3).
222*a2847172SGrzegorz Jaszczyk    This component is usually included in the Linux host packages.
223*a2847172SGrzegorz Jaszczyk    On Debian/Ubuntu hosts the default GNU ARM tool chain can be installed
224*a2847172SGrzegorz Jaszczyk    using the following command
225*a2847172SGrzegorz Jaszczyk
226*a2847172SGrzegorz Jaszczyk    .. code:: shell
227*a2847172SGrzegorz Jaszczyk
228*a2847172SGrzegorz Jaszczyk        > sudo apt-get install gcc-arm-linux-gnueabi
229*a2847172SGrzegorz Jaszczyk
230*a2847172SGrzegorz Jaszczyk    Only if required, the default tool chain prefix ``arm-linux-gnueabi-`` can be
231*a2847172SGrzegorz Jaszczyk    overwritten using the environment variable ``CROSS_CM3``.
232*a2847172SGrzegorz Jaszczyk    Example for BASH shell
233*a2847172SGrzegorz Jaszczyk
234*a2847172SGrzegorz Jaszczyk    .. code:: shell
235*a2847172SGrzegorz Jaszczyk
236*a2847172SGrzegorz Jaszczyk        > export CROSS_CM3=/opt/arm-cross/bin/arm-linux-gnueabi
237*a2847172SGrzegorz Jaszczyk
238*a2847172SGrzegorz Jaszczyk(2) DDR initialization library sources (mv_ddr) available at the following repository
239*a2847172SGrzegorz Jaszczyk    (use the "mv_ddr-armada-atf-mainline" branch):
240*a2847172SGrzegorz Jaszczyk
241*a2847172SGrzegorz Jaszczyk    https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell.git
242*a2847172SGrzegorz Jaszczyk
243*a2847172SGrzegorz Jaszczyk(3) Armada3700 tools available at the following repository (use the latest release branch):
244*a2847172SGrzegorz Jaszczyk
245*a2847172SGrzegorz Jaszczyk    https://github.com/MarvellEmbeddedProcessors/A3700-utils-marvell.git
246*a2847172SGrzegorz Jaszczyk
247*a2847172SGrzegorz JaszczykArmada70x0 and Armada80x0 Builds require installation of an additional component
248*a2847172SGrzegorz Jaszczyk~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
249*a2847172SGrzegorz Jaszczyk
250*a2847172SGrzegorz Jaszczyk(1) DDR initialization library sources (mv_ddr) available at the following repository
251*a2847172SGrzegorz Jaszczyk    (use the "mv_ddr-armada-atf-mainline" branch):
252*a2847172SGrzegorz Jaszczyk
253*a2847172SGrzegorz Jaszczyk    https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell.git
254