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

if BR2_TARGET_UBOOT
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.

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

config BR2_TARGET_UBOOT_LATEST_VERSION
	bool "2014.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"

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

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
	  E.G. a sha id, a tag, branch, ..

endif

config BR2_TARGET_UBOOT_VERSION
	string
	default "2014.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

config BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR
	string "custom patch dir"
	help
	  If your board requires custom patches, add the path to the
	  directory containing the patches here. The patches must be
	  named uboot-<something>.patch.

	  Most users may leave this empty

choice
	prompt "U-Boot binary format"
	default BR2_TARGET_UBOOT_FORMAT_BIN

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"

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"

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
	  in BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME.

endchoice

config BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME
	string "U-Boot binary format: custom name"
	depends on BR2_TARGET_UBOOT_FORMAT_CUSTOM
	help
	  Specify the correct name of the output binary created by
	  U-Boot, if it is not one of the default names. For example:
	  u-boot_magic.bin

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

menuconfig BR2_TARGET_UBOOT_NETWORK
	bool "Custom Network Settings"
	depends on BR2_DEPRECATED_SINCE_2014_05
	help
	  Custom network settings for U-boot

if BR2_TARGET_UBOOT_NETWORK

config BR2_TARGET_UBOOT_SERVERIP
	string "server ip"
	default "10.175.196.221"
	help
	  TFTP server ip address

config BR2_TARGET_UBOOT_IPADDR
	string "ip address"
	default "10.175.196.18"
	help
	  Target ip address

config BR2_TARGET_UBOOT_GATEWAY
	string "gateway ip"
	default "10.175.196.1"
	help
	  Gateway ip address

config BR2_TARGET_UBOOT_NETMASK
	string "netmask"
	default "255.255.255.0"
	help
	  Network Mask

config BR2_TARGET_UBOOT_ETHADDR
	string "ethernet address"
	default "04:25:fe:ed:00:18"
	help
	  Target MAC address for the ethernet interface.
	  This should be changed for production units

config BR2_TARGET_UBOOT_ETH1ADDR
	string "ethernet 2 address"
	help
	  Target MAC address for the second ethernet interface.

endif # BR2_TARGET_UBOOT_NETWORK

config BR2_TARGET_UBOOT_SPL
	bool "U-Boot SPL support"
	depends on !BR2_TARGET_XLOADER
	help
	  Enable the U-Boot SPL support. 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 target name"
	default "u-boot-spl.bin"
	depends on BR2_TARGET_UBOOT_SPL
	help
	  This is the name of the SPL binary, generated during
	  u-boot build. For most platform it is u-boot-spl.bin
	  but not always. It is MLO on OMAP for example.

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 file for environment"
	help
	  Text file describing the environment.

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

endif # BR2_TARGET_UBOOT
