Marvell U-Boot Build Instructions
=================================

This document describes how to compile the U-Boot and how to change U-Boot configuration

Build Procedure
----------------
1. Install required packages:

		# sudo apt-get install libssl-dev
		# sudo apt-get install device-tree-compiler
		# sudo apt-get install swig libpython-dev

2. Set the cross compiler:

		# export CROSS_COMPILE=/path/to/toolchain/aarch64-marvell-linux-gnu-

3. Clean-up old residuals:

		# make mrproper

4. Configure the U-Boot:

		# make <defconfig_file>

	- For the Armada-70x0/80x0 DB board use "mvebu_db_armada8k_defconfig"
	- For the Armada-80x0 MacchiatoBin use "make mvebu_mcbin-88f8040_defconfig"
	- For the Armada-3700 DB board use "make mvebu_db-88f3720_defconfig"
	- For the Armada-3700 EsspressoBin use "make mvebu_espressobin-88f3720_defconfig"

5. Configure the device-tree and build the U-Boot image:

	Compile u-boot and set the required device-tree using:

		# make DEVICE_TREE=<name>

	NOTE:
	Compilation with "mvebu_db_armada8k_defconfig" requires explicitly exporting DEVICE_TREE
	for the requested board.
	By default, u-boot is compiled with armada-8040-db device-tree.
        Using A80x0 device-tree on A70x0 might break the device.
        In order to prevent this, the required device-tree MUST be set during compilation.
        All device-tree files are located in ./arch/arm/dts/ folder.

	NOTE:
	The u-boot.bin should not be used as a stand-alone image.
	The ARM Trusted Firmware (ATF) build process uses this image to generate the
	flash image.

Configuration update
---------------------
	To update the U-Boot configuration, please refer to doc/README.kconfig

