config BR2_TARGET_UBOOT
	bool "U-Boot"
	help
	  Build "Das U-Boot" Boot Monitor

if BR2_TARGET_UBOOT
choice
	prompt "Build system"
	default BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY

config BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY
	bool "Legacy"
	help
	  Select this option if you use an old U-Boot (older than 2015.04),
	  so that we use the old build system.

config BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG
	bool "Kconfig"
	help
	  Select this option if you use a recent U-Boot version (2015.04 or
	  newer), so that we use the Kconfig build system.

endchoice

if BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY
config BR2_TARGET_UBOOT_BOARDNAME
	string "U-Boot board name"
	help
	  One of U-Boot supported boards to be built.
	  This will be suffixed with _config to meet U-Boot standard naming.
	  See boards.cfg in U-Boot source code for the list of available
	  configurations.
endif

choice
	prompt "U-Boot Version"
	help
	  Select the specific U-Boot version you want to use

config BR2_TARGET_UBOOT_LATEST_VERSION
	bool "2018.01"

config BR2_TARGET_UBOOT_CUSTOM_VERSION
	bool "Custom version"
	help
	  This option allows to use a specific official versions

config BR2_TARGET_UBOOT_CUSTOM_TARBALL
	bool "Custom tarball"

config BR2_TARGET_UBOOT_CUSTOM_GIT
	bool "Custom Git repository"

config BR2_TARGET_UBOOT_CUSTOM_HG
	bool "Custom Mercurial repository"

config BR2_TARGET_UBOOT_CUSTOM_SVN
	bool "Custom Subversion repository"

endchoice

config BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE
	string "U-Boot version"
	depends on BR2_TARGET_UBOOT_CUSTOM_VERSION

config BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION
	string "URL of custom U-Boot tarball"
	depends on BR2_TARGET_UBOOT_CUSTOM_TARBALL

if BR2_TARGET_UBOOT_CUSTOM_GIT || BR2_TARGET_UBOOT_CUSTOM_HG || BR2_TARGET_UBOOT_CUSTOM_SVN

config BR2_TARGET_UBOOT_CUSTOM_REPO_URL
	string "URL of custom repository"
	default BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL \
		if BR2_TARGET_UBOOT_CUSTOM_GIT_REPO_URL != ""  # legacy

config BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION
	string "Custom repository version"
	default BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION \
		if BR2_TARGET_UBOOT_CUSTOM_GIT_VERSION != ""  # legacy
	help
	  Revision to use in the typical format used by Git/Mercurial/Subversion
	  E.G. a sha id, a tag, branch, ..

endif

config BR2_TARGET_UBOOT_VERSION
	string
	default "2018.01"	if BR2_TARGET_UBOOT_LATEST_VERSION
	default BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE \
		if BR2_TARGET_UBOOT_CUSTOM_VERSION
	default "custom"	if BR2_TARGET_UBOOT_CUSTOM_TARBALL
	default BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION \
		if BR2_TARGET_UBOOT_CUSTOM_GIT || BR2_TARGET_UBOOT_CUSTOM_HG || BR2_TARGET_UBOOT_CUSTOM_SVN

config BR2_TARGET_UBOOT_PATCH
	string "Custom U-Boot patches"
	default BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR if BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR != ""  # legacy
	help
	  A space-separated list of patches to apply to U-Boot.
	  Each patch can be described as an URL, a local file path,
	  or a directory. In the case of a directory, all files
	  matching *.patch in the directory will be applied.

	  Most users may leave this empty

if BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG
choice
	prompt "U-Boot configuration"
	default BR2_TARGET_UBOOT_USE_DEFCONFIG

config BR2_TARGET_UBOOT_USE_DEFCONFIG
	bool "Using an in-tree board defconfig file"

config BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG
	bool "Using a custom board (def)config file"

endchoice

config BR2_TARGET_UBOOT_BOARD_DEFCONFIG
	string "Board defconfig"
	depends on BR2_TARGET_UBOOT_USE_DEFCONFIG
	help
	  Name of the board for which U-Boot should be built, without
	  the _defconfig suffix.

config BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE
	string "Configuration file path"
	depends on BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG
	help
	  Path to the U-Boot configuration file.

config BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES
	string "Additional configuration fragment files"
	help
	  A space-separated list of configuration fragment files,
	  that will be merged to the main U-Boot configuration file.
endif

config BR2_TARGET_UBOOT_NEEDS_DTC
	bool "U-Boot needs dtc"
	select BR2_PACKAGE_HOST_DTC
	help
	  Select this option if your U-Boot board configuration
	  requires the Device Tree compiler to be available.

config BR2_TARGET_UBOOT_NEEDS_PYLIBFDT
	bool "U-Boot needs pylibfdt"
	help
	  Select this option if your U-Boot board configuration
	  requires the Python libfdt library to be available.

config BR2_TARGET_UBOOT_NEEDS_OPENSSL
	bool "U-Boot needs OpenSSL"
	help
	  Select this option if your U-Boot board configuration
	  requires OpenSSL to be available on the host. This is
	  typically the case when the board configuration has
	  CONFIG_FIT_SIGNATURE enabled.

config BR2_TARGET_UBOOT_NEEDS_ATF_BL31
	bool "U-Boot needs ATF BL31"
	depends on BR2_TARGET_ARM_TRUSTED_FIRMWARE
	depends on !BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33
	select BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31
	help
	  Some specific platforms (such as Allwinner A64/H5)
	  encapsulate the BL31 part of ATF inside U-Boot. This option
	  makes sure ATF gets built prior to U-Boot, and that the BL31
	  variable pointing to ATF's BL31 binary, is passed during the
	  Buildroot build.

menu "U-Boot binary format"

config BR2_TARGET_UBOOT_FORMAT_AIS
	bool "u-boot.ais"
	help
	  AIS (Application Image Script) is a format defined by TI.
	  It is required to load code/data on OMAP-L1 processors.
	  u-boot.ais contains U-Boot with the SPL support.

config BR2_TARGET_UBOOT_FORMAT_BIN
	bool "u-boot.bin"
	default y

config BR2_TARGET_UBOOT_FORMAT_DTB_BIN
	bool "u-boot-dtb.bin"

config BR2_TARGET_UBOOT_FORMAT_DTB_IMG
	bool "u-boot-dtb.img"

config BR2_TARGET_UBOOT_FORMAT_IMG
	bool "u-boot.img"

config BR2_TARGET_UBOOT_FORMAT_IMX
	bool "u-boot.imx"

config BR2_TARGET_UBOOT_FORMAT_NAND_BIN
	bool "u-boot-nand.bin"

config BR2_TARGET_UBOOT_FORMAT_KWB
	depends on BR2_arm
	bool "u-boot.kwb (Marvell)"

config BR2_TARGET_UBOOT_FORMAT_LDR
	depends on BR2_bfin
	bool "u-boot.ldr"

config BR2_TARGET_UBOOT_FORMAT_ELF
	bool "u-boot.elf"

config BR2_TARGET_UBOOT_FORMAT_SB
	depends on BR2_arm
	bool "u-boot.sb (Freescale i.MX28)"

config BR2_TARGET_UBOOT_FORMAT_SD
	depends on BR2_arm
	bool "u-boot.sd (Freescale i.MX28)"
	help
	  This is Freescale i.MX28 SB format, with a header for booting
	  from an SD card.

	  U-boot includes an mxsboot tool to generate this format,
	  starting from 2011.12.

	  See doc/README.mxs (or doc/README.mx28_common before 2013.07)

config BR2_TARGET_UBOOT_FORMAT_NAND
	depends on BR2_arm
	bool "u-boot.nand (Freescale i.MX28)"
	help
	  This is Freescale i.MX28 BootStream format (.sb), with a header
	  for booting from a NAND flash.

	  U-boot includes an mxsboot tool to generate this format,
	  starting from 2011.12.

	  There are two possibilities when preparing an image writable to
	  NAND flash:
	  1) The NAND was not written at all yet or the BCB (Boot Control
	  Blocks) is broken. In this case, the NAND image 'u-boot.nand'
	  needs to written.
	  2) The NAND flash was already written with a good BCB. This
	  applies after 'u-boot.nand' was correctly written. There is no
	  need to write the BCB again. In this case, the bootloader can be
	  upgraded by writing 'u-boot.sb'.

	  To satisfy both cases, the 'u-boot.nand' image obtained from
	  mxsboot as well as the U-Boot make target 'u-boot.sb' are copied
	  to the binaries directory.

	  See doc/README.mxs (or doc/README.mx28_common before 2013.07)

if BR2_TARGET_UBOOT_FORMAT_NAND

config BR2_TARGET_UBOOT_FORMAT_NAND_PAGE_SIZE
	int "NAND page size"
	default 2048
	help
	  The NAND page size of the targets NAND flash in bytes as a
	  decimal integer value.

	  The value provided here is passed to the -w option of mxsboot.

config BR2_TARGET_UBOOT_FORMAT_NAND_OOB_SIZE
	int "NAND OOB size"
	default 64
	help
	  The NAND OOB size of the targets NAND flash in bytes as a
	  decimal integer value.

	  The value provided here is passed to the -o option of mxsboot.

config BR2_TARGET_UBOOT_FORMAT_NAND_ERASE_SIZE
	int "NAND erase size"
	default 131072
	help
	  The NAND eraseblock size of the targets NAND flash in bytes as
	  a decimal integer value.

	  The value provided here is passed to the -e option of mxsboot.

endif

config BR2_TARGET_UBOOT_FORMAT_CUSTOM
	bool "Custom (specify below)"
	help
	  On some platforms, the standard U-Boot binary is not called
	  u-boot.bin, but u-boot<something>.bin. If this is your case,
	  you should select this option and specify the correct name(s)
	  in BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME.

config BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME
	string "U-Boot binary format: custom names"
	depends on BR2_TARGET_UBOOT_FORMAT_CUSTOM
	help
	  In case the U-Boot binary for the target platform is not among
	  the default names, one or more custom names can be listed here.
	  Use space to separate multiple names.
	  Example:
	  u-boot_magic.bin

endmenu

config BR2_TARGET_UBOOT_OMAP_IFT
	depends on BR2_TARGET_UBOOT_FORMAT_BIN
	depends on BR2_arm || BR2_armeb
	select BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS
	bool "produce a .ift signed image (OMAP)"
	help
	  Use gpsign to produce an image of u-boot.bin signed with
	  a Configuration Header for booting on OMAP processors.
	  This allows U-Boot to boot without the need for an
	  intermediate bootloader (e.g. x-loader) if it is written
	  on the first sector of the boot medium.
	  This only works for some media, such as NAND. Check your
	  chip documentation for details. You might also want to
	  read the documentation of gpsign, the tool that generates
	  the .ift image, at:
	  https://github.com/nmenon/omap-u-boot-utils/blob/master/README

if BR2_TARGET_UBOOT_OMAP_IFT

config BR2_TARGET_UBOOT_OMAP_IFT_CONFIG
	string "gpsign Configuration Header config file"
	help
	  The Configuration Header (CH) config file defines the
	  desired content of the CH for the signed image.
	  It usually contains external RAM settings and
	  possibly other external devices initialization.
	  The omap-u-boot-utils software contains example
	  configuration files for some boards:
	  https://github.com/nmenon/omap-u-boot-utils/tree/master/configs

endif

config BR2_TARGET_UBOOT_SPL
	bool "Install U-Boot SPL binary image"
	depends on !BR2_TARGET_XLOADER
	help
	  Install the U-Boot SPL binary image to the images
	  directory.
	  SPL is a first stage bootloader loaded into internal
	  memory in charge of enabling and configuring the
	  external memory (DDR), and load the u-boot program
	  into DDR.

config BR2_TARGET_UBOOT_SPL_NAME
	string "U-Boot SPL/TPL binary image name(s)"
	default "spl/u-boot-spl.bin"
	depends on BR2_TARGET_UBOOT_SPL
	help
	  A space-separated list of SPL/TPL binaries, generated during
	  u-boot build. For most platform SPL name is spl/u-boot-spl.bin
	  and TPL name is tpl/u-boot-tpl.bin but not always. SPL name is
	  MLO on OMAP and SPL on i.MX6 for example.

config BR2_TARGET_UBOOT_ZYNQ_IMAGE
	bool "Generate image for Xilinx Zynq"
	depends on BR2_arm
	depends on BR2_TARGET_UBOOT_SPL
	depends on BR2_TARGET_UBOOT_FORMAT_DTB_IMG
	help
	  Generate the BOOT.BIN file from U-Boot's SPL. The image
	  boots the Xilinx Zynq chip without any FPGA bitstream.
	  A bitstream can be loaded by the U-Boot. The SPL searchs
	  for u-boot-dtb.img file so this U-Boot format is required
	  to be set.

config BR2_TARGET_UBOOT_ALTERA_SOCFPGA_IMAGE_CRC
	bool "CRC image for Altera SoC FPGA (mkpimage)"
	depends on BR2_arm
	depends on BR2_TARGET_UBOOT_SPL || BR2_TARGET_UBOOT_FORMAT_DTB_BIN
	help
	  Pass the U-Boot image through the mkpimage tool to enable
	  booting on the Altera SoC FPGA based platforms.

	  On some platforms, it's the SPL that needs to be passed
	  through mkpimage. On some other platforms there is no SPL
	  because the internal SRAM is big enough to store the full
	  U-Boot. In this case, it's directly the full U-Boot image
	  that is passed through mkpimage.

	  If BR2_TARGET_UBOOT_SPL is enabled then
	  BR2_TARGET_UBOOT_SPL_NAME is converted by mkpimage using
	  header version 0.

	  Otherwise the full u-boot-dtb.bin is converted using
	  mkpimage header version 1.

	  In either case the resulting file will be given a .crc
	  extension.

menuconfig BR2_TARGET_UBOOT_ENVIMAGE
	bool "Environment image"
	help
	  Generate a valid binary environment image from a text file
	  describing the key=value pairs of the environment.

	  The environment image will be called uboot-env.bin.

if BR2_TARGET_UBOOT_ENVIMAGE

config BR2_TARGET_UBOOT_ENVIMAGE_SOURCE
	string "Source files for environment"
	help
	  Text files describing the environment. Files should have
	  lines of the form var=value, one per line. Blank lines and
	  lines starting with a # are ignored.

	  Multiple source files are concatenated in the order listed.

config BR2_TARGET_UBOOT_ENVIMAGE_SIZE
	string "Size of environment"
	help
	  Size of envronment, can be prefixed with 0x for hexadecimal
	  values.

config BR2_TARGET_UBOOT_ENVIMAGE_REDUNDANT
	bool "Environment has two copies"
	help
	  Some platforms define in their U-Boot configuration that the
	  U-Boot environment should be duplicated in two locations (for
	  extra safety). Check your U-Boot configuration for the
	  CONFIG_ENV_ADDR_REDUND and CONFIG_ENV_SIZE_REDUND settings to
	  see if this is the case for your platform.

	  If it is the case, then you should enable this option to
	  ensure that the U-Boot environment image generated by
	  Buildroot is compatible with the "redundant environment"
	  mechanism of U-Boot.

endif # BR2_TARGET_UBOOT_ENVIMAGE

config BR2_TARGET_UBOOT_BOOT_SCRIPT
	bool "Generate a U-Boot boot script"
	help
	  Generate a U-Boot boot script, given a file listing U-Boot
	  commands to be executed at boot time. The generated boot
	  script will be called 'boot.scr'.

if BR2_TARGET_UBOOT_BOOT_SCRIPT

config BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE
	string "U-Boot boot script source"
	help
	  Source file to generate the U-Boot boot script.

endif

if BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG

config BR2_TARGET_UBOOT_CUSTOM_DTS_PATH
	string "Device Tree Source file paths"
	help
	  Space-separated list of paths to device tree source files
	  that will be copied to arch/ARCH/dts/ before starting the
	  build.

	  To use this device tree source file, the U-Boot configuration
	  file must refer to it.

endif

endif # BR2_TARGET_UBOOT
