menu "SPL / TPL"

config SUPPORT_SPL
	bool

config SUPPORT_TPL
	bool

config SPL_DFU_NO_RESET
	bool

config SPL
	bool
	depends on SUPPORT_SPL
	prompt "Enable SPL"
	help
	  If you want to build SPL as well as the normal image, say Y.

config SPL_FRAMEWORK
	bool "Support SPL based upon the common SPL framework"
	depends on SPL
	default y
	help
	  Enable the SPL framework under common/spl/.  This framework
	  supports MMC, NAND and YMODEM and other methods loading of U-Boot
	  and the Linux Kernel.  If unsure, say Y.

config SPL_FRAMEWORK_BOARD_INIT_F
	bool "Define a generic function board_init_f"
	depends on SPL_FRAMEWORK
	help
	  Define a generic function board_init_f that:
	  - initialize the spl (spl_early_init)
	  - initialize the serial (preloader_console_init)
	  Unless you want to provide your own board_init_f, you should say Y.

config SPL_SIZE_LIMIT
	hex "Maximum size of SPL image"
	depends on SPL
	default 0x11000 if ARCH_MX6 && !MX6_OCRAM_256KB
	default 0x31000 if ARCH_MX6 && MX6_OCRAM_256KB
	default 0x0
	help
	  Specifies the maximum length of the U-Boot SPL image.
	  If this value is zero, it is ignored.

config SPL_SIZE_LIMIT_SUBTRACT_GD
	bool "SPL image size check: provide space for global data"
	depends on SPL_SIZE_LIMIT > 0
	help
	  If enabled, aligned size of global data is reserved in
	  SPL_SIZE_LIMIT check to ensure such an image does not overflow SRAM
	  if SPL_SIZE_LIMIT describes the size of SRAM available for SPL when
	  pre-reloc global data is put into this SRAM, too.

config SPL_SIZE_LIMIT_SUBTRACT_MALLOC
	bool "SPL image size check: provide space for malloc() pool before relocation"
	depends on SPL_SIZE_LIMIT > 0
	help
	  If enabled, SPL_SYS_MALLOC_F_LEN is reserved in SPL_SIZE_LIMIT check
	  to ensure such an image does not overflow SRAM if SPL_SIZE_LIMIT
	  describes the size of SRAM available for SPL when pre-reloc malloc
	  pool is put into this SRAM, too.

config SPL_SIZE_LIMIT_PROVIDE_STACK
	hex "SPL image size check: provide stack space before relocation"
	depends on SPL_SIZE_LIMIT > 0
	default 0
	help
	  If set, this size is reserved in SPL_SIZE_LIMIT check to ensure such
	  an image does not overflow SRAM if SPL_SIZE_LIMIT describes the size
	  of SRAM available for SPL when the stack required before reolcation
	  uses this SRAM, too.

config SPL_SYS_STACK_F_CHECK_BYTE
	hex
	default 0xaa
	help
	  Constant used to check the stack

config SPL_SYS_REPORT_STACK_F_USAGE
	depends on SPL_SIZE_LIMIT_PROVIDE_STACK != 0
	bool "Check and report stack usage in SPL before relocation"
	help
	  If this option is enabled, the initial SPL stack is filled with 0xaa
	  very early, up to the size configured with
	  SPL_SIZE_LIMIT_PROVIDE_STACK.
	  Later when SPL is done using this initial stack and switches to a
	  stack in DRAM, the actually used size of this initial stack is
	  reported by examining the memory and searching for the lowest
	  occurrence of non 0xaa bytes.
	  This default implementation works for stacks growing down only.

config SPL_SHOW_ERRORS
	bool "Show more information when something goes wrong"
	help
	  This enabled more verbose error messages and checking when something
	  goes wrong in SPL. For example, it shows the error code when U-Boot
	  cannot be located. This can help to diagnose the problem and figure
	  out a fix, particularly during development.

	  This adds a small amount to SPL code size, perhaps 100 bytes.

menu "PowerPC and LayerScape SPL Boot options"

config SPL_NAND_BOOT
	bool "Load SPL from NAND flash"
	depends on PPC && (SUPPORT_SPL && !SPL_FRAMEWORK)

config SPL_MMC_BOOT
	bool "Load SPL from SD Card / eMMC"
	depends on PPC && (SUPPORT_SPL && !SPL_FRAMEWORK)

config SPL_SPI_BOOT
	bool "Load SPL from SPI flash"
	depends on PPC && (SUPPORT_SPL && !SPL_FRAMEWORK)

config SPL_FSL_PBL
	bool "Create SPL in Freescale PBI format"
	depends on (PPC || ARCH_LS1021A || ARCH_LS1043A || ARCH_LS1046A) && \
		    SUPPORT_SPL
	help
	  Create boot binary having SPL binary in PBI format concatenated with
	  u-boot binary.

endmenu

config HANDOFF
	bool "Pass hand-off information from SPL to U-Boot proper"
	depends on SPL && BLOBLIST
	help
	  It is useful to be able to pass information from SPL to U-Boot
	  proper to preserve state that is known in SPL and is needed in U-Boot.
	  Enable this to locate the handoff information in U-Boot proper, early
	  in boot. It is available in gd->handoff. The state state is set up
	  in SPL (or TPL if that is being used).

if SPL

config SPL_HANDOFF
	bool "Pass hand-off information from SPL to U-Boot proper"
	depends on HANDOFF && SPL_BLOBLIST
	default y
	help
	  This option enables SPL to write handoff information. This can be
	  used to pass information like the size of SDRAM from SPL to U-Boot
	  proper. Also SPL can receive information from TPL in the same place
	  if that is enabled.

config SPL_LDSCRIPT
	string "Linker script for the SPL stage"
	default "arch/\$(ARCH)/cpu/u-boot-spl.lds"
	help
	  The SPL stage will usually require a different linker-script
	  (as it runs from a different memory region) than the regular
	  U-Boot stage.	 Set this to the path of the linker-script to
	  be used for SPL.

config SPL_TEXT_BASE
	hex "SPL Text Base"
	default ISW_ENTRY_ADDR if AM43XX || AM33XX || OMAP54XX || ARCH_KEYSTONE
	default 0x10060 if MACH_SUN50I || MACH_SUN50I_H5 || MACH_SUN9I
	default 0x20060 if SUN50I_GEN_H6
	default 0x00060 if ARCH_SUNXI
	default 0xfffc0000 if ARCH_ZYNQMP
	default 0x0
	help
	  The address in memory that SPL will be running from.

config SPL_BOARD_INIT
	bool "Call board-specific initialization in SPL"
	help
	  If this option is enabled, U-Boot will call the function
	  spl_board_init() from board_init_r(). This function should be
	  provided by the board.

config SPL_BOOTROM_SUPPORT
	bool "Support returning to the BOOTROM"
	help
	  Some platforms (e.g. the Rockchip RK3368) provide support in their
	  ROM for loading the next boot-stage after performing basic setup
	  from the SPL stage.

	  Enable this option, to return to the BOOTROM through the
	  BOOT_DEVICE_BOOTROM (or fall-through to the next boot device in the
	  boot device list, if not implemented for a given board)

config SPL_BOOTCOUNT_LIMIT
	bool "Support bootcount in SPL"
	depends on SPL_ENV_SUPPORT && !TPL_BOOTCOUNT_LIMIT
	help
	  On some boards, which use 'falcon' mode, it is necessary to check
	  and increment the number of boot attempts. Such boards do not
	  use proper U-Boot for normal boot flow and hence needs those
	  adjustments to be done in the SPL.

config SPL_RAW_IMAGE_SUPPORT
	bool "Support SPL loading and booting of RAW images"
	default n if (ARCH_MX6 && (SPL_MMC_SUPPORT || SPL_SATA_SUPPORT))
	default y if !TI_SECURE_DEVICE
	help
	  SPL will support loading and booting a RAW image when this option
	  is y. If this is not set, SPL will move on to other available
	  boot media to find a suitable image.

config SPL_LEGACY_IMAGE_SUPPORT
	bool "Support SPL loading and booting of Legacy images"
	default y if !TI_SECURE_DEVICE && !SPL_LOAD_FIT
	help
	  SPL will support loading and booting Legacy images when this option
	  is y. If this is not set, SPL will move on to other available
	  boot media to find a suitable image.

config SPL_LEGACY_IMAGE_CRC_CHECK
	bool "Check CRC of Legacy images"
	depends on SPL_LEGACY_IMAGE_SUPPORT
	select SPL_CRC32
	help
	  Enable this to check the CRC of Legacy images. While this increases
	  reliability, it affects both code size and boot duration.
	  If disabled, Legacy images are booted if the image magic and size
	  are correct, without further integrity checks.

config SPL_SYS_MALLOC_SIMPLE
	bool
	prompt "Only use malloc_simple functions in the SPL"
	help
	  Say Y here to only use the *_simple malloc functions from
	  malloc_simple.c, rather then using the versions from dlmalloc.c;
	  this will make the SPL binary smaller at the cost of more heap
	  usage as the *_simple malloc functions do not re-use free-ed mem.

config TPL_SYS_MALLOC_SIMPLE
	bool
	prompt "Only use malloc_simple functions in the TPL"
	depends on TPL
	help
	  Say Y here to only use the *_simple malloc functions from
	  malloc_simple.c, rather then using the versions from dlmalloc.c;
	  this will make the TPL binary smaller at the cost of more heap
	  usage as the *_simple malloc functions do not re-use free-ed mem.

config SPL_STACK_R
	bool "Enable SDRAM location for SPL stack"
	help
	  SPL starts off execution in SRAM and thus typically has only a small
	  stack available. Since SPL sets up DRAM while in its board_init_f()
	  function, it is possible for the stack to move there before
	  board_init_r() is reached. This option enables a special SDRAM
	  location for the SPL stack. U-Boot SPL switches to this after
	  board_init_f() completes, and before board_init_r() starts.

config SPL_STACK_R_ADDR
	depends on SPL_STACK_R
	hex "SDRAM location for SPL stack"
	default 0x82000000 if ARCH_OMAP2PLUS
	help
	  Specify the address in SDRAM for the SPL stack. This will be set up
	  before board_init_r() is called.

config SPL_STACK_R_MALLOC_SIMPLE_LEN
	depends on SPL_STACK_R && SPL_SYS_MALLOC_SIMPLE
	hex "Size of malloc_simple heap after switching to DRAM SPL stack"
	default 0x100000
	help
	  Specify the amount of the stack to use as memory pool for
	  malloc_simple after switching the stack to DRAM. This may be set
	  to give board_init_r() a larger heap then the initial heap in
	  SRAM which is limited to SYS_MALLOC_F_LEN bytes.

config SPL_SEPARATE_BSS
	bool "BSS section is in a different memory region from text"
	help
	  Some platforms need a large BSS region in SPL and can provide this
	  because RAM is already set up. In this case BSS can be moved to RAM.
	  This option should then be enabled so that the correct device tree
	  location is used. Normally we put the device tree at the end of BSS
	  but with this option enabled, it goes at _image_binary_end.

config SPL_READ_ONLY
	bool
	depends on SPL_OF_PLATDATA
	# Bind cannot be supported because the udevice structs are in read-only
	# memory so we cannot update the linked lists.
	select SPL_OF_PLATDATA_NO_BIND
	select SPL_OF_PLATDATA_RT
	help
	  Some platforms (e.g. x86 Apollo Lake) load SPL into a read-only
	  section of memory. This means that of-platdata must make a copy (in
	  writeable memory) of anything it wants to modify, such as
	  device-private data.

config SPL_BANNER_PRINT
	bool "Enable output of the SPL banner 'U-Boot SPL ...'"
	default y
	help
	  If this option is enabled, SPL will print the banner with version
	  info. Disabling this option could be useful to reduce SPL boot time
	  (e.g. approx. 6 ms faster, when output on i.MX6 with 115200 baud).

config TPL_BANNER_PRINT
	bool "Enable output of the TPL banner 'U-Boot TPL ...'"
	depends on TPL
	default y
	help
	  If this option is enabled, TPL will print the banner with version
	  info. Disabling this option could be useful to reduce TPL boot time
	  (e.g. approx. 6 ms faster, when output on i.MX6 with 115200 baud).

config SPL_EARLY_BSS
	depends on ARM && !ARM64
	bool "Allows initializing BSS early before entering board_init_f"
	help
	  On some platform we have sufficient memory available early on to
	  allow setting up and using a basic BSS prior to entering
	  board_init_f. Activating this option will also de-activate the
	  clearing of BSS during the SPL relocation process, thus allowing
	  to carry state from board_init_f to board_init_r by way of BSS.

config SPL_DISPLAY_PRINT
	bool "Display a board-specific message in SPL"
	help
	  If this option is enabled, U-Boot will call the function
	  spl_display_print() immediately after displaying the SPL console
	  banner ("U-Boot SPL ..."). This function should be provided by
	  the board.

config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
	bool "MMC raw mode: by sector"
	default y if ARCH_SUNXI || ARCH_DAVINCI || ARCH_UNIPHIER || \
		     ARCH_MX6 || ARCH_MX7 || \
		     ARCH_ROCKCHIP || ARCH_MVEBU ||  ARCH_SOCFPGA || \
		     ARCH_AT91 || ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || \
		     OMAP44XX || OMAP54XX || AM33XX || AM43XX || \
		     TARGET_SIFIVE_UNLEASHED || TARGET_SIFIVE_UNMATCHED
	help
	  Use sector number for specifying U-Boot location on MMC/SD in
	  raw mode.

config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
	hex "Address on the MMC to load U-Boot from"
	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
	default 0x40 if ARCH_SUNXI
	default 0x75 if ARCH_DAVINCI
	default 0x8a if ARCH_MX6 || ARCH_MX7
	default 0x100 if ARCH_UNIPHIER
	default 0x140 if ARCH_MVEBU
	default 0x200 if ARCH_SOCFPGA || ARCH_AT91
	default 0x300 if ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || OMAP44XX || \
		         OMAP54XX || AM33XX || AM43XX || ARCH_K3
	default 0x4000 if ARCH_ROCKCHIP
	default 0x822 if TARGET_SIFIVE_UNLEASHED || TARGET_SIFIVE_UNMATCHED
	help
	  Address on the MMC to load U-Boot from, when the MMC is being used
	  in raw mode. Units: MMC sectors (1 sector = 512 bytes).

config SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET
	hex "U-Boot main hardware partition image offset"
	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
	default 0x10 if ARCH_SUNXI
	default 0x0
	help
	  On some platforms SPL location depends on hardware partition. The ROM
	  code skips the MBR sector when loading SPL from main hardware data
	  partition. This adds offset to the main U-Boot image. Set this symbol
	  to the number of skipped sectors.

	  If unsure, leave the default.

config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
	bool "MMC Raw mode: by partition"
	help
	  Use a partition for loading U-Boot when using MMC/SD in raw mode.

config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
	hex "Partition to use to load U-Boot from"
	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
	default 1
	help
	  Partition on the MMC to load U-Boot from when the MMC is being
	  used in raw mode

config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
	bool "MMC raw mode: by partition type"
	depends on DOS_PARTITION && SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
	help
	  Use partition type for specifying U-Boot partition on MMC/SD in
	  raw mode. U-Boot will be loaded from the first partition of this
	  type to be found.

config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE
	hex "Partition Type on the MMC to load U-Boot from"
	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
	help
	  Partition Type on the MMC to load U-Boot from, when the MMC is being
	  used in raw mode.

config SUPPORT_EMMC_BOOT_OVERRIDE_PART_CONFIG
	bool "Override eMMC EXT_CSC_PART_CONFIG by user defined partition"
	depends on SUPPORT_EMMC_BOOT
	help
	  eMMC boot partition is normally configured by the bits of the EXT_CSD
	  register (EXT_CSC_PART_CONFIG), BOOT_PARTITION_ENABLE field. In some
	  cases it might be required in SPL to load the image from different
	  partition than the partition selected by EXT_CSC_PART_CONFIG register.
	  Enable this option if you intend to use an eMMC boot partition other
	  then selected via EXT_CSC_PART_CONFIG register and specify the custom
	  partition number by the CONFIG_SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION
	  option.

config SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION
	int "Number of the eMMC boot partition to use"
	depends on SUPPORT_EMMC_BOOT_OVERRIDE_PART_CONFIG
	default 1
	help
	  eMMC boot partition number to use when the eMMC in raw mode and
	  the eMMC EXT_CSC_PART_CONFIG selection should be overridden in SPL
	  by user defined partition number.

config SPL_CRC32
	bool "Support CRC32"
	default y if SPL_LEGACY_IMAGE_SUPPORT
	help
	  Enable this to support CRC32 in uImages or FIT images within SPL.
	  This is a 32-bit checksum value that can be used to verify images.
	  For FIT images, this is the least secure type of checksum, suitable
	  for detected accidental image corruption. For secure applications you
	  should consider SHA1 or SHA256.

config SPL_MD5
	bool "Support MD5"
	depends on SPL_FIT
	help
	  Enable this to support MD5 in FIT images within SPL. An MD5
	  checksum is a 128-bit hash value used to check that the image
	  contents have not been corrupted. Note that MD5 is not considered
	  secure as it is possible (with a brute-force attack) to adjust the
	  image while still retaining the same MD5 hash value. For secure
	  applications where images may be changed maliciously, you should
	  consider SHA256 or SHA384.

config SPL_FIT_SHA1
	bool "Support SHA1"
	depends on SPL_FIT
	select SHA1
	help
	  Enable this to support SHA1 in FIT images within SPL. A SHA1
	  checksum is a 160-bit (20-byte) hash value used to check that the
	  image contents have not been corrupted or maliciously altered.
	  While SHA1 is fairly secure it is coming to the end of its life
	  due to the expanding computing power available to brute-force
	  attacks. For more security, consider SHA256 or SHA384.

config SPL_FIT_SHA256
	bool "Support SHA256"
	depends on SPL_FIT
	select SHA256
	help
	  Enable this to support SHA256 in FIT images within SPL. A SHA256
	  checksum is a 256-bit (32-byte) hash value used to check that the
	  image contents have not been corrupted.

config SPL_FIT_SHA384
	bool "Support SHA384"
	depends on SPL_FIT
	select SHA384
	select SHA512_ALGO
	help
	  Enable this to support SHA384 in FIT images within SPL. A SHA384
	  checksum is a 384-bit (48-byte) hash value used to check that the
	  image contents have not been corrupted. Use this for the highest
	  security.

config SPL_FIT_SHA512
	bool "Support SHA512"
	depends on SPL_FIT
	select SHA512
	select SHA512_ALGO
	help
	  Enable this to support SHA512 in FIT images within SPL. A SHA512
	  checksum is a 512-bit (64-byte) hash value used to check that the
	  image contents have not been corrupted.

config SPL_FIT_IMAGE_TINY
	bool "Remove functionality from SPL FIT loading to reduce size"
	depends on SPL_FIT
	default y if MACH_SUN50I || MACH_SUN50I_H5 || SUN50I_GEN_H6
	default y if ARCH_IMX8M
	help
	  Enable this to reduce the size of the FIT image loading code
	  in SPL, if space for the SPL binary is very tight.

	  This skips the recording of each loaded payload
	  (i.e. loadable) into the FDT (modifying the loaded FDT to
	  ensure this information is available to the next image
	  invoked).

config SPL_CACHE_SUPPORT
	bool "Support CACHE drivers"
	help
	  Enable CACHE drivers in SPL. These drivers can keep data so that
	  future requests for that data can be served faster. Enable this option
	  to build the drivers in drivers/cache as part of an SPL build.

config SPL_CPU
	bool "Support CPU drivers"
	help
	  Enable this to support CPU drivers in SPL. These drivers can set
	  up CPUs and provide information about them such as the model and
	  name. This can be useful in SPL since setting up the CPUs earlier
	  may improve boot performance. Enable this option to build the
	  drivers in drivers/cpu as part of an SPL build.

config SPL_CRYPTO
	bool "Support crypto drivers"
	help
	  Enable crypto drivers in SPL. These drivers can be used to
	  accelerate secure boot processing in secure applications. Enable
	  this option to build the drivers in drivers/crypto as part of an
	  SPL build.

config SPL_HASH_SUPPORT
	bool "Support hashing drivers"
	select SHA1
	select SHA256
	help
	  Enable hashing drivers in SPL. These drivers can be used to
	  accelerate secure boot processing in secure applications. Enable
	  this option to build system-specific drivers for hash acceleration
	  as part of an SPL build.

config TPL_HASH_SUPPORT
	bool "Support hashing drivers in TPL"
	depends on TPL
	select SHA1
	select SHA256
	help
	  Enable hashing drivers in SPL. These drivers can be used to
	  accelerate secure boot processing in secure applications. Enable
	  this option to build system-specific drivers for hash acceleration
	  as part of an SPL build.

config SPL_DMA
	bool "Support DMA drivers"
	help
	  Enable DMA (direct-memory-access) drivers in SPL. These drivers
	  can be used to handle memory-to-peripheral data transfer without
	  the CPU moving the data. Enable this option to build the drivers
	  in drivers/dma as part of an SPL build.

config SPL_DRIVERS_MISC_SUPPORT
	bool "Support misc drivers"
	help
	  Enable miscellaneous drivers in SPL. These drivers perform various
	  tasks that don't fall nicely into other categories, Enable this
	  option to build the drivers in drivers/misc as part of an SPL
	  build, for those that support building in SPL (not all drivers do).

config SPL_ENV_SUPPORT
	bool "Support an environment"
	help
	  Enable environment support in SPL. The U-Boot environment provides
	  a number of settings (essentially name/value pairs) which can
	  control many aspects of U-Boot's operation. Normally this is not
	  needed in SPL as it has a much simpler task with less
	  configuration. But some boards use this to support 'Falcon' boot
	  on EXT2 and FAT, where SPL boots directly into Linux without
	  starting U-Boot first. Enabling this option will make env_get()
	  and env_set() available in SPL.

config SPL_SAVEENV
	bool "Support save environment"
	depends on SPL_ENV_SUPPORT
	select SPL_MMC_WRITE if ENV_IS_IN_MMC
	help
	  Enable save environment support in SPL after setenv. By default
	  the saveenv option is not provided in SPL, but some boards need
	  this support in 'Falcon' boot, where SPL need to boot from
	  different images based on environment variable set by OS. For
	  example OS may set "reboot_image" environment variable to
	  "recovery" inorder to boot recovery image by SPL. The SPL read
	  "reboot_image" and act accordingly and change the reboot_image
	  to default mode using setenv and save the environment.

config SPL_ETH
	bool "Support Ethernet"
	depends on SPL_ENV_SUPPORT
	help
	  Enable access to the network subsystem and associated Ethernet
	  drivers in SPL. This permits SPL to load U-Boot over an Ethernet
	  link rather than from an on-board peripheral. Environment support
	  is required since the network stack uses a number of environment
	  variables. See also SPL_NET_SUPPORT.

config SPL_FS_EXT4
	bool "Support EXT filesystems"
	help
	  Enable support for EXT2/3/4 filesystems with SPL. This permits
	  U-Boot (or Linux in Falcon mode) to be loaded from an EXT
	  filesystem from within SPL. Support for the underlying block
	  device (e.g. MMC or USB) must be enabled separately.

config SPL_FS_SQUASHFS
	bool "Support SquashFS filesystems"
	select FS_SQUASHFS
	help
	  Enable support for SquashFS filesystems with SPL. This permits
	  U-Boot (or Linux in Falcon mode) to be loaded from a SquashFS
	  filesystem from within SPL. Support for the underlying block
	  device (e.g. MMC or USB) must be enabled separately.

config SPL_FS_FAT
	bool "Support FAT filesystems"
	select FS_FAT
	help
	  Enable support for FAT and VFAT filesystems with SPL. This
	  permits U-Boot (or Linux in Falcon mode) to be loaded from a FAT
	  filesystem from within SPL. Support for the underlying block
	  device (e.g. MMC or USB) must be enabled separately.

config SPL_FAT_WRITE
	bool "Support write for FAT filesystems"
	help
	  Enable write support for FAT and VFAT filesystems with SPL.
	  Support for the underlying block device (e.g. MMC or USB) must be
	  enabled separately.

config SPL_FPGA
	bool "Support FPGAs"
	help
	  Enable support for FPGAs in SPL. Field-programmable Gate Arrays
	  provide software-configurable hardware which is typically used to
	  implement peripherals (such as UARTs, LCD displays, MMC) or
	  accelerate custom processing functions, such as image processing
	  or machine learning. Sometimes it is useful to program the FPGA
	  as early as possible during boot, and this option can enable that
	  within SPL.

config SPL_GPIO_SUPPORT
	bool "Support GPIO in SPL"
	help
	  Enable support for GPIOs (General-purpose Input/Output) in SPL.
	  GPIOs allow U-Boot to read the state of an input line (high or
	  low) and set the state of an output line. This can be used to
	  drive LEDs, control power to various system parts and read user
	  input. GPIOs can be useful in SPL to enable a 'sign-of-life' LED,
	  for example. Enable this option to build the drivers in
	  drivers/gpio as part of an SPL build.

config SPL_I2C_SUPPORT
	bool "Support I2C"
	help
	  Enable support for the I2C (Inter-Integrated Circuit) bus in SPL.
	  I2C works with a clock and data line which can be driven by a
	  one or more masters or slaves. It is a fairly complex bus but is
	  widely used as it only needs two lines for communication. Speeds of
	  400kbps are typical but up to 3.4Mbps is supported by some
	  hardware. I2C can be useful in SPL to configure power management
	  ICs (PMICs) before raising the CPU clock speed, for example.
	  Enable this option to build the drivers in drivers/i2c as part of
	  an SPL build.

config SPL_LIBCOMMON_SUPPORT
	bool "Support common libraries"
	help
	  Enable support for common U-Boot libraries within SPL. These
	  libraries include common code to deal with U-Boot images,
	  environment and USB, for example. This option is enabled on many
	  boards. Enable this option to build the code in common/ as part of
	  an SPL build.

config SPL_LIBDISK_SUPPORT
	bool "Support disk partitions"
	select PARTITIONS
	help
	  Enable support for disk partitions within SPL. 'Disk' is something
	  of a misnomer as it includes non-spinning media such as flash (as
	  used in MMC and USB sticks). Partitions provide a way for a disk
	  to be split up into separate regions, with a partition table placed
	  at the start or end which describes the location and size of each
	  'partition'. These partitions are typically uses as individual block
	  devices, typically with an EXT2 or FAT filesystem in each. This
	  option enables whatever partition support has been enabled in
	  U-Boot to also be used in SPL. It brings in the code in disk/.

config SPL_LIBGENERIC_SUPPORT
	bool "Support generic libraries"
	help
	  Enable support for generic U-Boot libraries within SPL. These
	  libraries include generic code to deal with device tree, hashing,
	  printf(), compression and the like. This option is enabled on many
	  boards. Enable this option to build the code in lib/ as part of an
	  SPL build.

config SPL_DM_MAILBOX
	bool "Support Mailbox"
	help
	  Enable support for Mailbox within SPL. This enable the inter
	  processor communication protocols tobe used within SPL. Enable
	  this option to build the drivers in drivers/mailbox as part of
	  SPL build.

config SPL_MMC_SUPPORT
	bool "Support MMC"
	depends on MMC
	select HAVE_BLOCK_DEVICE
	help
	  Enable support for MMC (Multimedia Card) within SPL. This enables
	  the MMC protocol implementation and allows any enabled drivers to
	  be used within SPL. MMC can be used with or without disk partition
	  support depending on the application (SPL_LIBDISK_SUPPORT). Enable
	  this option to build the drivers in drivers/mmc as part of an SPL
	  build.

config SYS_MMCSD_FS_BOOT_PARTITION
	int "MMC Boot Partition"
	default 1
	help
	  Partition on the MMC to load U-Boot from when the MMC is being
	  used in fs mode

config SPL_MMC_TINY
	bool "Tiny MMC framework in SPL"
	depends on SPL_MMC_SUPPORT
	default n
	help
	  Enable MMC framework tinification support. This option is useful if
	  if your SPL is extremely size constrained. Heed the warning, enable
	  this option if and only if you know exactly what you are doing, if
	  you are reading this help text, you most likely have no idea :-)

	  The MMC framework is reduced to bare minimum to be useful. No malloc
	  support is needed for the MMC framework operation with this option
	  enabled. The framework supports exactly one MMC device and exactly
	  one MMC driver. The MMC driver can be adjusted to avoid any malloc
	  operations too, which can remove the need for malloc support in SPL
	  and thus further reduce footprint.

config SPL_MMC_WRITE
	bool "MMC/SD/SDIO card support for write operations in SPL"
	depends on SPL_MMC_SUPPORT
	default n
	help
	  Enable write access to MMC and SD Cards in SPL


config SPL_MPC8XXX_INIT_DDR_SUPPORT
	bool "Support MPC8XXX DDR init"
	help
	  Enable support for DDR-SDRAM (double-data-rate synchronous dynamic
	  random-access memory) on the MPC8XXX family within SPL. This
	  allows DRAM to be set up before loading U-Boot into that DRAM,
	  where it can run.

config SPL_MTD_SUPPORT
	bool "Support MTD drivers"
	help
	  Enable support for MTD (Memory Technology Device) within SPL. MTD
	  provides a block interface over raw NAND and can also be used with
	  SPI flash. This allows SPL to load U-Boot from supported MTD
	  devices. See SPL_NAND_SUPPORT and SPL_ONENAND_SUPPORT for how
	  to enable specific MTD drivers.

config SPL_MUSB_NEW_SUPPORT
	bool "Support new Mentor Graphics USB"
	help
	  Enable support for Mentor Graphics USB in SPL. This is a new
	  driver used by some boards. Enable this option to build
	  the drivers in drivers/usb/musb-new as part of an SPL build. The
	  old drivers are in drivers/usb/musb.

config SPL_NAND_SUPPORT
	bool "Support NAND flash"
	help
	  Enable support for NAND (Negative AND) flash in SPL. NAND flash
	  can be used to allow SPL to load U-Boot from supported devices.
	  This enables the drivers in drivers/mtd/nand/raw as part of an SPL
	  build.

config SPL_NAND_DRIVERS
	bool "Use standard NAND driver"
	help
	  SPL uses normal NAND drivers, not minimal drivers.

config SPL_NAND_ECC
	bool "Include standard software ECC in the SPL"

config SPL_NAND_SIMPLE
	bool "Support simple NAND drivers in SPL"
	help
	  Support for NAND boot using simple NAND drivers that
	  expose the cmd_ctrl() interface.

config SPL_NAND_BASE
	depends on SPL_NAND_DRIVERS
	bool "Use Base NAND Driver"
	help
	  Include nand_base.c in the SPL.

config SPL_NAND_IDENT
	depends on SPL_NAND_BASE
	bool "Use chip ID to identify NAND flash"
	help
	  SPL uses the chip ID list to identify the NAND flash.

config SPL_UBI
	bool "Support UBI"
	help
	  Enable support for loading payloads from UBI. See
	  README.ubispl for more info.

if SPL_DM
config SPL_CACHE
	depends on CACHE
	bool "Support cache drivers in SPL"
	help
	  Enable support for cache drivers in SPL.

config SPL_DM_SPI
	bool "Support SPI DM drivers in SPL"
	help
	  Enable support for SPI DM drivers in SPL.

config SPL_DM_SPI_FLASH
	bool "Support SPI DM FLASH drivers in SPL"
	help
	  Enable support for SPI DM flash drivers in SPL.

endif
if SPL_UBI
config SPL_UBI_LOAD_BY_VOLNAME
	bool "Support loading volumes by name"
	help
	  This enables support for loading UBI volumes by name. When this
	  is set, CONFIG_SPL_UBI_LOAD_MONITOR_VOLNAME can be used to
	  configure the volume name from which to load U-Boot.

config SPL_UBI_MAX_VOL_LEBS
	int "Maximum number of LEBs per volume"
	depends on SPL_UBI
	help
	  The maximum number of logical eraseblocks which a static volume
	  to load can contain. Used for sizing the scan data structure.

config SPL_UBI_MAX_PEB_SIZE
	int "Maximum PEB size"
	depends on SPL_UBI
	help
	  The maximum physical erase block size.

config SPL_UBI_MAX_PEBS
	int "Maximum number of PEBs"
	depends on SPL_UBI
	help
	  The maximum physical erase block size. If not overridden by
	  board code, this value will be used as the actual number of PEBs.

config SPL_UBI_PEB_OFFSET
	int "Offset to first UBI PEB"
	depends on SPL_UBI
	help
	  The offset in number of PEBs from the start of flash to the first
	  PEB part of the UBI image.

config SPL_UBI_VID_OFFSET
	int "Offset to VID header"
	depends on SPL_UBI

config SPL_UBI_LEB_START
	int "Offset to LEB in PEB"
	depends on SPL_UBI
	help
	  The offset in bytes to the LEB within a PEB.

config SPL_UBI_INFO_ADDR
	hex "Address to place UBI scan info"
	depends on SPL_UBI
	help
	  Address for ubispl to place the scan info. Read README.ubispl to
	  determine the required size

config SPL_UBI_VOL_IDS
	int "Maximum volume id"
	depends on SPL_UBI
	help
	  The maximum volume id which can be loaded. Used for sizing the
	  scan data structure.

config SPL_UBI_LOAD_MONITOR_ID
	int "id of U-Boot volume"
	depends on SPL_UBI
	help
	  The UBI volume id from which to load U-Boot

config SPL_UBI_LOAD_MONITOR_VOLNAME
	string "volume name of U-Boot volume"
	depends on SPL_UBI_LOAD_BY_VOLNAME
	help
	  The UBI volume name from which to load U-Boot

config SPL_UBI_LOAD_KERNEL_ID
	int "id of kernel volume"
	depends on SPL_OS_BOOT && SPL_UBI
	help
	  The UBI volume id from which to load the kernel

config SPL_UBI_LOAD_ARGS_ID
	int "id of kernel args volume"
	depends on SPL_OS_BOOT && SPL_UBI
	help
	  The UBI volume id from which to load the device tree

config UBI_SPL_SILENCE_MSG
	bool "silence UBI SPL messages"
	default n
	help
	  Disable messages from UBI SPL. This leaves warnings
	  and errors enabled.

endif   # if SPL_UBI

config SPL_NET_SUPPORT
	bool "Support networking"
	help
	  Enable support for network devices (such as Ethernet) in SPL.
	  This permits SPL to load U-Boot over a network link rather than
	  from an on-board peripheral. Environment support is required since
	  the network stack uses a number of environment variables. See also
	  SPL_ETH.

if SPL_NET_SUPPORT
config SPL_NET_VCI_STRING
	string "BOOTP Vendor Class Identifier string sent by SPL"
	help
	  As defined by RFC 2132 the vendor class identifier field can be
	  sent by the client to identify the vendor type and configuration
	  of a client.  This is often used in practice to allow for the DHCP
	  server to specify different files to load depending on if the ROM,
	  SPL or U-Boot itself makes the request
endif   # if SPL_NET_SUPPORT

config SPL_NO_CPU_SUPPORT
	bool "Drop CPU code in SPL"
	help
	  This is specific to the ARM926EJ-S CPU. It disables the standard
	  start.S start-up code, presumably so that a replacement can be
	  used on that CPU. You should not enable it unless you know what
	  you are doing.

config SPL_NOR_SUPPORT
	bool "Support NOR flash"
	help
	  Enable support for loading U-Boot from memory-mapped NOR (Negative
	  OR) flash in SPL. NOR flash is slow to write but fast to read, and
	  a memory-mapped device makes it very easy to access. Loading from
	  NOR is typically achieved with just a memcpy().

config SPL_XIP_SUPPORT
	bool "Support XIP"
	depends on SPL
	help
	  Enable support for execute in place of U-Boot or kernel image. There
	  is no need to copy image from flash to ram if flash supports execute
	  in place. Its very useful in systems having enough flash but not
	  enough ram to load the image.

config SPL_ONENAND_SUPPORT
	bool "Support OneNAND flash"
	help
	  Enable support for OneNAND (Negative AND) flash in SPL. OneNAND is
	  a type of NAND flash and therefore can be used to allow SPL to
	  load U-Boot from supported devices. This enables the drivers in
	  drivers/mtd/onenand as part of an SPL build.

config SPL_OS_BOOT
	bool "Activate Falcon Mode"
	depends on !TI_SECURE_DEVICE
	default n
	help
	  Enable booting directly to an OS from SPL.
	  for more info read doc/README.falcon

if SPL_OS_BOOT
config SYS_OS_BASE
	hex "addr, where OS is found"
	depends on SPL_NOR_SUPPORT
	help
	  Specify the address, where the OS image is found, which
	  gets booted.

endif # SPL_OS_BOOT

config SPL_PAYLOAD
	string "SPL payload"
	default "tpl/u-boot-with-tpl.bin" if TPL
	default "u-boot.bin"
	help
	  Payload for SPL boot. For backward compatibility, default to
	  u-boot.bin, i.e. RAW image without any header. In case of
	  TPL, tpl/u-boot-with-tpl.bin. For new boards, suggest to
	  use u-boot.img.

config SPL_PCI
	bool "Support PCI drivers"
	help
	  Enable support for PCI in SPL. For platforms that need PCI to boot,
	  or must perform some init using PCI in SPL, this provides the
	  necessary driver support. This enables the drivers in drivers/pci
	  as part of an SPL build.

config SPL_PCH_SUPPORT
	bool "Support PCH drivers"
	help
	  Enable support for PCH (Platform Controller Hub) devices in SPL.
	  These are used to set up GPIOs and the SPI peripheral early in
	  boot. This enables the drivers in drivers/pch as part of an SPL
	  build.

config SPL_POST_MEM_SUPPORT
	bool "Support POST drivers"
	help
	  Enable support for POST (Power-on Self Test) in SPL. POST is a
	  procedure that checks that the hardware (CPU or board) appears to
	  be functionally correctly. It is a sanity check that can be
	  performed before booting. This enables the drivers in post/drivers
	  as part of an SPL build.

config SPL_DM_RESET
	bool "Support reset drivers"
	depends on SPL
	help
	  Enable support for reset control in SPL.
	  That can be useful in SPL to handle IP reset in driver, as in U-Boot,
	  by using the generic reset API provided by driver model.
	  This enables the drivers in drivers/reset as part of an SPL build.

config SPL_POWER
	bool "Support power drivers"
	help
	  Enable support for power control in SPL. This includes support
	  for PMICs (Power-management Integrated Circuits) and some of the
	  features provided by PMICs. In particular, voltage regulators can
	  be used to enable/disable power and vary its voltage. That can be
	  useful in SPL to turn on boot peripherals and adjust CPU voltage
	  so that the clock speed can be increased. This enables the drivers
	  in drivers/power, drivers/power/pmic and drivers/power/regulator
	  as part of an SPL build.

config SPL_POWER_DOMAIN
	bool "Support power domain drivers"
	help
	  Enable support for power domain control in SPL. Many SoCs allow
	  power to be applied to or removed from portions of the SoC (power
	  domains). This may be used to save power. This API provides the
	  means to control such power management hardware. This enables
	  the drivers in drivers/power/domain as part of a SPL build.

config SPL_RAM_SUPPORT
	bool "Support booting from RAM"
	default y if MICROBLAZE || ARCH_SOCFPGA || ARCH_TEGRA || ARCH_ZYNQ
	help
	  Enable booting of an image in RAM. The image can be preloaded or
	  it can be loaded by SPL directly into RAM (e.g. using USB).

config SPL_RAM_DEVICE
	bool "Support booting from preloaded image in RAM"
	depends on SPL_RAM_SUPPORT
	default y if MICROBLAZE || ARCH_SOCFPGA || ARCH_TEGRA || ARCH_ZYNQ
	help
	  Enable booting of an image already loaded in RAM. The image has to
	  be already in memory when SPL takes over, e.g. loaded by the boot
	  ROM.

config SPL_REMOTEPROC
	bool "Support REMOTEPROCS"
	help
	  Enable support for REMOTEPROCs in SPL. This permits to load
	  a remote processor firmware in SPL.

config SPL_RTC_SUPPORT
	bool "Support RTC drivers"
	help
	  Enable RTC (Real-time Clock) support in SPL. This includes support
	  for reading and setting the time. Some RTC devices also have some
	  non-volatile (battery-backed) memory which is accessible if
	  needed. This enables the drivers in drivers/rtc as part of an SPL
	  build.

config SPL_SATA_SUPPORT
	bool "Support loading from SATA"
	help
	  Enable support for SATA (Serial AT attachment) in SPL. This allows
	  use of SATA devices such as hard drives and flash drivers for
	  loading U-Boot. SATA is used in higher-end embedded systems and
	  can provide higher performance than MMC , at somewhat higher
	  expense and power consumption. This enables loading from SATA
	  using a configured device.

config SPL_SATA_RAW_U_BOOT_USE_SECTOR
	bool "SATA raw mode: by sector"
	depends on SPL_SATA_SUPPORT
	help
	  Use sector number for specifying U-Boot location on SATA disk in
	  raw mode.

config SPL_SATA_RAW_U_BOOT_SECTOR
	hex "Sector on the SATA disk to load U-Boot from"
	depends on SPL_SATA_RAW_U_BOOT_USE_SECTOR
	help
	  Sector on the SATA disk to load U-Boot from, when the SATA disk is being
	  used in raw mode. Units: SATA disk sectors (1 sector = 512 bytes).

config SPL_SERIAL_SUPPORT
	bool "Support serial"
	select SPL_PRINTF
	select SPL_STRTO
	help
	  Enable support for serial in SPL. This allows use of a serial UART
	  for displaying messages while SPL is running. It also brings in
	  printf() and panic() functions. This should normally be enabled
	  unless there are space reasons not to. Even then, consider
	  enabling SPL_USE_TINY_PRINTF which is a small printf() version.

config SPL_SPI_SUPPORT
	bool "Support SPI drivers"
	help
	  Enable support for using SPI in SPL. This is used for connecting
	  to SPI flash for loading U-Boot. See SPL_SPI_FLASH_SUPPORT for
	  more details on that. The SPI driver provides the transport for
	  data between the SPI flash and the CPU. This option can be used to
	  enable SPI drivers that are needed for other purposes also, such
	  as a SPI PMIC.

config SPL_SPI_FLASH_SUPPORT
	bool "Support SPI flash drivers"
	depends on SPL_SPI_SUPPORT
	help
	  Enable support for using SPI flash in SPL, and loading U-Boot from
	  SPI flash. SPI flash (Serial Peripheral Bus flash) is named after
	  the SPI bus that is used to connect it to a system. It is a simple
	  but fast bidirectional 4-wire bus (clock, chip select and two data
	  lines). This enables the drivers in drivers/mtd/spi as part of an
	  SPL build. This normally requires SPL_SPI_SUPPORT.

if SPL_SPI_FLASH_SUPPORT

config SPL_SPI_FLASH_TINY
	bool "Enable low footprint SPL SPI Flash support"
	depends on !SPI_FLASH_BAR
	default y if SPI_FLASH
	help
	 Enable lightweight SPL SPI Flash support that supports just reading
	 data/images from flash. No support to write/erase flash. Enable
	 this if you have SPL size limitations and don't need full
	 fledged SPI flash support.

config SPL_SPI_FLASH_SFDP_SUPPORT
	bool "SFDP table parsing support for SPI NOR flashes"
	depends on !SPI_FLASH_BAR && !SPL_SPI_FLASH_TINY
	help
	 Enable support for parsing and auto discovery of parameters for
	 SPI NOR flashes using Serial Flash Discoverable Parameters (SFDP)
	 tables as per JESD216 standard in SPL.

config SPL_SPI_FLASH_MTD
	bool "Support for SPI flash MTD drivers in SPL"
	help
	  Enable support for SPI flash MTD drivers in SPL.

config SPL_SPI_LOAD
	bool "Support loading from SPI flash"
	help
	  Enable support for loading next stage, U-Boot or otherwise, from
	  SPI NOR in U-Boot SPL.

endif # SPL_SPI_FLASH_SUPPORT

config SYS_SPI_U_BOOT_OFFS
	hex "address of u-boot payload in SPI flash"
	default 0x8000 if ARCH_SUNXI
	default 0x0
	depends on SPL_SPI_LOAD || SPL_SPI_SUNXI
	help
	 Address within SPI-Flash from where the u-boot payload is fetched
	 from.

config SPL_THERMAL
	bool "Driver support for thermal devices"
	help
	  Enable support for temperature-sensing devices. Some SoCs have on-chip
	  temperature sensors to permit warnings, speed throttling or even
	  automatic power-off when the temperature gets too high or low. Other
	  devices may be discrete but connected on a suitable bus.

config SPL_USB_HOST_SUPPORT
	bool "Support USB host drivers"
	select HAVE_BLOCK_DEVICE
	help
	  Enable access to USB (Universal Serial Bus) host devices so that
	  SPL can load U-Boot from a connected USB peripheral, such as a USB
	  flash stick. While USB takes a little longer to start up than most
	  buses, it is very flexible since many different types of storage
	  device can be attached. This option enables the drivers in
	  drivers/usb/host as part of an SPL build.

config SPL_USB_STORAGE
	bool "Support loading from USB"
	depends on SPL_USB_HOST_SUPPORT && !(BLK && !DM_USB)
	help
	  Enable support for USB devices in SPL. This allows use of USB
	  devices such as hard drives and flash drivers for loading U-Boot.
	  The actual drivers are enabled separately using the normal U-Boot
	  config options. This enables loading from USB using a configured
	  device.

config SPL_USB_GADGET
	bool "Suppport USB Gadget drivers"
	help
	  Enable USB Gadget API which allows to enable USB device functions
	  in SPL.

if SPL_USB_GADGET

config SPL_USB_ETHER
	bool "Support USB Ethernet drivers"
	help
	  Enable access to the USB network subsystem and associated
	  drivers in SPL. This permits SPL to load U-Boot over a
	  USB-connected Ethernet link (such as a USB Ethernet dongle) rather
	  than from an onboard peripheral. Environment support is required
	  since the network stack uses a number of environment variables.
	  See also SPL_NET_SUPPORT and SPL_ETH.

config SPL_DFU
	bool "Support DFU (Device Firmware Upgrade)"
	select SPL_HASH_SUPPORT
	select SPL_DFU_NO_RESET
	depends on SPL_RAM_SUPPORT
	help
	  This feature enables the DFU (Device Firmware Upgrade) in SPL with
	  RAM memory device support. The ROM code will load and execute
	  the SPL built with dfu. The user can load binaries (u-boot/kernel) to
	  selected device partition from host-pc using dfu-utils.
	  This feature is useful to flash the binaries to factory or bare-metal
	  boards using USB interface.

choice
	bool "DFU device selection"
	depends on SPL_DFU

config SPL_DFU_RAM
	bool "RAM device"
	depends on SPL_DFU && SPL_RAM_SUPPORT
	help
	 select RAM/DDR memory device for loading binary images
	 (u-boot/kernel) to the selected device partition using
	 DFU and execute the u-boot/kernel from RAM.

endchoice

config SPL_USB_SDP_SUPPORT
	bool "Support SDP (Serial Download Protocol)"
	depends on SPL_SERIAL_SUPPORT
	help
	  Enable Serial Download Protocol (SDP) device support in SPL. This
	  allows to download images into memory and execute (jump to) them
	  using the same protocol as implemented by the i.MX family's boot ROM.

config SPL_SDP_USB_DEV
	int "SDP USB controller index"
	default 0
	depends on SPL_USB_SDP_SUPPORT
	help
	  Some boards have USB controller other than 0. Define this option
	  so it can be used in compiled environment.
endif

config SPL_WATCHDOG_SUPPORT
	bool "Support watchdog drivers"
	imply SPL_WDT if !HW_WATCHDOG
	help
	  Enable support for watchdog drivers in SPL. A watchdog is
	  typically a hardware peripheral which can reset the system when it
	  detects no activity for a while (such as a software crash). This
	  enables the drivers in drivers/watchdog as part of an SPL build.

config SPL_YMODEM_SUPPORT
	bool "Support loading using Ymodem"
	depends on SPL_SERIAL_SUPPORT
	help
	  While loading from serial is slow it can be a useful backup when
	  there is no other option. The Ymodem protocol provides a reliable
	  means of transmitting U-Boot over a serial line for using in SPL,
	  with a checksum to ensure correctness.

config SPL_ATF
	bool "Support ARM Trusted Firmware"
	depends on ARM64 && SPL_FIT
	help
	  ATF(ARM Trusted Firmware) is a component for ARM AArch64 which
	  is loaded by SPL (which is considered as BL2 in ATF terminology).
	  More detail at: https://github.com/ARM-software/arm-trusted-firmware

config SPL_ATF_LOAD_IMAGE_V2
	bool "Use the new LOAD_IMAGE_V2 parameter passing"
	depends on SPL_ATF
	help
	  Some platforms use the newer LOAD_IMAGE_V2 parameter passing.

	  If you want to load a bl31 image from the SPL and need the new
	  method, say Y.

config SPL_ATF_NO_PLATFORM_PARAM
	bool "Pass no platform parameter"
	depends on SPL_ATF
	help
	  While we expect to call a pointer to a valid FDT (or NULL)
	  as the platform parameter to an ATF, some ATF versions are
	  not U-Boot aware and have an insufficiently robust parameter
	  validation to gracefully reject a FDT being passed.

	  If this option is enabled, the spl_atf os-type handler will
	  always pass NULL for the platform parameter.

	  If your ATF is affected, say Y.

config SPL_AM33XX_ENABLE_RTC32K_OSC
	bool "Enable the RTC32K OSC on AM33xx based platforms"
	default y if AM33XX
	help
	  Enable access to the AM33xx RTC and select the external 32kHz clock
	  source.

config SPL_OPTEE
	bool "Support OP-TEE Trusted OS"
	depends on ARM
	help
	  OP-TEE is an open source Trusted OS  which is loaded by SPL.
	  More detail at: https://github.com/OP-TEE/optee_os

config SPL_OPENSBI
	bool "Support RISC-V OpenSBI"
	depends on RISCV && SPL_RISCV_MMODE && RISCV_SMODE
	help
	  OpenSBI is an open-source implementation of the RISC-V Supervisor Binary
	  Interface (SBI) specification. U-Boot supports the OpenSBI FW_DYNAMIC
	  firmware. It is loaded and started by U-Boot SPL.

	  More details are available at https://github.com/riscv/opensbi and
	  https://github.com/riscv/riscv-sbi-doc

config SPL_OPENSBI_LOAD_ADDR
	hex "OpenSBI load address"
	depends on SPL_OPENSBI
	help
	  Load address of the OpenSBI binary.

config TPL
	bool
	depends on SUPPORT_TPL
	prompt "Enable TPL"
	help
	  If you want to build TPL as well as the normal image and SPL, say Y.

if TPL

config TPL_SIZE_LIMIT
	hex "Maximum size of TPL image"
	depends on TPL
	default 0x0
	help
	  Specifies the maximum length of the U-Boot TPL image.
	  If this value is zero, it is ignored.

config TPL_FRAMEWORK
	bool "Support TPL based upon the common SPL framework"
	default y if SPL_FRAMEWORK
	help
	  Enable the SPL framework under common/spl/ for TPL builds.
	  This framework supports MMC, NAND and YMODEM and other methods
	  loading of U-Boot's SPL stage. If unsure, say Y.

config TPL_HANDOFF
	bool "Pass hand-off information from TPL to SPL and U-Boot proper"
	depends on HANDOFF && TPL_BLOBLIST
	default y
	help
	  This option enables TPL to write handoff information. This can be
	  used to pass information like the size of SDRAM from TPL to U-Boot
	  proper. The information is also available to SPL if it is useful
	  there.

config TPL_BOARD_INIT
	bool "Call board-specific initialization in TPL"
	help
	  If this option is enabled, U-Boot will call the function
	  spl_board_init() from board_init_r(). This function should be
	  provided by the board.

config TPL_BOOTCOUNT_LIMIT
	bool "Support bootcount in TPL"
	depends on TPL_ENV_SUPPORT
	help
	  If this option is enabled, the TPL will support bootcount.
	  For example, it may be useful to choose the device to boot.

config TPL_LDSCRIPT
	string "Linker script for the TPL stage"
	depends on TPL
	default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARM64
	default "arch/\$(ARCH)/cpu/u-boot-spl.lds"
	help
	  The TPL stage will usually require a different linker-script
	  (as it runs from a different memory region) than the regular
	  U-Boot stage.  Set this to the path of the linker-script to
	  be used for TPL.

	  May be left empty to trigger the Makefile infrastructure to
	  fall back to the linker-script used for the SPL stage.

config TPL_NEEDS_SEPARATE_TEXT_BASE
	bool "TPL needs a separate text-base"
	default n
	depends on TPL
	help
	  Enable, if the TPL stage should not inherit its text-base
	  from the SPL stage.  When enabled, a base address for the
	  .text sections of the TPL stage has to be set below.

config TPL_NEEDS_SEPARATE_STACK
	bool "TPL needs a separate initial stack-pointer"
	default n
	depends on TPL
	help
	  Enable, if the TPL stage should not inherit its initial
	  stack-pointer from the settings for the SPL stage.

config TPL_TEXT_BASE
	hex "Base address for the .text section of the TPL stage"
	depends on TPL_NEEDS_SEPARATE_TEXT_BASE
	help
	  The base address for the .text section of the TPL stage.

config TPL_MAX_SIZE
	int "Maximum size (in bytes) for the TPL stage"
	default 0
	depends on TPL
	help
	  The maximum size (in bytes) of the TPL stage.

config TPL_STACK
	hex "Address of the initial stack-pointer for the TPL stage"
	depends on TPL_NEEDS_SEPARATE_STACK
	help
	  The address of the initial stack-pointer for the TPL stage.
	  Usually this will be the (aligned) top-of-stack.

config TPL_READ_ONLY
	bool
	depends on TPL_OF_PLATDATA
	select TPL_OF_PLATDATA_NO_BIND
	select TPL_OF_PLATDATA_RT
	help
	  Some platforms (e.g. x86 Apollo Lake) load SPL into a read-only
	  section of memory. This means that of-platdata must make a copy (in
	  writeable memory) of anything it wants to modify, such as
	  device-private data.

config TPL_BOOTROM_SUPPORT
	bool "Support returning to the BOOTROM (from TPL)"
	help
	  Some platforms (e.g. the Rockchip RK3368) provide support in their
	  ROM for loading the next boot-stage after performing basic setup
	  from the TPL stage.

	  Enable this option, to return to the BOOTROM through the
	  BOOT_DEVICE_BOOTROM (or fall-through to the next boot device in the
	  boot device list, if not implemented for a given board)

config TPL_DRIVERS_MISC_SUPPORT
	bool "Support misc drivers in TPL"
	help
	  Enable miscellaneous drivers in TPL. These drivers perform various
	  tasks that don't fall nicely into other categories, Enable this
	  option to build the drivers in drivers/misc as part of an TPL
	  build, for those that support building in TPL (not all drivers do).

config TPL_ENV_SUPPORT
	bool "Support an environment"
	help
	  Enable environment support in TPL. See SPL_ENV_SUPPORT for details.

config TPL_GPIO_SUPPORT
	bool "Support GPIO in TPL"
	help
	  Enable support for GPIOs (General-purpose Input/Output) in TPL.
	  GPIOs allow U-Boot to read the state of an input line (high or
	  low) and set the state of an output line. This can be used to
	  drive LEDs, control power to various system parts and read user
	  input. GPIOs can be useful in TPL to enable a 'sign-of-life' LED,
	  for example. Enable this option to build the drivers in
	  drivers/gpio as part of an TPL build.

config TPL_I2C_SUPPORT
	bool "Support I2C"
	help
	  Enable support for the I2C bus in TPL. See SPL_I2C_SUPPORT for
	  details.

config TPL_LIBCOMMON_SUPPORT
	bool "Support common libraries"
	help
	  Enable support for common U-Boot libraries within TPL. See
	  SPL_LIBCOMMON_SUPPORT for details.

config TPL_LIBGENERIC_SUPPORT
	bool "Support generic libraries"
	help
	  Enable support for generic U-Boot libraries within TPL. See
	  SPL_LIBGENERIC_SUPPORT for details.

config TPL_MPC8XXX_INIT_DDR_SUPPORT
	bool "Support MPC8XXX DDR init"
	help
	  Enable support for DDR-SDRAM on the MPC8XXX family within TPL. See
	  SPL_MPC8XXX_INIT_DDR_SUPPORT for details.

config TPL_MMC_SUPPORT
	bool "Support MMC"
	depends on MMC
	help
	  Enable support for MMC within TPL. See SPL_MMC_SUPPORT for details.

config TPL_NAND_SUPPORT
	bool "Support NAND flash"
	help
	  Enable support for NAND in TPL. See SPL_NAND_SUPPORT for details.

config TPL_PCI
	bool "Support PCI drivers"
	help
	  Enable support for PCI in TPL. For platforms that need PCI to boot,
	  or must perform some init using PCI in SPL, this provides the
	  necessary driver support. This enables the drivers in drivers/pci
	  as part of a TPL build.

config TPL_PCH_SUPPORT
	bool "Support PCH drivers"
	help
	  Enable support for PCH (Platform Controller Hub) devices in TPL.
	  These are used to set up GPIOs and the SPI peripheral early in
	  boot. This enables the drivers in drivers/pch as part of a TPL
	  build.

config TPL_RAM_SUPPORT
	bool "Support booting from RAM"
	help
	  Enable booting of an image in RAM. The image can be preloaded or
	  it can be loaded by TPL directly into RAM (e.g. using USB).

config TPL_RAM_DEVICE
	bool "Support booting from preloaded image in RAM"
	depends on TPL_RAM_SUPPORT
	help
	  Enable booting of an image already loaded in RAM. The image has to
	  be already in memory when TPL takes over, e.g. loaded by the boot
	  ROM.

config TPL_RTC_SUPPORT
	bool "Support RTC drivers"
	help
	  Enable RTC (Real-time Clock) support in TPL. This includes support
	  for reading and setting the time. Some RTC devices also have some
	  non-volatile (battery-backed) memory which is accessible if
	  needed. This enables the drivers in drivers/rtc as part of an TPL
	  build.

config TPL_SERIAL_SUPPORT
	bool "Support serial"
	select TPL_PRINTF
	select TPL_STRTO
	help
	  Enable support for serial in TPL. See SPL_SERIAL_SUPPORT for
	  details.

config TPL_SPI_FLASH_SUPPORT
	bool "Support SPI flash drivers"
	help
	  Enable support for using SPI flash in TPL. See SPL_SPI_FLASH_SUPPORT
	  for details.

config TPL_SPI_FLASH_TINY
	bool "Enable low footprint TPL SPI Flash support"
	depends on TPL_SPI_FLASH_SUPPORT && !SPI_FLASH_BAR
	default y if SPI_FLASH
	help
	 Enable lightweight TPL SPI Flash support that supports just reading
	 data/images from flash. No support to write/erase flash. Enable
	 this if you have TPL size limitations and don't need full-fledged
	 SPI flash support.

config TPL_SPI_LOAD
	bool "Support loading from SPI flash"
	depends on TPL_SPI_FLASH_SUPPORT
	help
	  Enable support for loading next stage, U-Boot or otherwise, from
	  SPI NOR in U-Boot TPL.

config TPL_SPI_SUPPORT
	bool "Support SPI drivers"
	help
	  Enable support for using SPI in TPL. See SPL_SPI_SUPPORT for
	  details.

config TPL_DM_SPI
	bool "Support SPI DM drivers in TPL"
	help
	  Enable support for SPI DM drivers in TPL.

config TPL_DM_SPI_FLASH
	bool "Support SPI DM FLASH drivers in TPL"
	help
	  Enable support for SPI DM flash drivers in TPL.

config TPL_YMODEM_SUPPORT
	bool "Support loading using Ymodem"
	depends on TPL_SERIAL_SUPPORT
	help
	  While loading from serial is slow it can be a useful backup when
	  there is no other option. The Ymodem protocol provides a reliable
	  means of transmitting U-Boot over a serial line for using in TPL,
	  with a checksum to ensure correctness.

endif # TPL

config SPL_AT91_MCK_BYPASS
	bool "Use external clock signal as a source of main clock for AT91 platforms"
	depends on ARCH_AT91
	default n
	help
	  Use external 8 to 24 Mhz clock signal as source of main clock instead
	  of an external crystal oscillator.
	  This option disables the internal driving on the XOUT pin.
	  The external source has to provide a stable clock on the XIN pin.
	  If this option is disabled, the SoC expects a crystal oscillator
	  that needs driving on both XIN and XOUT lines.

endif # SPL
endmenu
