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

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 "2024.04"	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_PYTHON3
	bool "U-Boot needs host 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.

config BR2_TARGET_UBOOT_NEEDS_PYLIBFDT
	bool "U-Boot needs pylibfdt"
	select BR2_TARGET_UBOOT_NEEDS_PYTHON3
	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_PYTHON3
	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_GNUTLS
	bool "U-Boot needs gnutls"
	help
	  Select this option if your U-Boot board configuration
	  requires gnutls to be available on the host. This is
	  typically the case when the board configuration has
	  CONFIG_TOOLS_MKEFICAPSULE enabled.

config BR2_TARGET_UBOOT_NEEDS_UTIL_LINUX
	bool "U-Boot needs util-linux"
	help
	  Select this option if your U-Boot board configuration
	  requires util-linux (-luuid) to be available on the host.
	  This is typically the case when the board configuration
	  has CONFIG_TOOLS_MKEFICAPSULE enabled.

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

config BR2_TARGET_UBOOT_NEEDS_OPTEE_TEE
	bool "U-Boot needs OPTEE TEE"
	depends on BR2_TARGET_OPTEE_OS_CORE
	help
	  Some platforms (such as Rockchip) encapsulate the TEE inside
	  U-Boot. This option makes sure optee-os gets built prior to
	  U-Boot, and that the TEE variable pointing to OPTEE's
	  tee.elf, is passed during the Buildroot build.

config BR2_TARGET_UBOOT_NEEDS_OPENSBI
	bool "U-Boot needs OpenSBI"
	depends on BR2_TARGET_OPENSBI
	help
	  Some RISC-V platforms (such as SiFive HiFive Unleashed)
	  encapsulate the OpenSBI firmware image inside U-Boot.
	  This option makes sure OpenSBI gets built prior to U-Boot,
	  and that the OpenSBI variable pointing to OpenSBI binary,
	  is passed during the Buildroot build.

config BR2_TARGET_UBOOT_NEEDS_IMX_FIRMWARE
	bool "U-Boot needs firmware-imx"
	depends on BR2_PACKAGE_FIRMWARE_IMX
	depends on BR2_PACKAGE_FIRMWARE_IMX_NEEDS_DDR_FW || \
		BR2_PACKAGE_FIRMWARE_IMX_NEEDS_HDMI_FW
	help
	  Some i.MX8 platforms (such as i.MX8 M, i.MX 8M Mini, i.MX 8M
	  Nano) encapsulate NXP specific firmware (DDR, HDMI) inside
	  U-Boot.
	  This option makes sure that the i.MX firmwares are copied into
	  the U-Boot source directory.

config BR2_TARGET_UBOOT_NEEDS_ROCKCHIP_RKBIN
	bool "U-Boot needs rockchip-rkbin"
	depends on BR2_PACKAGE_ROCKCHIP_RKBIN
	help
	  For some Rockchip SoCs U-Boot needs binary blobs from
	  Rockchip.
	  This option makes sure that the needed binary blobs are copied
	  into the U-Boot source directory.

config BR2_TARGET_UBOOT_USE_BINMAN
	bool "U-Boot use binman"
	select BR2_TARGET_UBOOT_NEEDS_PYTHON3
	select BR2_TARGET_UBOOT_NEEDS_PYELFTOOLS
	select BR2_TARGET_UBOOT_NEEDS_PYLIBFDT
	help
	  Use binman tool for generation and signing of boot images.

	  https://docs.u-boot.org/en/v2024.04/develop/package/binman.html

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
	bool "u-boot.dtb"

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"
	help
	  Install the u-boot image, which is directly the ELF binary
	  for the main U-Boot, potentially with debugging symbols.

config BR2_TARGET_UBOOT_FORMAT_REMAKE_ELF
	bool "u-boot.elf"
	help
	  Install the u-boot.elf image, which is produced when
	  CONFIG_REMAKE_ELF=y. It is an ELF image (u-boot.elf)
	  produced from the raw U-Boot binary (u-boot.bin), which may
	  already have been statically relocated and may already have
	  a device-tree appended to it.

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

if BR2_TARGET_UBOOT_FORMAT_STM32
config BR2_TARGET_UBOOT_BUILD_FORMAT_STM32_LEGACY
	bool "Legacy build (u-boot.stm32 target)"
	help
	  Select this option if you use U-Boot with version older than
	  2022.01), so that we use the old build target. Otherwise,
	  binman application is called to create the stm32 binary
	  format.
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
	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"
	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_INITIAL_ENV
	bool "Install u-boot-initial-env"
	help
	  Install the U-Boot u-boot-initial-env on the target.

	  This file is typically required by libubootenv.

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.

	  The PMU firmware binary can be either in ELF or BIN format.

	  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
