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

	  https://www.denx.de/wiki/U-Boot

if BR2_TARGET_UBOOT
choice
	prompt "Build system"
	default BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG if BR2_TARGET_UBOOT_LATEST_VERSION
	default BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY

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.

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.

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 "2020.10"

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"

config BR2_TARGET_UBOOT_CUSTOM_REPO_VERSION
	string "Custom repository version"
	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 "2020.10"	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_PYTHON
	bool

choice
	bool "U-Boot needs host Python"

config BR2_TARGET_UBOOT_NEEDS_PYTHON_NONE
	bool "no"
	depends on !BR2_TARGET_UBOOT_NEEDS_PYTHON
	help
	  Select this option if U-Boot does not need any
	  host python to build.

config BR2_TARGET_UBOOT_NEEDS_PYTHON2
	bool "python 2.x"
	help
	  Select this option if U-Boot needs a host Python 2.x
	  interpreter. This is the case for some U-Boot
	  configurations, prior to U-Boot 2020.01.

config BR2_TARGET_UBOOT_NEEDS_PYTHON3
	bool "python 3.x"
	help
	  Select this option if U-Boot needs a host Python 3.x
	  interpreter. This is the case for some U-Boot
	  configurations, after U-Boot 2020.01.

endchoice

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

config BR2_TARGET_UBOOT_NEEDS_PYELFTOOLS
	bool "U-Boot needs pyelftools"
	select BR2_TARGET_UBOOT_NEEDS_PYTHON
	help
	  Select this option if your U-Boot board configuration
	  requires the Python pyelftools library to be available.
	  This is used by some rockchip SOCs for elf parsing.
	  For example: rk3399 soc boards.

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_LZOP
	bool "U-Boot needs lzop"
	help
	  Select this option if your U-Boot board configuration
	  requires lzop to be available on the host. This is typically
	  the case when the board configuration has CONFIG_SPL_LZO
	  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.

choice
	prompt "U-Boot ATF BL31 format"
	default BR2_TARGET_UBOOT_NEEDS_ATF_BL31_BIN
	depends on BR2_TARGET_UBOOT_NEEDS_ATF_BL31

config BR2_TARGET_UBOOT_NEEDS_ATF_BL31_BIN
	bool "bl31.bin"

config BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF
	bool "bl31.elf"

endchoice

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_NAND_BIN
	bool "u-boot-nand.bin"

config BR2_TARGET_UBOOT_FORMAT_ELF
	bool "u-boot.elf"

config BR2_TARGET_UBOOT_FORMAT_IMG
	bool "u-boot.img"

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

config BR2_TARGET_UBOOT_FORMAT_IMX
	bool "u-boot.imx"

config BR2_TARGET_UBOOT_FORMAT_DTB_IMX
	bool "u-boot-dtb.imx"

config BR2_TARGET_UBOOT_FORMAT_ITB
	bool "u-boot.itb"

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

config BR2_TARGET_UBOOT_FORMAT_NAND
	bool "u-boot.nand (Freescale i.MX28)"
	depends on BR2_arm
	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_SB
	bool "u-boot.sb (Freescale i.MX28)"
	depends on BR2_arm

config BR2_TARGET_UBOOT_FORMAT_SD
	bool "u-boot.sd (Freescale i.MX28)"
	depends on BR2_arm
	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_STM32
	bool "u-boot.stm32"
	depends on BR2_arm

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
	bool "produce a .ift signed image (OMAP)"
	depends on BR2_TARGET_UBOOT_FORMAT_BIN
	depends on BR2_arm || BR2_armeb
	select BR2_PACKAGE_HOST_OMAP_U_BOOT_UTILS
	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_ZYNQMP
	bool "Boot on the Xilinx ZynqMP SoCs"
	depends on BR2_aarch64
	help
	  Enable options specific to the Xilinx ZynqMP family of SoCs.

if BR2_TARGET_UBOOT_ZYNQMP

config BR2_TARGET_UBOOT_ZYNQMP_PMUFW
	string "PMU firmware location"
	depends on BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG
	help
	  Location of a PMU firmware binary.

	  If not empty, instructs the U-Boot build process to generate
	  a boot.bin (to be loaded by the ZynqMP boot ROM) containing
	  both the U-Boot SPL and the PMU firmware in the
	  Xilinx-specific boot format.

	  The value can be an absolute or relative path, and will be
	  used directly from where it is located, or an URI
	  (e.g. http://...), and it will be downloaded and used from
	  the download directory.

	  If empty, the generated boot.bin will not contain a PMU
	  firmware.

	  This feature requires U-Boot >= 2018.07.

config BR2_TARGET_UBOOT_ZYNQMP_PM_CFG
	string "PMU configuration location"
	depends on BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG
	help
	  Location of a PMU configuration file.

	  If not empty, Buildroot will convert the PMU configuration
	  file into a loadable blob and pass it to U-Boot. The blob gets
	  embedded into the U-Boot SPL and is used to configure the PMU
	  during board initialization.

	  Unlike the PMU firmware, the PMU configuration file is unique
	  to each board configuration. A PMU configuration file can be
	  generated by building your Xilinx SDK BSP. It can be found in
	  the BSP source, for example at
	    ./psu_cortexa53_0/libsrc/xilpm_v2_4/src/pm_cfg_obj.c

	  Leave this option empty if your PMU firmware has a hard-coded
	  configuration object or you are loading it by any other means.

	  This feature requires U-Boot >= v2019.10.

config BR2_TARGET_UBOOT_ZYNQMP_PSU_INIT_FILE
	string "Custom psu_init_gpl file"
	depends on BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG
	help
	  On ZynqMP the booloader is responsible for some basic
	  initializations, such as enabling peripherals and
	  configuring pinmuxes. The psu_init_gpl.c file (and,
	  optionally, psu_init_gpl.h) contains the code for such
	  initializations.

	  Although U-Boot contains psu_init_gpl.c files for some
	  boards, each of them describes only one specific
	  configuration. Users of a different board, or needing a
	  different configuration, can generate custom files using the
	  Xilinx development tools.

	  Set this variable to the path to your psu_init_gpl.c file
	  (e.g. "board/myboard/psu_init_gpl.c"). psu_init_gpl.h, if
	  needed, should be in the same directory. U-Boot will build
	  and link the user-provided file instead of the built-in one.

	  Leave empty to use the files provided by U-Boot.

	  This feature requires commit
	  6da4f67ad09cd8b311d77b2b04e557b7ef65b56c from upstream
	  U-Boot, available from versions after 2018.07.

endif

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.

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

config BR2_TARGET_UBOOT_CUSTOM_MAKEOPTS
	string "Custom make options"
	help
	  List of custom make options passed at build time. Can be
	  used for example to pass a DEVICE_TREE= value.

endif # BR2_TARGET_UBOOT
