config SUPPORT_SPL
	bool

config SUPPORT_TPL
	bool

config SUPPORT_VPL
	bool

config SPL_DFU_NO_RESET
	bool

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

menu "SPL configuration options"
	depends on SPL

config SPL_FRAMEWORK
	bool "Support SPL based upon the common SPL framework"
	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"
	default 0x11000 if ARCH_MX6 && !MX6_OCRAM_256KB
	default 0x31000 if ARCH_MX6 && MX6_OCRAM_256KB
	default 0x30000 if ARCH_MVEBU && ARMADA_32BIT
	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_MAX_SIZE
	hex "Maximum size of the SPL image, excluding BSS"
	default 0x30000 if ARCH_MX6 && MX6_OCRAM_256KB
	default 0x1b000 if AM33XX && !TI_SECURE_DEVICE
	default 0x10000 if ARCH_MX6 && !MX6_OCRAM_256KB
	default 0x7fa0 if SUNXI_SRAM_ADDRESS = 0x10000
	default 0x7fa0 if SUNXI_SRAM_ADDRESS = 0x20000 && !MACH_SUN50I_H616
	default 0xbfa0 if MACH_SUN50I_H616
	default 0x7000 if RCAR_GEN3
	default 0x5fa0 if SUNXI_SRAM_ADDRESS = 0x0
	default 0x10000 if ASPEED_AST2600
	default 0x27000 if IMX8MM && SPL_TEXT_BASE = 0x7E1000
	default 0x0
	help
	  Maximum size of the SPL image (text, data, rodata, and linker lists
	  sections), BSS excluded.  When defined, the linker checks that the
	  actual size does not exceed it.

config SPL_PAD_TO
	hex "Offset to which the SPL should be padded before appending the SPL payload"
	default 0x31000 if ARCH_MX6 && MX6_OCRAM_256KB
	default 0x11000 if ARCH_MX7 || (ARCH_MX6 && !MX6_OCRAM_256KB)
	default 0x10000 if ARCH_KEYSTONE
	default 0x8000 if ARCH_SUNXI && !MACH_SUN50I_H616
	default 0x0 if ARCH_MTMIPS
	default TPL_MAX_SIZE if TPL_MAX_SIZE > SPL_MAX_SIZE
	default SPL_MAX_SIZE
	help
	  Image offset to which the SPL should be padded before appending the
	  SPL payload. By default, this is defined as CONFIG_SPL_MAX_SIZE, or 0 if
	  CONFIG_SPL_MAX_SIZE is undefined.  CONFIG_SPL_PAD_TO must be either
	  0, meaning to append the SPL payload without any padding, or >=
	  CONFIG_SPL_MAX_SIZE.

config SPL_HAS_BSS_LINKER_SECTION
	depends on SPL_FRAMEWORK
	bool "Use a specific address for the BSS via the linker script"
	default y if ARCH_SUNXI || ARCH_MX6 || ARCH_OMAP2PLUS || MIPS || RISCV || ARCH_ZYNQMP

config SPL_BSS_START_ADDR
	hex "Link address for the BSS within the SPL binary"
	depends on SPL_HAS_BSS_LINKER_SECTION
	default 0x88200000 if (ARCH_MX6 && (MX6SX || MX6SL || MX6UL || MX6ULL)) || ARCH_MX7
	default 0x18200000 if ARCH_MX6 && !(MX6SX || MX6SL || MX6UL || MX6ULL)
	default 0x80a00000 if ARCH_OMAP2PLUS
	default 0x81f80000 if ARCH_SUNXI && MACH_SUNIV
	default 0x4ff80000 if ARCH_SUNXI && !(MACH_SUN9I || MACH_SUNIV)
	default 0x2ff80000 if ARCH_SUNXI && MACH_SUN9I
	default 0x1000 if ARCH_ZYNQMP

choice
	prompt "Enforce SPL BSS limit"
	depends on !PPC
	default SPL_BSS_LIMIT
	help
	  In some platforms we only want to enforce a limit on the size of the
	  BSS in memory.  On other platforms we need to enforce a limit on the
	  whole of the memory allocation as we're strictly limited to a small
	  typically non-DRAM location.  Finally, other platforms do not enforce
	  a memory limit within SPL.

config SPL_NO_BSS_LIMIT
	bool "Do not enforce a build time limit on the size of the BSS"

config SPL_BSS_LIMIT
	bool "Enforce a limit on the size of the BSS only"

config SPL_FOOTPRINT_LIMIT
	bool "Enforce a limit on the whole of memory allocated to SPL, BSS included"

endchoice

config SPL_BSS_MAX_SIZE
	hex "Maximum size in memory allocated to the SPL BSS"
	depends on SPL_BSS_LIMIT
	default 0x100000 if ARCH_MX6 || RISCV
	default 0x80000 if ARCH_OMAP2PLUS || ARCH_SUNXI
	help
	  When non-zero, the linker checks that the actual memory used by SPL
	  from __bss_start to __bss_end does not exceed it.

config SPL_MAX_FOOTPRINT
	hex "Maximum size in memory allocated to the SPL, BSS included"
	depends on SPL_FOOTPRINT_LIMIT
	help
	  When non-zero, the linker checks that the actual memory used by SPL
	  from _start to __bss_end does not exceed it.

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.

config SPL_BINMAN_SYMBOLS
	bool "Declare binman symbols in SPL"
	depends on SPL_FRAMEWORK && BINMAN
	default y
	help
	  This enables use of symbols in SPL which refer to other entries in
	  the same binman image as the SPL. These can be declared with the
	  binman_sym_declare(type, entry, prop) macro and accessed by the
	  binman_sym(type, entry, prop) macro defined in binman_sym.h.

	  See tools/binman/binman.rst for a detailed explanation.

config SPL_BINMAN_UBOOT_SYMBOLS
	bool "Declare binman symbols for U-Boot phases in SPL"
	depends on SPL_BINMAN_SYMBOLS
	default n if ARCH_IMX8M
	default y
	help
	  This enables use of symbols in SPL which refer to U-Boot phases,
	  enabling SPL to obtain the location and size of its next phase simply
	  by calling spl_get_image_pos() and spl_get_image_size().

	  For this to work, you must have all U-Boot phases in the same binman
	  image, so binman can update SPL with the locations of everything.

source "common/spl/Kconfig.nxp"

config HANDOFF
	bool "Pass hand-off information from SPL to U-Boot proper"
	depends on 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).

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/arm/cpu/arm926ejs/sunxi/u-boot-spl.lds" if MACH_SUNIV
	default "arch/arm/cpu/armv7/sunxi/u-boot-spl.lds" if ARCH_SUNXI && !MACH_SUNIV && !ARM64
	default "arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds" if (ARCH_MX23 || ARCH_MX28) && !SPL_FRAMEWORK
	default "arch/arm/cpu/arm1136/u-boot-spl.lds" if CPU_ARM1136
	default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARCH_LS1043A || ARCH_LS1046A || ARCH_LS2080A
	default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARM64
	default "arch/arm/mach-at91/arm926ejs/u-boot-spl.lds" if ARCH_AT91 && CPU_ARM926EJS
	default "arch/arm/mach-at91/armv7/u-boot-spl.lds" if ARCH_AT91 && CPU_V7A
	default "arch/arm/mach-omap2/u-boot-spl.lds" if ARCH_MX6 || ARCH_OMAP2PLUS || (ARCH_K3 && !ARM64)
	default "arch/arm/mach-zynq/u-boot-spl.lds" if ARCH_ZYNQ
	default "board/samsung/common/exynos-uboot-spl.lds" if ARCH_EXYNOS5 || ARCH_EXYNOS4
	default "board/davinci/da8xxevm/u-boot-spl-da850evm.lds" if ARCH_DAVINCI
	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 0x402F4000 if AM43XX
	default 0x402F0400 if AM33XX
	default 0x40301350 if OMAP54XX
	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_MVEBU
	default n if (ARCH_MX6 && (SPL_MMC || SPL_SATA))
	default y
	depends on !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_FORMAT
	bool "Support SPL loading and booting of Legacy images"
	default n if ARCH_MVEBU
	default y if !SPL_LOAD_FIT
	depends on !TI_SECURE_DEVICE
	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_FORMAT
	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 "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 SPL_SHARES_INIT_SP_ADDR
	bool "SPL and U-Boot use the same initial stack pointer location"
	depends on (ARM || ARCH_JZ47XX || MICROBLAZE || RISCV) && SPL_FRAMEWORK
	default n if ARCH_SUNXI || ARCH_MX6 || ARCH_MX7
	default y
	help
	  In many cases, we can use the same initial stack pointer address for
	  both SPL and U-Boot itself.  If you need to specify a different address
	  however, say N here and then set a different value in CONFIG_SPL_STACK.

config SPL_STACK
	hex "Initial stack pointer location"
	depends on (ARM || ARCH_JZ47XX || MICROBLAZE || RISCV) && SPL_FRAMEWORK
	depends on !SPL_SHARES_INIT_SP_ADDR
	default 0x946bb8 if ARCH_MX7
	default 0x93ffb8 if ARCH_MX6 && MX6_OCRAM_256KB
	default 0x91ffb8 if ARCH_MX6 && !MX6_OCRAM_256KB
	default 0x118000 if MACH_SUN50I_H6
	default 0x58000 if MACH_SUN50I_H616
	default 0x54000 if MACH_SUN50I || MACH_SUN50I_H5
	default 0x18000 if MACH_SUN9I
	default 0x8000 if ARCH_SUNXI
	help
	  Address of the start of the stack SPL will use before SDRAM is
	  initialized.

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 0x400000 if ARCH_K3 && ARM64
	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 SYS_SPL_MALLOC
	bool "Enable malloc pool in SPL"
	depends on SPL_FRAMEWORK

config HAS_CUSTOM_SPL_MALLOC_START
	bool "For the SPL malloc pool, define a custom starting address"
	depends on SYS_SPL_MALLOC

config CUSTOM_SYS_SPL_MALLOC_ADDR
	hex "SPL malloc addr"
	depends on HAS_CUSTOM_SPL_MALLOC_START

config SYS_SPL_MALLOC_SIZE
	hex "Size of the SPL malloc pool"
	depends on SYS_SPL_MALLOC
	default 0x100000

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 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 0x0 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_FORMAT || SPL_EFI_PARTITION
	default y if SPL_ENV_SUPPORT || TPL_BLOBLIST
	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_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 || ARCH_IMX9
	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
	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_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
	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
	depends on SPL_NET
	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.

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_FS_LOAD_PAYLOAD_NAME
	string "File to load for U-Boot from the filesystem"
	depends on SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS || SPL_SEMIHOSTING
	default "tispl.bin" if SYS_K3_SPL_ATF
	default "u-boot.itb" if SPL_LOAD_FIT
	default "u-boot.img"
	help
	  Filename to read to load U-Boot when reading from filesystem.

config SPL_FS_LOAD_KERNEL_NAME
	string "File to load for the OS kernel from the filesystem"
	depends on (SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS) && SPL_OS_BOOT
	default "uImage"
	help
	  Filename to read to load for the OS kernel when reading from the
	  filesystem.

config SPL_FS_LOAD_ARGS_NAME
	string "File to load for the OS kernel argument parameters from the filesystem"
	depends on (SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS) && SPL_OS_BOOT
	default "args"
	help
	  Filename to read to load for the OS kernel argument parameters from
	  the filesystem.

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
	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
	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"
	depends on SPL_DM
	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_MEMORY
	bool "Support Memory controller drivers"
	help
	  Enable support for Memory Controller drivers within SPL.
	  These devices provide Memory bus interface to various devices like
	  SRAM, Ethernet adapters, FPGAs, etc.

config SPL_MMC
	bool "Support MMC"
	depends on MMC
	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
	bool "MMC FS Boot mode"
	depends on SPL_MMC
	default y if !ARCH_MVEBU
	help
	  Enable MMC FS Boot mode. Partition is selected by option
	  SYS_MMCSD_FS_BOOT_PARTITION.

config SYS_MMCSD_FS_BOOT_PARTITION
	int "MMC Boot Partition"
	depends on SYS_MMCSD_FS_BOOT
	default 1
	help
	  Partition on the MMC to load U-Boot from when the MMC is being
	  used in fs mode.
	  Use -1 as a special value to use the first bootable partition.

config SPL_MMC_TINY
	bool "Tiny MMC framework in SPL"
	depends on SPL_MMC
	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
	help
	  Enable write access to MMC and SD Cards in SPL


config SPL_MPC8XXX_INIT_DDR
	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
	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_RAW_ONLY
	bool "Support to boot only raw u-boot.bin images"
	depends on SPL_NAND_SUPPORT
	help
	  Use this only if you need to save space.

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 ECC in SPL"

config SPL_NAND_SOFTECC
	bool "Use software ECC in SPL"
	depends on SPL_NAND_ECC

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_SUPPORT
	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.

menu "UBI configuration for SPL"
	depends on 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"
	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"
	help
	  The maximum physical erase block size.

config SPL_UBI_MAX_PEBS
	int "Maximum number of PEBs"
	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"
	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"

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

config SPL_UBI_INFO_ADDR
	hex "Address to place UBI scan info"
	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"
	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"
	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
	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
	help
	  The UBI volume id from which to load the device tree

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

endmenu

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

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

config SPL_NET
	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.

config SPL_NET_VCI_STRING
	string "BOOTP Vendor Class Identifier string sent by SPL"
	depends on SPL_NET
	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

config SPL_NO_CPU_SUPPORT
	def_bool y
	depends on (ARCH_MX23 || ARCH_MX28) && !SPL_FRAMEWORK
	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"
	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
	help
	  Enable booting directly to an OS from SPL.
	  for more info read doc/README.falcon

config SYS_SPL_ARGS_ADDR
	hex "Address in memory to load 'args' file for Falcon Mode to"
	depends on SPL_OS_BOOT
	default 0x88000000 if ARCH_OMAP2PLUS
	help
	  Address in memory where the 'args' file, typically a device tree
	  will be loaded in to memory.

config SYS_NAND_SPL_KERNEL_OFFS
	hex "Address in memory to load the OS file for Falcon mode to"
	depends on SPL_OS_BOOT && SPL_NAND_SUPPORT

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

config SPL_FALCON_BOOT_MMCSD
	bool "Enable Falcon boot from MMC or SD media"
	depends on SPL_OS_BOOT && SPL_MMC
	help
	  Select this if the Falcon mode OS image mode is on MMC or SD media.

config SYS_MMCSD_RAW_MODE_KERNEL_SECTOR
	hex "Falcon mode: Sector to load kernel uImage from MMC"
	depends on SPL_FALCON_BOOT_MMCSD
	help
	  When Falcon mode is used with an MMC or SD media, SPL needs to know
	  where to look for the kernel uImage. The image is expected to begin
	  at the raw MMC specified in this config.
	  Note that the Falcon mode image can also be a FIT, if FIT support is
	  enabled.

config SYS_MMCSD_RAW_MODE_ARGS_SECTOR
	hex "Falcon mode: Sector to load 'args' from MMC"
	depends on SPL_FALCON_BOOT_MMCSD
	help
	  When Falcon mode is used with an MMC or SD media, SPL needs to know
	  where to look for the OS 'args', typically a device tree. The
	  contents are expected to begin at the raw MMC specified in this config.
	  Note that if using a FIT image, this and the next option can be set to
	  0x0.

config SYS_MMCSD_RAW_MODE_ARGS_SECTORS
	hex "Falcon mode: Number of sectors to load for 'args' from MMC"
	depends on SPL_FALCON_BOOT_MMCSD && SYS_MMCSD_RAW_MODE_ARGS_SECTOR != 0x0

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
	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_DM
	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"
	select SPL_POWER
	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
	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
	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 SYS_SATA_FAT_BOOT_PARTITION
	int "Partition on the SATA disk to load U-Boot from"
	depends on SPL_SATA && SPL_FS_FAT
	default 1

config SPL_SATA_RAW_U_BOOT_USE_SECTOR
	bool "SATA raw mode: by sector"
	depends on SPL_SATA
	default y if ARCH_MVEBU
	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
	default 0x1 if ARCH_MVEBU
	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
	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
	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
	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.

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_WATCHDOG
	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
	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
	depends on SPL_LOAD_FIT && !SPL_FIT_IMAGE_TINY
	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"
	depends on AM33XX
	default y if AM33XX
	help
	  Enable access to the AM33xx RTC and select the external 32kHz clock
	  source.

config SPL_OPTEE_IMAGE
	bool "Support OP-TEE Trusted OS image in SPL"
	depends on ARM
	depends on SPL_LOAD_FIT || SPL_LOAD_FIT_FULL
	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
	depends on SPL_LOAD_FIT && !SPL_FIT_IMAGE_TINY
	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 SPL_OPENSBI_SCRATCH_OPTIONS
	hex "Scratch options passed to OpenSBI"
	default 0x1
	depends on SPL_OPENSBI
	help
	  Options passed to fw_dynamic, for example SBI_SCRATCH_NO_BOOT_PRINTS or
	  SBI_SCRATCH_DEBUG_PRINTS.

config SPL_TARGET
	string "Addtional build targets for 'make'"
	default "spl/u-boot-spl.srec" if RCAR_GEN2
	default "spl/u-boot-spl.scif" if RCAR_GEN3
	default ""
	help
	  On some platforms we need to have 'make' run additional build target
	  rules. If required on your platform, enter it here, otherwise leave blank.


config SPL_AT91_MCK_BYPASS
	bool "Use external clock signal as a source of main clock for AT91 platforms"
	depends on ARCH_AT91
	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.
endmenu

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

source "common/spl/Kconfig.tpl"

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

source "common/spl/Kconfig.vpl"
