config BR2_PACKAGE_HOST_UBOOT_TOOLS
	bool "host u-boot tools"
	help
	  Companion tools for Das U-Boot bootloader.

	  http://www.denx.de/wiki/U-Boot/WebHome

if BR2_PACKAGE_HOST_UBOOT_TOOLS

config BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT
	bool "Flattened Image Tree (FIT) support"
	select BR2_PACKAGE_HOST_DTC
	help
	  Enables support for Flattened Image Tree (FIT).

	  This option allows to boot the new uImage structure,
	  Flattened Image Tree. FIT is formally a FDT, which can include
	  images of various types (kernel, FDT blob, ramdisk, etc.)
	  in a single blob. To boot this new uImage structure,
	  pass the address of the blob to the "bootm" command.

if BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT

config BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT
	bool "FIT signature verification support"
	help
	  Enables support for FIT Signature Verification.

	  Flat Image Trees (FIT) supports hashing of images so that
	  these hashes can be checked on loading. This protects
	  against corruption of the image. However it does not prevent
	  the substitution of one image for another.

	  The signature feature allows the hash to be signed with a
	  private key such that it can be verified using a public key
	  later. Provided that the private key is kept secret and the
	  public key is stored in a non-volatile place, any image can
	  be verified in this way.

endif # BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT

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

	  This option can be useful to build enviornment configurations
	  as part of a Linux / rootfs only defconfig instead of using
	  post scripts. This supports a hardware use case of a single
	  bootloader only defconfig but multiple Linux / rootfs
	  defconfigs with different boot environments.

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

if BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE

config BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SOURCE
	string "Source files for environment"
	default BR2_TARGET_UBOOT_ENVIMAGE_SOURCE if BR2_TARGET_UBOOT_ENVIMAGE_SOURCE != "" # legacy
	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.

	  Leave empty to generate image from compiled-in env if a U-boot
	  target build is configured (BR2_TARGET_UBOOT)

config BR2_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE_SIZE
	string "Size of environment"
	default BR2_TARGET_UBOOT_ENVIMAGE_SIZE if BR2_TARGET_UBOOT_ENVIMAGE_SIZE != "" # legacy
	help
	  Size of envronment, can be prefixed with 0x for hexadecimal
	  values.

config BR2_PACKAGE_HOST_UBOOT_TOOLS_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_PACKAGE_HOST_UBOOT_TOOLS_ENVIMAGE

config BR2_PACKAGE_HOST_UBOOT_TOOLS_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_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT

config BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE
	string "U-Boot boot script source"
	default BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE if BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE != "" # legacy
	help
	  Source file to generate the U-Boot boot script.

endif # BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT

endif # BR2_PACKAGE_HOST_UBOOT_TOOLS
