config BR2_TARGET_ARM_TRUSTED_FIRMWARE
	bool "ARM Trusted Firmware (ATF)"
	depends on (BR2_ARM_CPU_ARMV8A || BR2_ARM_CPU_ARMV7A)
	help
	  Enable this option if you want to build the ATF for your ARM
	  based embedded device.

	  https://github.com/ARM-software/arm-trusted-firmware

if BR2_TARGET_ARM_TRUSTED_FIRMWARE
choice
	prompt "ATF Version"
	help
	  Select the specific ATF version you want to use

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_VERSION
	bool "v2.11"

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_LTS_2_10_VERSION
	bool "latest lts-v2.10.x"
	help
	  Select the latest LTS v2.10.x version available

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_LTS_2_8_VERSION
	bool "latest lts-v2.8.x"
	help
	  Select the latest LTS v2.8.x version available

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

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL
	bool "Custom tarball"

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT
	bool "Custom Git repository"

endchoice

if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION
	string "URL of custom ATF tarball"

endif

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE
	string "ATF version"
	depends on BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_VERSION
	string
	default "v2.11"		if BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_VERSION
	default "lts-v2.10.5"	if BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_LTS_2_10_VERSION
	default "lts-v2.8.20"	if BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_LTS_2_8_VERSION
	default "custom"	if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL
	default BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION \
				if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT
	default BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE \
				if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION

if BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL
	string "URL of custom repository"

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_VERSION
	string "Custom repository version"
	help
	  Revision to use in the typical format used by Git
	  E.G. a sha id, a tag, ..

endif

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM
	string "ATF platform"
	help
	  Target platform to build for.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_TARGET_BOARD
	string "ATF target board"
	help
	  Target board to build for. In many cases, this can be left
	  empty.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_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 fdts/ before starting the build.

	  To use this device tree source file, the ATF configuration
	  file must refer to it.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP
	bool "Build FIP image"
	help
	  This option enables building the FIP image (Firmware Image
	  Package). This is typically the image format used by
	  platforms were ATF encapsulates the second stage bootloader
	  (such as U-Boot).

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31
	bool "Build BL31 image"
	help
	  This option enables building the BL31 image. This is
	  typically used on platforms where another bootloader (e.g
	  U-Boot) encapsulates ATF BL31.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31_UBOOT
	bool "Build BL31 U-Boot image"
	select BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31
	help
	  Generates a U-Boot image named atf-uboot.ub containing
	  bl31.bin.  This is used for example by the Xilinx version of
	  U-Boot SPL to load ATF on the ZynqMP SoC.

choice
	prompt "BL32"
	default BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_DEFAULT
	help
	  Select BL32 stage for the trusted firmware

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_DEFAULT
	bool "Default"
	help
	  With this option selected, ATF will not use any BL32 stage,
	  unless if one is explicitly chosen using the SPD (for
	  AArch64) or AARCH32_SP (for AArch32) variables, which can be
	  passed through
	  BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_OPTEE
	bool "OP-TEE OS"
	depends on BR2_TARGET_OPTEE_OS
	help
	  This option allows to embed OP-TEE OS as the BL32 part of
	  the ARM Trusted Firmware boot sequence.

endchoice

choice
	prompt "BL33"
	default BR2_TARGET_ARM_TRUSTED_FIRMWARE_NONE_AS_BL33
	help
	  Select the image to include as BL33.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_NONE_AS_BL33
	bool "None"

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BAREBOX_AS_BL33
	bool "Barebox"
	depends on BR2_TARGET_BAREBOX
	help
	  This option allows to embed the Barebox generic BL33 image in
	  the ARM Trusted Firmware. It ensures that the Barebox package
	  gets built before ATF, and that the appropriate BL33
	  variable pointing to the generic bl33 image is passed
	  when building ATF.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33
	bool "U-Boot"
	depends on BR2_TARGET_UBOOT
	help
	  This option allows to embed u-boot.bin as the BL33 part of
	  the ARM Trusted Firmware. It ensures that the u-boot package
	  gets built before ATF, and that the appropriate BL33
	  variable pointing to u-boot.bin is passed when building ATF.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_EDK2_AS_BL33
	bool "EDK2"
	depends on BR2_TARGET_EDK2
	help
	  This option allows to embed EDK2 as the BL33 part of
	  the ARM Trusted Firmware. It ensures that the EDK2 package
	  gets built before ATF, and that the appropriate BL33
	  variable pointing to the EDK2 is passed when building ATF.

	  Do not choose this option if you intend to build ATF and EDK2
	  for the 'qemu_sbsa' platform. In this case, due to the EDK2
	  build system, the dependency between ATF and EDK is reversed.

endchoice

if BR2_TARGET_ARM_TRUSTED_FIRMWARE_BAREBOX_AS_BL33

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_BAREBOX_BL33_IMAGE
	string "Barebox BL33 image name"
	default "*-generic-bl33.img"
	help
	  Name of the Barebox BL33 image to include in ATF, it must
	  have been installed to BINARIES_DIR by the Barebox package.

endif

if BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_BL33_IMAGE
	string "U-Boot BL33 image name"
	default "u-boot.bin"
	help
	  Name of the U-Boot BL33 image to include in ATF, it must
	  have been installed to BINARIES_DIR by the U-Boot package.

endif

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_RCW
	bool "Include NXP RCW in BL2"
	depends on BR2_PACKAGE_HOST_QORIQ_RCW
	help
	  Include the NXP RCW (Reset Control Word) in BL2. See
	  package/qoriq-rcw/ for more details. This is mostly useful
	  on NXP LayerScape platforms.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_TARGETS
	string "Additional ATF make targets"
	help
	  Additional targets for the ATF build
	  E.G. When using the QorIQ custom ATF repository from NXP,
	  the target 'pbl' can be used to build the pbl binary.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES
	string "Additional ATF build variables"
	help
	  Additional parameters for the ATF build
	  E.G. 'DEBUG=1 LOG_LEVEL=20'

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_DEBUG
	bool "Build in debug mode"
	help
	  Enable this option to build ATF with DEBUG=1.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES
	string "Binary boot images"
	default "*.bin"
	help
	  Names of generated image files that are installed in the
	  output images/ directory.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_DTC
	bool "Needs dtc"
	select BR2_PACKAGE_HOST_DTC
	help
	  Select this option if your ATF board configuration
	  requires the Device Tree compiler to be available.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN
	bool "Needs arm-none-eabi toolchain"
	depends on BR2_aarch64
	depends on BR2_HOSTARCH = "x86_64"
	help
	  Select this option if your ATF board configuration requires
	  an ARM32 bare metal toolchain to be available.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_SSP
	bool "Build with SSP"
	depends on BR2_TOOLCHAIN_HAS_SSP
	depends on !BR2_SSP_NONE
	help
	  Say 'y' here if you want to build ATF with SSP.

	  Your board must have SSP support in ATF: it must have an
	  implementation for plat_get_stack_protector_canary().

	  If you say 'y', the SSP level will be the level selected
	  by the global SSP setting.

config BR2_TARGET_ARM_TRUSTED_FIRMWARE_SSP_LEVEL
	string
	default "default" if BR2_SSP_REGULAR
	default "strong"  if BR2_SSP_STRONG
	default "all"     if BR2_SSP_ALL

endif
