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