menu "Boot options"

menu "Boot images"

config ANDROID_BOOT_IMAGE
	bool "Enable support for Android Boot Images"
	default y if FASTBOOT
	help
	  This enables support for booting images which use the Android
	  image format header.

config FIT
	bool "Support Flattened Image Tree"
	select HASH
	select MD5
	select SHA1
	imply SHA256
	help
	  This option allows you to boot the new uImage structure,
	  Flattened Image Tree.  FIT is formally a FDT, which can include
	  images of various types (kernel, FDT blob, ramdisk, etc.)
	  in a single blob.  To boot this new uImage structure,
	  pass the address of the blob to the "bootm" command.
	  FIT is very flexible, supporting compression, multiple images,
	  multiple configurations, verification through hashing and also
	  verified boot (secure boot using RSA).

config TIMESTAMP
	bool "Show image date and time when displaying image information"
	default y if CMD_DATE
	help
	  When CONFIG_TIMESTAMP is selected, the timestamp (date and time) of
	  an image is printed by image commands like bootm or iminfo. This
	  is shown as 'Timestamp: xxx' and 'Created: xxx'. If this option is
	  enabled, then U-Boot requires FITs to have a timestamp. If a FIT is
	  loaded that does not, the message 'Wrong FIT format: no timestamp'
	  is shown.

config FIT_EXTERNAL_OFFSET
	hex "FIT external data offset"
	depends on FIT
	default 0x0
	help
	  This specifies a data offset in fit image.
	  The offset is from data payload offset to the beginning of
	  fit image header. When specifies a offset, specific data
	  could be put in the hole between data payload and fit image
	  header, such as CSF data on i.MX platform.

config FIT_FULL_CHECK
	bool "Do a full check of the FIT before using it"
	depends on FIT
	default y
	help
	  Enable this do a full check of the FIT to make sure it is valid. This
	  helps to protect against carefully crafted FITs which take advantage
	  of bugs or omissions in the code. This includes a bad structure,
	  multiple root nodes and the like.

config FIT_SIGNATURE
	bool "Enable signature verification of FIT uImages"
	depends on DM && FIT
	select HASH
	imply RSA
	imply RSA_VERIFY
	select IMAGE_SIGN_INFO
	select FIT_FULL_CHECK
	help
	  This option enables signature verification of FIT uImages,
	  using a hash signed and verified using RSA. If
	  CONFIG_SHA_PROG_HW_ACCEL is defined, i.e support for progressive
	  hashing is available using hardware, then the RSA library will use
	  it. See doc/uImage.FIT/signature.txt for more details.

	  WARNING: When relying on signed FIT images with a required signature
	  check the legacy image format is disabled by default, so that
	  unsigned images cannot be loaded. If a board needs the legacy image
	  format support in this case, enable it using
	  CONFIG_LEGACY_IMAGE_FORMAT.

config FIT_SIGNATURE_MAX_SIZE
	hex "Max size of signed FIT structures"
	depends on FIT_SIGNATURE
	default 0x10000000
	help
	  This option sets a max size in bytes for verified FIT uImages.
	  A sane value of 256MB protects corrupted DTB structures from overlapping
	  device memory. Assure this size does not extend past expected storage
	  space.

config FIT_RSASSA_PSS
	bool "Support rsassa-pss signature scheme of FIT image contents"
	depends on FIT_SIGNATURE
	help
	  Enable this to support the pss padding algorithm as described
	  in the rfc8017 (https://tools.ietf.org/html/rfc8017).

config FIT_CIPHER
	bool "Enable ciphering data in a FIT uImages"
	depends on DM && FIT
	select AES
	help
	  Enable the feature of data ciphering/unciphering in the tool mkimage
	  and in the u-boot support of the FIT image.

config FIT_VERBOSE
	bool "Show verbose messages when FIT images fail"
	depends on FIT
	help
	  Generally a system will have valid FIT images so debug messages
	  are a waste of code space. If you are debugging your images then
	  you can enable this option to get more verbose information about
	  failures.

config FIT_BEST_MATCH
	bool "Select the best match for the kernel device tree"
	depends on FIT
	help
	  When no configuration is explicitly selected, default to the
	  one whose fdt's compatibility field best matches that of
	  U-Boot itself. A match is considered "best" if it matches the
	  most specific compatibility entry of U-Boot's fdt's root node.
	  The order of entries in the configuration's fdt is ignored.

config FIT_IMAGE_POST_PROCESS
	bool "Enable post-processing of FIT artifacts after loading by U-Boot"
	depends on FIT
	depends on SOCFPGA_SECURE_VAB_AUTH
	help
	  Allows doing any sort of manipulation to blobs after they got extracted
	  from FIT images like stripping off headers or modifying the size of the
	  blob, verification, authentication, decryption etc. in a platform or
	  board specific way. In order to use this feature a platform or board-
	  specific implementation of board_fit_image_post_process() must be
	  provided. Also, anything done during this post-processing step would
	  need to be comprehended in how the images were prepared before being
	  injected into the FIT creation (i.e. the blobs would have been pre-
	  processed before being added to the FIT image).

config FIT_PRINT
        bool "Support FIT printing"
	depends on FIT
        default y
        help
          Support printing the content of the fitImage in a verbose manner.

config SPL_FIT
	bool "Support Flattened Image Tree within SPL"
	depends on SPL && FIT
	select SPL_HASH
	select SPL_OF_LIBFDT

config SPL_FIT_PRINT
	bool "Support FIT printing within SPL"
	depends on SPL_FIT
	help
	  Support printing the content of the fitImage in a verbose manner in SPL.

config SPL_FIT_FULL_CHECK
	bool "Do a full check of the FIT before using it"
	depends on SPL_FIT
	help
	  Enable this do a full check of the FIT to make sure it is valid. This
	  helps to protect against carefully crafted FITs which take advantage
	  of bugs or omissions in the code. This includes a bad structure,
	  multiple root nodes and the like.

config SPL_FIT_SIGNATURE
	bool "Enable signature verification of FIT firmware within SPL"
	depends on SPL_DM
	depends on SPL_LOAD_FIT || SPL_LOAD_FIT_FULL
	select FIT_SIGNATURE
	select SPL_FIT
	select SPL_CRYPTO
	select SPL_HASH
	imply SPL_RSA
	imply SPL_RSA_VERIFY
	select SPL_IMAGE_SIGN_INFO
	select SPL_FIT_FULL_CHECK

config SPL_FIT_SIGNATURE_MAX_SIZE
	hex "Max size of signed FIT structures in SPL"
	depends on SPL_FIT_SIGNATURE
	default 0x10000000
	help
	  This option sets a max size in bytes for verified FIT uImages.
	  A sane value of 256MB protects corrupted DTB structures from overlapping
	  device memory. Assure this size does not extend past expected storage
	  space.

config SPL_FIT_RSASSA_PSS
	bool "Support rsassa-pss signature scheme of FIT image contents in SPL"
	depends on SPL_FIT_SIGNATURE
	help
	  Enable this to support the pss padding algorithm as described
	  in the rfc8017 (https://tools.ietf.org/html/rfc8017) in SPL.

config SPL_LOAD_FIT
	bool "Enable SPL loading U-Boot as a FIT (basic fitImage features)"
	depends on SPL && FIT
	select SPL_FIT
	help
	  Normally with the SPL framework a legacy image is generated as part
	  of the build. This contains U-Boot along with information as to
	  where it should be loaded. This option instead enables generation
	  of a FIT (Flat Image Tree) which provides more flexibility. In
	  particular it can handle selecting from multiple device tree
	  and passing the correct one to U-Boot.

	  This path has the following limitations:

	  1. "loadables" images, other than FDTs, which do not have a "load"
	     property will not be loaded. This limitation also applies to FPGA
	     images with the correct "compatible" string.
	  2. For FPGA images, the supported "compatible" list is in the
	     doc/uImage.FIT/source_file_format.txt.
	  3. FDTs are only loaded for images with an "os" property of "u-boot".
	     "linux" images are also supported with Falcon boot mode.

config SPL_LOAD_FIT_ADDRESS
	hex "load address of fit image"
	depends on SPL_LOAD_FIT || SPL_RAM_SUPPORT || TPL_RAM_SUPPORT
	default 0x0
	help
	  Specify the load address of the fit image that will be loaded
	  by SPL.

config SPL_LOAD_FIT_APPLY_OVERLAY
	bool "Enable SPL applying DT overlays from FIT"
	depends on SPL_LOAD_FIT
	select OF_LIBFDT_OVERLAY
	help
	  The device tree is loaded from the FIT image. Allow the SPL to
	  also load device-tree overlays from the FIT image an apply them
	  over the device tree.

config SPL_LOAD_FIT_APPLY_OVERLAY_BUF_SZ
	depends on SPL_LOAD_FIT_APPLY_OVERLAY
	default 0x10000
	hex "size of temporary buffer used to load the overlays"
	help
	  The size of the area where the overlays will be loaded and
	  uncompress. Must be at least as large as biggest overlay
	  (uncompressed)

config SPL_LOAD_FIT_FULL
	bool "Enable SPL loading U-Boot as a FIT (full fitImage features)"
	depends on FIT
	select SPL_FIT
	help
	  Normally with the SPL framework a legacy image is generated as part
	  of the build. This contains U-Boot along with information as to
	  where it should be loaded. This option instead enables generation
	  of a FIT (Flat Image Tree) which provides more flexibility. In
	  particular it can handle selecting from multiple device tree
	  and passing the correct one to U-Boot.

config SPL_FIT_IMAGE_POST_PROCESS
	bool "Enable post-processing of FIT artifacts after loading by the SPL"
	depends on SPL_LOAD_FIT
	default y if TI_SECURE_DEVICE
	help
	  Allows doing any sort of manipulation to blobs after they got extracted
	  from the U-Boot FIT image like stripping off headers or modifying the
	  size of the blob, verification, authentication, decryption etc. in a
	  platform or board specific way. In order to use this feature a platform
	  or board-specific implementation of board_fit_image_post_process() must
	  be provided. Also, anything done during this post-processing step would
	  need to be comprehended in how the images were prepared before being
	  injected into the FIT creation (i.e. the blobs would have been pre-
	  processed before being added to the FIT image).

config SPL_FIT_SOURCE
	string ".its source file for U-Boot FIT image"
	depends on SPL_FIT
	help
	  Specifies a (platform specific) FIT source file to generate the
	  U-Boot FIT image. This could specify further image to load and/or
	  execute.

config USE_SPL_FIT_GENERATOR
	bool "Use a script to generate the .its script"
	depends on SPL_FIT
	default y if SPL_FIT && ARCH_ZYNQMP

config SPL_FIT_GENERATOR
	string ".its file generator script for U-Boot FIT image"
	depends on USE_SPL_FIT_GENERATOR
	default "arch/arm/mach-zynqmp/mkimage_fit_atf.sh" if SPL_LOAD_FIT && ARCH_ZYNQMP
	help
	  Specifies a (platform specific) script file to generate the FIT
	  source file used to build the U-Boot FIT image file. This gets
	  passed a list of supported device tree file stub names to
	  include in the generated image.

if VPL

config VPL_FIT
	bool "Support Flattened Image Tree within VPL"
	depends on VPL
	default y
	select VPL_HASH
	select VPL_OF_LIBFDT

config VPL_FIT_PRINT
	bool "Support FIT printing within VPL"
	depends on VPL_FIT
	default y
	help
	  Support printing the content of the fitImage in a verbose manner in VPL.

config VPL_FIT_FULL_CHECK
	bool "Do a full check of the FIT before using it"
	default y
	help
	  Enable this do a full check of the FIT to make sure it is valid. This
	  helps to protect against carefully crafted FITs which take advantage
	  of bugs or omissions in the code. This includes a bad structure,
	  multiple root nodes and the like.

config VPL_FIT_SIGNATURE
	bool "Enable signature verification of FIT firmware within VPL"
	depends on VPL_DM
	default y
	select FIT_SIGNATURE
	select VPL_FIT
	select VPL_CRYPTO
	select VPL_HASH
	imply VPL_RSA
	imply VPL_RSA_VERIFY
	select VPL_IMAGE_SIGN_INFO
	select VPL_FIT_FULL_CHECK

config VPL_FIT_SIGNATURE_MAX_SIZE
	hex "Max size of signed FIT structures in VPL"
	depends on VPL_FIT_SIGNATURE
	default 0x10000000
	help
	  This option sets a max size in bytes for verified FIT uImages.
	  A sane value of 256MB protects corrupted DTB structures from overlapping
	  device memory. Assure this size does not extend past expected storage
	  space.

endif # VPL

config PXE_UTILS
	bool
	select MENU
	help
	  Utilities for parsing PXE file formats.

config BOOT_DEFAULTS
	bool  # Common defaults for standard boot and distroboot
	imply USE_BOOTCOMMAND
	select CMD_ENV_EXISTS
	select CMD_EXT2
	select CMD_EXT4
	select CMD_FAT
	select CMD_FS_GENERIC
	select CMD_PART if PARTITIONS
	select CMD_DHCP if CMD_NET
	select CMD_PING if CMD_NET
	select CMD_PXE if CMD_NET
	select SUPPORT_RAW_INITRD
	select ENV_VARS_UBOOT_CONFIG
	select CMD_BOOTI if ARM64
	select CMD_BOOTZ if ARM && !ARM64
	imply CMD_MII if NET
	imply USB_STORAGE
	imply EFI_PARTITION
	imply ISO_PARTITION
	help
	  These are not required but are commonly needed to support a good
	  selection of booting methods. Enable this to improve the capability
	  of U-Boot to boot various images. Currently much functionality is
	  tied to enabling the command that exercises it.

config BOOTSTD
	bool "Standard boot support"
	default y
	depends on DM && OF_CONTROL && BLK
	help
	  U-Boot supports a standard way of locating something to boot,
	  typically an Operating System such as Linux, provided by a distro such
	  as Arch Linux or Debian. Enable this to support iterating through
	  available bootdevs and using bootmeths to find bootflows suitable for
	  booting.

	  Standard boot is not a standard way of booting, just a framework
	  within U-Boot for supporting all the different ways that exist.

	  Terminology:

	    - bootdev - a device which can hold a distro (e.g. MMC)
	    - bootmeth - a method to scan a bootdev to find bootflows (owned by
	        U-Boot)
	    - bootflow - a description of how to boot (owned by the distro)

config SPL_BOOTSTD
	bool "Standard boot support in SPL"
	depends on SPL && SPL_DM && SPL_OF_CONTROL && SPL_BLK
	default y if VPL
	help
	  This enables standard boot in SPL. This is neeeded so that VBE
	  (Verified Boot for Embedded) can be used, since it depends on standard
	  boot. It is enabled by default since the main purpose of VPL is to
	  handle the firmware part of VBE.

config VPL_BOOTSTD
	bool "Standard boot support in VPL"
	depends on VPL && VPL_DM && VPL_OF_CONTROL && VPL_BLK
	default y
	help
	  This enables standard boot in SPL. This is neeeded so that VBE
	  (Verified Boot for Embedded) can be used, since it depends on standard
	  boot. It is enabled by default since the main purpose of VPL is to
	  handle the firmware part of VBE.

if BOOTSTD

config BOOTSTD_FULL
	bool "Enhanced features for standard boot"
	default y if SANDBOX
	help
	  This enables various useful features for standard boot, which are not
	  essential for operation:

	  - bootdev, bootmeth commands
	  - extra features in the bootflow command
	  - support for selecting the ordering of bootmeths ("bootmeth order")
	  - support for selecting the ordering of bootdevs using the devicetree
	    as well as the "boot_targets" environment variable

config BOOTSTD_DEFAULTS
	bool "Select some common defaults for standard boot"
	depends on BOOTSTD
	imply USE_BOOTCOMMAND
	select BOOT_DEFAULTS
	select BOOTMETH_DISTRO
	help
	  These are not required but are commonly needed to support a good
	  selection of booting methods. Enable this to improve the capability
	  of U-Boot to boot various images.

config BOOTSTD_BOOTCOMMAND
	bool "Use bootstd to boot"
	default y if !DISTRO_DEFAULTS
	help
	  Enable this to select a default boot-command suitable for booting
	  with standard boot. This can be overridden by the board if needed,
	  but the default command should be enough for most boards which use
	  standard boot.

	  For now this is only selected if distro boot is NOT used, since
	  standard boot does not support all of the features of distro boot
	  yet.

config BOOTMETH_GLOBAL
	bool
	help
	  Add support for global bootmeths. This feature is used by VBE and
	  EFI bootmgr, since they take full control over which bootdevs are
	  selected to boot.

config BOOTMETH_CROS
	bool "Bootdev support for Chromium OS"
	depends on X86 || ARM || SANDBOX
	default y if !ARM
	select EFI_PARTITION
	select PARTITION_TYPE_GUID
	select PARTITION_UUIDS
	help
	  Enables support for booting Chromium OS using bootdevs. This uses the
	  kernel A slot and obtains the kernel command line from the parameters
	  provided there.

	  Note that only x86 devices are supported at present.

config BOOTMETH_EXTLINUX
	bool "Bootdev support for extlinux boot"
	select PXE_UTILS
	default y
	help
	  Enables support for extlinux boot using bootdevs. This makes the
	  bootdevs look for a 'extlinux/extlinux.conf' on each filesystem
	  they scan.

	  The specification for this filed is here:

	    https://uapi-group.org/specifications/specs/boot_loader_specification/

	  This provides a way to try out standard boot on an existing boot flow.

config BOOTMETH_EXTLINUX_PXE
	bool "Bootdev support for extlinux boot over network"
	depends on CMD_PXE && CMD_NET && DM_ETH
	default y
	help
	  Enables support for extlinux boot using bootdevs. This makes the
	  bootdevs look for a 'extlinux/extlinux.conf' on the tftp server.

	  The specification for this file is here:

	    https://uapi-group.org/specifications/specs/boot_loader_specification/

	  This provides a way to try out standard boot on an existing boot flow.

config BOOTMETH_EFILOADER
	bool "Bootdev support for EFI boot"
	depends on EFI_LOADER
	default y
	help
	  Enables support for EFI boot using bootdevs. This makes the
	  bootdevs look for a 'boot<arch>.efi' on each filesystem
	  they scan. The resulting file is booted after enabling U-Boot's
	  EFI loader support.

	  The <arch> depends on the architecture of the board:

	     aa64      - aarch64 (ARM 64-bit)
	     arm       - ARM 32-bit
	     ia32      - x86 32-bit
	     x64       - x86 64-bit
	     riscv32   - RISC-V 32-bit
	     riscv64   - RISC-V 64-bit

	  This provides a way to try out standard boot on an existing boot flow.

config BOOTMETH_VBE
	bool "Bootdev support for Verified Boot for Embedded"
	depends on FIT
	default y
	select BOOTMETH_GLOBAL
	select EVENT
	help
	  Enables support for VBE boot. This is a standard boot method which
	  supports selection of various firmware components, seleciton of an OS to
	  boot as well as updating these using fwupd.

config BOOTMETH_DISTRO
	bool  # Options needed to boot any distro
	select BOOTMETH_SCRIPT  # E.g. Armbian uses scripts
	select BOOTMETH_EXTLINUX  # E.g. Debian uses these
	select BOOTMETH_EXTLINUX_PXE if CMD_PXE && CMD_NET && DM_ETH
	select BOOTMETH_EFILOADER if EFI_LOADER # E.g. Ubuntu uses this

config SPL_BOOTMETH_VBE
	bool "Bootdev support for Verified Boot for Embedded (SPL)"
	depends on SPL && FIT
	select EVENT
	default y if VPL
	help
	  Enables support for VBE boot. This is a standard boot method which
	  supports selection of various firmware components, seleciton of an OS to
	  boot as well as updating these using fwupd.

config VPL_BOOTMETH_VBE
	bool "Bootdev support for Verified Boot for Embedded (VPL)"
	depends on VPL && FIT
	select EVENT
	default y
	help
	  Enables support for VBE boot. This is a standard boot method which
	  supports selection of various firmware components, seleciton of an OS to
	  boot as well as updating these using fwupd.

if BOOTMETH_VBE

config BOOTMETH_VBE_REQUEST
	bool "Support for serving VBE OS requests"
	default y
	help
	  Enables support for looking that the requests made by the
	  Operating System being booted. These requests result in additions to
	  the device tree /chosen node, added during the device tree fixup
	  phase.

config SPL_BOOTMETH_VBE_REQUEST
	bool "Support for serving VBE OS requests (SPL)"
	depends on SPL
	help
	  Enables support for looking that the requests made by the
	  Operating System being booted. These requests result in additions to
	  the device tree /chosen node, added during the device tree fixup
	  phase.

	  This is only useful if you are booting an OS direct from SPL.

config BOOTMETH_VBE_SIMPLE
	bool "Bootdev support for VBE 'simple' method"
	default y
	help
	  Enables support for VBE 'simple' boot. This allows updating a single
	  firmware image in boot media such as MMC. It does not support any sort
	  of rollback, recovery or A/B boot.

config BOOTMETH_VBE_SIMPLE_OS
	bool "Bootdev support for VBE 'simple' method OS phase"
	default y
	help
	  Enables support for the OS parts of VBE 'simple' boot. This includes
	  fixing up the device tree with the required VBE information, ready
	  for booting into the OS. This option is only enabled for U-Boot
	  proper, since it is the phase where device tree fixups happen.

config SPL_BOOTMETH_VBE_SIMPLE
	bool "Bootdev support for VBE 'simple' method (SPL)"
	depends on SPL
	default y if VPL
	help
	  Enables support for VBE 'simple' boot. This allows updating a single
	  firmware image in boot media such as MMC. It does not support any sort
	  of rollback, recovery or A/B boot.

config VPL_BOOTMETH_VBE_SIMPLE
	bool "Bootdev support for VBE 'simple' method (VPL)"
	depends on VPL
	default y
	help
	  Enables support for VBE 'simple' boot. This allows updating a single
	  firmware image in boot media such as MMC. It does not support any sort
	  of rollback, recovery or A/B boot.

config SPL_BOOTMETH_VBE_SIMPLE_FW
	bool "Bootdev support for VBE 'simple' method firmware phase (SPL)"
	depends on VPL
	default y
	help
	  Enables support for the firmware parts of VBE 'simple' boot. This
	  includes an SPL loader which locates the correct U-Boot to boot into.
	  This option should really only be enabled for VPL, since it is the
	  phase where the SPL + U-Boot decision should be made. But for now,
	  SPL does its own FIT-configuration selection.

config VPL_BOOTMETH_VBE_SIMPLE_FW
	bool "Bootdev support for VBE 'simple' method firmware phase (VPL)"
	depends on VPL
	default y
	help
	  Enables support for the firmware parts of VBE 'simple' boot. This
	  includes an SPL loader which locates the correct SPL to boot into.
	  This option enabled for VPL, since it is the phase where the SPL
	  decision is made.

endif # BOOTMETH_VBE

config EXPO
	bool "Support for expos - groups of scenes displaying a UI"
	depends on VIDEO
	default y if BOOTMETH_VBE
	help
	  An expo is a way of presenting and collecting information from the
	  user. It consists of a collection of 'scenes' of which only one is
	  presented at a time. An expo is typically used to show a boot menu
	  and allow settings to be changed.

	  The expo can be presented in graphics form using a vidconsole, or in
	  text form on a serial console.

config BOOTMETH_SANDBOX
	def_bool y
	depends on SANDBOX
	help
	  This is a sandbox bootmeth driver used for testing. It always returns
	  -ENOTSUPP when attempting to boot.

config BOOTMETH_SCRIPT
	bool "Bootdev support for U-Boot scripts"
	default y if BOOTSTD_FULL
	select HUSH_PARSER
	help
	  Enables support for booting a distro via a U-Boot script. This makes
	  the bootdevs look for a 'boot/boot.scr' file which can be used to
	  boot the distro.

	  This provides a way to try out standard boot on an existing boot flow.
	  It is not enabled by default to save space.

endif

config LEGACY_IMAGE_FORMAT
	bool "Enable support for the legacy image format"
	default y if !FIT_SIGNATURE && !TI_SECURE_DEVICE
	help
	  This option enables the legacy image format. It is enabled by
	  default for backward compatibility, unless FIT_SIGNATURE is
	  set where it is disabled so that unsigned images cannot be
	  loaded. If a board needs the legacy image format support in this
	  case, enable it here.

config SUPPORT_RAW_INITRD
	bool "Enable raw initrd images"
	help
	  Note, defining the SUPPORT_RAW_INITRD allows user to supply
	  kernel with raw initrd images. The syntax is slightly different, the
	  address of the initrd must be augmented by it's size, in the following
	  format: "<initrd address>:<initrd size>".

config OF_BOARD_SETUP
	bool "Set up board-specific details in device tree before boot"
	depends on OF_LIBFDT
	help
	  This causes U-Boot to call ft_board_setup() before booting into
	  the Operating System. This function can set up various
	  board-specific information in the device tree for use by the OS.
	  The device tree is then passed to the OS.

config OF_SYSTEM_SETUP
	bool "Set up system-specific details in device tree before boot"
	depends on OF_LIBFDT
	help
	  This causes U-Boot to call ft_system_setup() before booting into
	  the Operating System. This function can set up various
	  system-specific information in the device tree for use by the OS.
	  The device tree is then passed to the OS.

config OF_STDOUT_VIA_ALIAS
	bool "Update the device-tree stdout alias from U-Boot"
	depends on OF_LIBFDT
	help
	  This uses U-Boot's serial alias from the aliases node to update
	  the device tree passed to the OS. The "linux,stdout-path" property
	  in the chosen node is set to point to the correct serial node.
	  This option currently references CONFIG_CONS_INDEX, which is
	  incorrect when used with device tree as this option does not
	  exist / should not be used.

config HAVE_TEXT_BASE
	bool
	depends on !NIOS2 && !XTENSA
	depends on !EFI_APP
	default y

config TEXT_BASE
	depends on HAVE_TEXT_BASE
	default 0x0 if POSITION_INDEPENDENT
	default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
	default 0x81700000 if MACH_SUNIV
	default 0x2a000000 if MACH_SUN9I
	default 0x4a000000 if SUNXI_MINIMUM_DRAM_MB >= 256
	default 0x42e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
	hex "Text Base"
	help
	  The address in memory that U-Boot will be running from, initially.

config HAVE_SYS_MONITOR_BASE
	bool
	depends on ARC || MIPS || M68K || NIOS2 || PPC || XTENSA || X86 \
		|| ENV_IS_IN_FLASH || MTD_NOR_FLASH
	depends on !EFI_APP
	default y

config SYS_MONITOR_BASE
	depends on HAVE_SYS_MONITOR_BASE
	hex "Physical start address of boot monitor code"
	default TEXT_BASE
	help
	  The physical start address of boot monitor code (which is the same as
	  CONFIG_TEXT_BASE when linking) and the same as CFG_SYS_FLASH_BASE
	  when booting from flash.

config SPL_SYS_MONITOR_BASE
	depends on MPC85xx && SPL && HAVE_SYS_MONITOR_BASE
	hex "Physical start address of SPL monitor code"
	default SPL_TEXT_BASE

config TPL_SYS_MONITOR_BASE
	depends on MPC85xx && TPL && HAVE_SYS_MONITOR_BASE
	hex "Physical start address of TPL monitor code"

config DYNAMIC_SYS_CLK_FREQ
	bool "Determine CPU clock frequency at run-time"
	help
	  Implement a get_board_sys_clk function that will determine the CPU
	  clock frequency at run time, rather than define it statically.

config SYS_CLK_FREQ
	depends on !DYNAMIC_SYS_CLK_FREQ
	int "CPU clock frequency"
	default 125000000 if ARCH_LS1012A
	default 100000000 if ARCH_P2020 || ARCH_T1024 || ARCH_T1042 || \
			     ARCH_LS1021A || FSL_LSCH2 || FSL_LSCH3
	default 66666666 if ARCH_P1010 || ARCH_P1020 || ARCH_T4240
	default 66660000 if ARCH_T2080
	default 33333333 if RCAR_GEN3
	default 24000000 if ARCH_EXYNOS
	default 20000000 if RCAR_GEN2
	default 0
	help
	  A static value for the CPU frequency.  Note that if not required
	  for a given SoC, this can be left at 0.

config ARCH_FIXUP_FDT_MEMORY
	bool "Enable arch_fixup_memory_banks() call"
	default y
	help
	  Enable FDT memory map syncup before OS boot. This feature can be
	  used for booting OS with different memory setup where the part of
	  the memory location should be used for different purpose.

config CHROMEOS
	bool "Support booting Chrome OS"
	help
	  Chrome OS requires U-Boot to set up a table indicating the boot mode
	  (e.g. Developer mode) and a few other things. Enable this if you are
	  booting on a Chromebook to avoid getting an error about an invalid
	  firmware ID.

config CHROMEOS_VBOOT
	bool "Support Chrome OS verified boot"
	help
	  This is intended to enable the full Chrome OS verified boot support
	  in U-Boot. It is not actually implemented in the U-Boot source code
	  at present, so this option is always set to 'n'. It allows
	  distinguishing between booting Chrome OS in a basic way (developer
	  mode) and a full boot.

config SYS_RAMBOOT
	bool

config RAMBOOT_PBL
	bool "Freescale PBL(pre-boot loader) image format support"
	select SYS_RAMBOOT if PPC
	help
	  Some SoCs use PBL to load RCW and/or pre-initialization instructions.
	  For more details refer to doc/README.pblimage

choice
	prompt "Freescale PBL (or predecessor) load location"
	depends on RAMBOOT_PBL || ((TARGET_P1010RDB_PA || TARGET_P1010RDB_PB \
		|| TARGET_P1020RDB_PC || TARGET_P1020RDB_PD || TARGET_P2020RDB) \
		&& !CMD_NAND)

config SDCARD
	bool "Freescale PBL (or similar) is found on SD card"

config SPIFLASH
	bool "Freescale PBL (or similar) is found on SPI flash"

config NO_PBL
	bool "Freescale PBL (or similar) is not used in this case"

endchoice

config FSL_FIXED_MMC_LOCATION
	bool "PBL MMC is at a fixed location"
	depends on SDCARD && !RAMBOOT_PBL

config ESDHC_HC_BLK_ADDR
	def_bool y
	depends on FSL_FIXED_MMC_LOCATION && (ARCH_BSC9131 || ARCH_BSC9132 || ARCH_P1010)
	help
	  In High Capacity SD Cards (> 2 GBytes), the 32-bit source address and
	  code length of these soc specify the memory address in block address
	  format. Block length is fixed to 512 bytes as per the SD High
	  Capacity specification.

config SYS_FSL_PBL_PBI
	string "PBI(pre-boot instructions) commands for the PBL image"
	depends on RAMBOOT_PBL
	help
	  PBI commands can be used to configure SoC before it starts the execution.
	  Please refer doc/README.pblimage for more details.

config SYS_FSL_PBL_RCW
	string "Aadditional RCW (Power on reset configuration) for the PBL image"
	depends on RAMBOOT_PBL
	help
	  Enables addition of RCW (Power on reset configuration) in built image.
	  Please refer doc/README.pblimage for more details.

config SYS_BOOT_RAMDISK_HIGH
	depends on CMD_BOOTM || CMD_BOOTI || CMD_BOOTZ
	depends on !(NIOS2 || SANDBOX || SH || XTENSA)
	def_bool y
	select LMB
	help
	  Enable initrd_high functionality.  If defined then the initrd_high
	  feature is enabled and the boot* ramdisk subcommand is enabled.

endmenu		# Boot images

config DISTRO_DEFAULTS
	bool "Select defaults suitable for booting general purpose Linux distributions"
	select BOOT_DEFAULTS
	select AUTO_COMPLETE
	select CMDLINE_EDITING
	select CMD_SYSBOOT
	select HUSH_PARSER
	select SYS_LONGHELP
	help
	  Select this to enable various options and commands which are suitable
	  for building u-boot for booting general purpose Linux distributions.

menu "Boot timing"

config BOOTSTAGE
	bool "Boot timing and reporting"
	help
	  Enable recording of boot time while booting. To use it, insert
	  calls to bootstage_mark() with a suitable BOOTSTAGE_ID from
	  bootstage.h. Only a single entry is recorded for each ID. You can
	  give the entry a name with bootstage_mark_name(). You can also
	  record elapsed time in a particular stage using bootstage_start()
	  before starting and bootstage_accum() when finished. Bootstage will
	  add up all the accumulated time and report it.

	  Normally, IDs are defined in bootstage.h but a small number of
	  additional 'user' IDs can be used by passing BOOTSTAGE_ID_ALLOC
	  as the ID.

	  Calls to show_boot_progress() will also result in log entries but
	  these will not have names.

config SPL_BOOTSTAGE
	bool "Boot timing and reported in SPL"
	depends on BOOTSTAGE && SPL
	help
	  Enable recording of boot time in SPL. To make this visible to U-Boot
	  proper, enable BOOTSTAGE_STASH as well. This will stash the timing
	  information when SPL finishes and load it when U-Boot proper starts
	  up.

config TPL_BOOTSTAGE
	bool "Boot timing and reported in TPL"
	depends on BOOTSTAGE && TPL
	help
	  Enable recording of boot time in SPL. To make this visible to U-Boot
	  proper, enable BOOTSTAGE_STASH as well. This will stash the timing
	  information when TPL finishes and load it when U-Boot proper starts
	  up.

config BOOTSTAGE_REPORT
	bool "Display a detailed boot timing report before booting the OS"
	depends on BOOTSTAGE
	help
	  Enable output of a boot time report just before the OS is booted.
	  This shows how long it took U-Boot to go through each stage of the
	  boot process. The report looks something like this:

		Timer summary in microseconds:
		       Mark    Elapsed  Stage
			  0          0  reset
		  3,575,678  3,575,678  board_init_f start
		  3,575,695         17  arch_cpu_init A9
		  3,575,777         82  arch_cpu_init done
		  3,659,598     83,821  board_init_r start
		  3,910,375    250,777  main_loop
		 29,916,167 26,005,792  bootm_start
		 30,361,327    445,160  start_kernel

config BOOTSTAGE_RECORD_COUNT
	int "Number of boot stage records to store"
	depends on BOOTSTAGE
	default 30
	help
	  This is the size of the bootstage record list and is the maximum
	  number of bootstage records that can be recorded.

config SPL_BOOTSTAGE_RECORD_COUNT
	int "Number of boot stage records to store for SPL"
	depends on SPL_BOOTSTAGE
	default 5
	help
	  This is the size of the bootstage record list and is the maximum
	  number of bootstage records that can be recorded.

config TPL_BOOTSTAGE_RECORD_COUNT
	int "Number of boot stage records to store for TPL"
	depends on TPL_BOOTSTAGE
	default 5
	help
	  This is the size of the bootstage record list and is the maximum
	  number of bootstage records that can be recorded.

config BOOTSTAGE_FDT
	bool "Store boot timing information in the OS device tree"
	depends on BOOTSTAGE
	help
	  Stash the bootstage information in the FDT. A root 'bootstage'
	  node is created with each bootstage id as a child. Each child
	  has a 'name' property and either 'mark' containing the
	  mark time in microseconds, or 'accum' containing the
	  accumulated time for that bootstage id in microseconds.
	  For example:

		bootstage {
			154 {
				name = "board_init_f";
				mark = <3575678>;
			};
			170 {
				name = "lcd";
				accum = <33482>;
			};
		};

	  Code in the Linux kernel can find this in /proc/devicetree.

config BOOTSTAGE_STASH
	bool "Stash the boot timing information in memory before booting OS"
	depends on BOOTSTAGE
	help
	  Some OSes do not support device tree. Bootstage can instead write
	  the boot timing information in a binary format at a given address.
	  This happens through a call to bootstage_stash(), typically in
	  the CPU's cleanup_before_linux() function. You can use the
	  'bootstage stash' and 'bootstage unstash' commands to do this on
	  the command line.

config BOOTSTAGE_STASH_ADDR
	hex "Address to stash boot timing information"
	default 0x0
	help
	  Provide an address which will not be overwritten by the OS when it
	  starts, so that it can read this information when ready.

config BOOTSTAGE_STASH_SIZE
	hex "Size of boot timing stash region"
	default 0x1000
	help
	  This should be large enough to hold the bootstage stash. A value of
	  4096 (4KiB) is normally plenty.

config SHOW_BOOT_PROGRESS
	bool "Show boot progress in a board-specific manner"
	help
	  Defining this option allows to add some board-specific code (calling
	  a user-provided function show_boot_progress(int) that enables you to
	  show the system's boot progress on some display (for example, some
	  LEDs) on your board. At the moment, the following checkpoints are
	  implemented:

	  Legacy uImage format:

	  Arg	Where			When
	    1	common/cmd_bootm.c	before attempting to boot an image
	   -1	common/cmd_bootm.c	Image header has bad	 magic number
	    2	common/cmd_bootm.c	Image header has correct magic number
	   -2	common/cmd_bootm.c	Image header has bad	 checksum
	    3	common/cmd_bootm.c	Image header has correct checksum
	   -3	common/cmd_bootm.c	Image data   has bad	 checksum
	    4	common/cmd_bootm.c	Image data   has correct checksum
	   -4	common/cmd_bootm.c	Image is for unsupported architecture
	    5	common/cmd_bootm.c	Architecture check OK
	   -5	common/cmd_bootm.c	Wrong Image Type (not kernel, multi)
	    6	common/cmd_bootm.c	Image Type check OK
	   -6	common/cmd_bootm.c	gunzip uncompression error
	   -7	common/cmd_bootm.c	Unimplemented compression type
	    7	common/cmd_bootm.c	Uncompression OK
	    8	common/cmd_bootm.c	No uncompress/copy overwrite error
	   -9	common/cmd_bootm.c	Unsupported OS (not Linux, BSD, VxWorks, QNX)

	    9	common/image.c		Start initial ramdisk verification
	  -10	common/image.c		Ramdisk header has bad	   magic number
	  -11	common/image.c		Ramdisk header has bad	   checksum
	   10	common/image.c		Ramdisk header is OK
	  -12	common/image.c		Ramdisk data   has bad	   checksum
	   11	common/image.c		Ramdisk data   has correct checksum
	   12	common/image.c		Ramdisk verification complete, start loading
	  -13	common/image.c		Wrong Image Type (not PPC Linux ramdisk)
	   13	common/image.c		Start multifile image verification
	   14	common/image.c		No initial ramdisk, no multifile, continue.

	   15	arch/<arch>/lib/bootm.c All preparation done, transferring control to OS

	  -30	arch/powerpc/lib/board.c	Fatal error, hang the system
	  -31	post/post.c		POST test failed, detected by post_output_backlog()
	  -32	post/post.c		POST test failed, detected by post_run_single()

	   34	common/cmd_doc.c	before loading a Image from a DOC device
	  -35	common/cmd_doc.c	Bad usage of "doc" command
	   35	common/cmd_doc.c	correct usage of "doc" command
	  -36	common/cmd_doc.c	No boot device
	   36	common/cmd_doc.c	correct boot device
	  -37	common/cmd_doc.c	Unknown Chip ID on boot device
	   37	common/cmd_doc.c	correct chip ID found, device available
	  -38	common/cmd_doc.c	Read Error on boot device
	   38	common/cmd_doc.c	reading Image header from DOC device OK
	  -39	common/cmd_doc.c	Image header has bad magic number
	   39	common/cmd_doc.c	Image header has correct magic number
	  -40	common/cmd_doc.c	Error reading Image from DOC device
	   40	common/cmd_doc.c	Image header has correct magic number
	   41	common/cmd_ide.c	before loading a Image from a IDE device
	  -42	common/cmd_ide.c	Bad usage of "ide" command
	   42	common/cmd_ide.c	correct usage of "ide" command
	  -43	common/cmd_ide.c	No boot device
	   43	common/cmd_ide.c	boot device found
	  -44	common/cmd_ide.c	Device not available
	   44	common/cmd_ide.c	Device available
	  -45	common/cmd_ide.c	wrong partition selected
	   45	common/cmd_ide.c	partition selected
	  -46	common/cmd_ide.c	Unknown partition table
	   46	common/cmd_ide.c	valid partition table found
	  -47	common/cmd_ide.c	Invalid partition type
	   47	common/cmd_ide.c	correct partition type
	  -48	common/cmd_ide.c	Error reading Image Header on boot device
	   48	common/cmd_ide.c	reading Image Header from IDE device OK
	  -49	common/cmd_ide.c	Image header has bad magic number
	   49	common/cmd_ide.c	Image header has correct magic number
	  -50	common/cmd_ide.c	Image header has bad	 checksum
	   50	common/cmd_ide.c	Image header has correct checksum
	  -51	common/cmd_ide.c	Error reading Image from IDE device
	   51	common/cmd_ide.c	reading Image from IDE device OK
	   52	common/cmd_nand.c	before loading a Image from a NAND device
	  -53	common/cmd_nand.c	Bad usage of "nand" command
	   53	common/cmd_nand.c	correct usage of "nand" command
	  -54	common/cmd_nand.c	No boot device
	   54	common/cmd_nand.c	boot device found
	  -55	common/cmd_nand.c	Unknown Chip ID on boot device
	   55	common/cmd_nand.c	correct chip ID found, device available
	  -56	common/cmd_nand.c	Error reading Image Header on boot device
	   56	common/cmd_nand.c	reading Image Header from NAND device OK
	  -57	common/cmd_nand.c	Image header has bad magic number
	   57	common/cmd_nand.c	Image header has correct magic number
	  -58	common/cmd_nand.c	Error reading Image from NAND device
	   58	common/cmd_nand.c	reading Image from NAND device OK

	  -60	common/env_common.c	Environment has a bad CRC, using default

	   64	net/eth.c		starting with Ethernet configuration.
	  -64	net/eth.c		no Ethernet found.
	   65	net/eth.c		Ethernet found.

	  -80	common/cmd_net.c	usage wrong
	   80	common/cmd_net.c	before calling net_loop()
	  -81	common/cmd_net.c	some error in net_loop() occurred
	   81	common/cmd_net.c	net_loop() back without error
	  -82	common/cmd_net.c	size == 0 (File with size 0 loaded)
	   82	common/cmd_net.c	trying automatic boot
	   83	common/cmd_net.c	running "source" command
	  -83	common/cmd_net.c	some error in automatic boot or "source" command
	   84	common/cmd_net.c	end without errors

	  FIT uImage format:

	  Arg	Where			When
	  100	common/cmd_bootm.c	Kernel FIT Image has correct format
	  -100	common/cmd_bootm.c	Kernel FIT Image has incorrect format
	  101	common/cmd_bootm.c	No Kernel subimage unit name, using configuration
	  -101	common/cmd_bootm.c	Can't get configuration for kernel subimage
	  102	common/cmd_bootm.c	Kernel unit name specified
	  -103	common/cmd_bootm.c	Can't get kernel subimage node offset
	  103	common/cmd_bootm.c	Found configuration node
	  104	common/cmd_bootm.c	Got kernel subimage node offset
	  -104	common/cmd_bootm.c	Kernel subimage hash verification failed
	  105	common/cmd_bootm.c	Kernel subimage hash verification OK
	  -105	common/cmd_bootm.c	Kernel subimage is for unsupported architecture
	  106	common/cmd_bootm.c	Architecture check OK
	  -106	common/cmd_bootm.c	Kernel subimage has wrong type
	  107	common/cmd_bootm.c	Kernel subimage type OK
	  -107	common/cmd_bootm.c	Can't get kernel subimage data/size
	  108	common/cmd_bootm.c	Got kernel subimage data/size
	  -108	common/cmd_bootm.c	Wrong image type (not legacy, FIT)
	  -109	common/cmd_bootm.c	Can't get kernel subimage type
	  -110	common/cmd_bootm.c	Can't get kernel subimage comp
	  -111	common/cmd_bootm.c	Can't get kernel subimage os
	  -112	common/cmd_bootm.c	Can't get kernel subimage load address
	  -113	common/cmd_bootm.c	Image uncompress/copy overwrite error

	  120	common/image.c		Start initial ramdisk verification
	  -120	common/image.c		Ramdisk FIT image has incorrect format
	  121	common/image.c		Ramdisk FIT image has correct format
	  122	common/image.c		No ramdisk subimage unit name, using configuration
	  -122	common/image.c		Can't get configuration for ramdisk subimage
	  123	common/image.c		Ramdisk unit name specified
	  -124	common/image.c		Can't get ramdisk subimage node offset
	  125	common/image.c		Got ramdisk subimage node offset
	  -125	common/image.c		Ramdisk subimage hash verification failed
	  126	common/image.c		Ramdisk subimage hash verification OK
	  -126	common/image.c		Ramdisk subimage for unsupported architecture
	  127	common/image.c		Architecture check OK
	  -127	common/image.c		Can't get ramdisk subimage data/size
	  128	common/image.c		Got ramdisk subimage data/size
	  129	common/image.c		Can't get ramdisk load address
	  -129	common/image.c		Got ramdisk load address

	  -130	common/cmd_doc.c	Incorrect FIT image format
	  131	common/cmd_doc.c	FIT image format OK

	  -140	common/cmd_ide.c	Incorrect FIT image format
	  141	common/cmd_ide.c	FIT image format OK

	  -150	common/cmd_nand.c	Incorrect FIT image format
	  151	common/cmd_nand.c	FIT image format OK

config SPL_SHOW_BOOT_PROGRESS
	bool "Show boot progress in a board-specific manner in SPL"
	depends on SPL
	help
	  Defining this option allows to add some board-specific code (calling
	  a user-provided function show_boot_progress(int) that enables you to
	  show the system's boot progress on some display (for example, some
	  LEDs) on your board. For details see SHOW_BOOT_PROGRESS.

endmenu

menu "Boot media"

config NOR_BOOT
	bool "Support for booting from NOR flash"
	depends on NOR
	help
	  Enabling this will make a U-Boot binary that is capable of being
	  booted via NOR.  In this case we will enable certain pinmux early
	  as the ROM only partially sets up pinmux.  We also default to using
	  NOR for environment.

config NAND_BOOT
	bool "Support for booting from NAND flash"
	imply MTD_RAW_NAND
	help
	  Enabling this will make a U-Boot binary that is capable of being
	  booted via NAND flash. This is not a must, some SoCs need this,
	  some not.

config ONENAND_BOOT
	bool "Support for booting from ONENAND"
	imply MTD_RAW_NAND
	help
	  Enabling this will make a U-Boot binary that is capable of being
	  booted via ONENAND. This is not a must, some SoCs need this,
	  some not.

config QSPI_BOOT
	bool "Support for booting from QSPI flash"
	help
	  Enabling this will make a U-Boot binary that is capable of being
	  booted via QSPI flash. This is not a must, some SoCs need this,
	  some not.

config SATA_BOOT
	bool "Support for booting from SATA"
	help
	  Enabling this will make a U-Boot binary that is capable of being
	  booted via SATA. This is not a must, some SoCs need this,
	  some not.

config SD_BOOT
	bool "Support for booting from SD/EMMC"
	help
	  Enabling this will make a U-Boot binary that is capable of being
	  booted via SD/EMMC. This is not a must, some SoCs need this,
	  some not.

config SD_BOOT_QSPI
	bool "Support for booting from SD/EMMC and enable QSPI"
	help
	  Enabling this will make a U-Boot binary that is capable of being
	  booted via SD/EMMC while enabling QSPI on the platform as well. This
	  is not a must, some SoCs need this, some not.

config SPI_BOOT
	bool "Support for booting from SPI flash"
	help
	  Enabling this will make a U-Boot binary that is capable of being
	  booted via SPI flash. This is not a must, some SoCs need this,
	  some not.

endmenu

menu "Autoboot options"

config AUTOBOOT
	bool "Autoboot"
	default y
	help
	  This enables the autoboot.  See doc/README.autoboot for detail.

config BOOTDELAY
	int "delay in seconds before automatically booting"
	default 2
	depends on AUTOBOOT
	help
	  Delay before automatically running bootcmd;
	  set to 0 to autoboot with no delay, but you can stop it by key input.
	  set to -1 to disable autoboot.
	  set to -2 to autoboot with no delay and not check for abort

	  If this value is >= 0 then it is also used for the default delay
	  before starting the default entry in bootmenu. If it is < 0 then
	  a default value of 10s is used.

	  See doc/README.autoboot for details.

config AUTOBOOT_KEYED
	bool "Stop autobooting via specific input key / string"
	help
	  This option enables stopping (aborting) of the automatic
	  boot feature only by issuing a specific input key or
	  string. If not enabled, any input key will abort the
	  U-Boot automatic booting process and bring the device
	  to the U-Boot prompt for user input.

config AUTOBOOT_FLUSH_STDIN
	bool "Enable flushing stdin before starting to read the password"
	depends on AUTOBOOT_KEYED && !SANDBOX
	help
	  When this option is enabled stdin buffer will be flushed before
	  starting to read the password.
	  This can't be enabled for the sandbox as flushing stdin would
	  break the autoboot unit tests.

config AUTOBOOT_PROMPT
	string "Autoboot stop prompt"
	depends on AUTOBOOT_KEYED
	default "Autoboot in %d seconds\\n"
	help
	  This string is displayed before the boot delay selected by
	  CONFIG_BOOTDELAY starts. If it is not defined	there is no
	  output indicating that autoboot is in progress.

	  Note that this define is used as the (only) argument to a
	  printf() call, so it may contain '%' format specifications,
	  provided that it also includes, sepearated by commas exactly
	  like in a printf statement, the required arguments. It is
	  the responsibility of the user to select only such arguments
	  that are valid in the given context.

config AUTOBOOT_ENCRYPTION
	bool "Enable encryption in autoboot stopping"
	depends on AUTOBOOT_KEYED
	help
	  This option allows a string to be entered into U-Boot to stop the
	  autoboot.
	  The behavior depends whether CONFIG_CRYPT_PW from lib is enabled
	  or not.
	  In case CONFIG_CRYPT_PW is enabled, the string will be forwarded
	  to the crypt-based functionality and be compared against the
	  string in the environment variable 'bootstopkeycrypt'.
	  In case CONFIG_CRYPT_PW is disabled the string itself is hashed
	  and compared against the hash in the environment variable
	  'bootstopkeysha256'.
	  If it matches in either case then boot stops and
	  a command-line prompt is presented.
	  This provides a way to ship a secure production device which can also
	  be accessed at the U-Boot command line.

config AUTOBOOT_SHA256_FALLBACK
	bool "Allow fallback from crypt-hashed password to sha256"
	depends on AUTOBOOT_ENCRYPTION && CRYPT_PW
	help
	  This option adds support to fall back from crypt-hashed
	  passwords to checking a SHA256 hashed password in case the
	  'bootstopusesha256' environment variable is set to 'true'.

config AUTOBOOT_DELAY_STR
	string "Delay autobooting via specific input key / string"
	depends on AUTOBOOT_KEYED && !AUTOBOOT_ENCRYPTION
	help
	  This option delays the automatic boot feature by issuing
	  a specific input key or string. If CONFIG_AUTOBOOT_DELAY_STR
	  or the environment variable "bootdelaykey" is specified
	  and this string is received from console input before
	  autoboot starts booting, U-Boot gives a command prompt. The
	  U-Boot prompt will time out if CONFIG_BOOT_RETRY_TIME is
	  used, otherwise it never times out.

config AUTOBOOT_STOP_STR
	string "Stop autobooting via specific input key / string"
	depends on AUTOBOOT_KEYED && !AUTOBOOT_ENCRYPTION
	help
	  This option enables stopping (aborting) of the automatic
	  boot feature only by issuing a specific input key or
	  string. If CONFIG_AUTOBOOT_STOP_STR or the environment
	  variable "bootstopkey" is specified and this string is
	  received from console input before autoboot starts booting,
	  U-Boot gives a command prompt. The U-Boot prompt never
	  times out, even if CONFIG_BOOT_RETRY_TIME is used.

config AUTOBOOT_KEYED_CTRLC
	bool "Enable Ctrl-C autoboot interruption"
	depends on AUTOBOOT_KEYED && !AUTOBOOT_ENCRYPTION
	help
	  This option allows for the boot sequence to be interrupted
	  by ctrl-c, in addition to the "bootdelaykey" and "bootstopkey".
	  Setting this variable	provides an escape sequence from the
	  limited "password" strings.

config AUTOBOOT_NEVER_TIMEOUT
	bool "Make the password entry never time-out"
	depends on AUTOBOOT_KEYED && AUTOBOOT_ENCRYPTION && CRYPT_PW
	help
	  This option removes the timeout from the password entry
	  when the user first presses the <Enter> key before entering
	  any other character.

config AUTOBOOT_STOP_STR_ENABLE
	bool "Enable fixed string to stop autobooting"
	depends on AUTOBOOT_KEYED && AUTOBOOT_ENCRYPTION
	help
	  This option enables the feature to add a fixed stop
	  string that is defined at compile time.
	  In every case it will be tried to load the stop
	  string from the environment.
	  In case this is enabled and there is no stop string
	  in the environment, this will be used as default value.

config AUTOBOOT_STOP_STR_CRYPT
	string "Stop autobooting via crypt-hashed password"
	depends on AUTOBOOT_STOP_STR_ENABLE && CRYPT_PW
	help
	  This option adds the feature to only stop the autobooting,
	  and therefore boot into the U-Boot prompt, when the input
	  string / password matches a values that is hashed via
	  one of the supported crypt-style password hashing options
	  and saved in the environment variable "bootstopkeycrypt".

config AUTOBOOT_STOP_STR_SHA256
	string "Stop autobooting via SHA256 hashed password"
	depends on AUTOBOOT_STOP_STR_ENABLE
	help
	  This option adds the feature to only stop the autobooting,
	  and therefore boot into the U-Boot prompt, when the input
	  string / password matches a values that is encypted via
	  a SHA256 hash and saved in the environment variable
	  "bootstopkeysha256". If the value in that variable
	  includes a ":", the portion prior to the ":" will be treated
	  as a salt value.

config AUTOBOOT_USE_MENUKEY
	bool "Allow a specify key to run a menu from the environment"
	depends on !AUTOBOOT_KEYED
	help
	  If a specific key is pressed to stop autoboot, then the commands in
	  the environment variable 'menucmd' are executed before boot starts.

config AUTOBOOT_MENUKEY
	int "ASCII value of boot key to show a menu"
	default 0
	depends on AUTOBOOT_USE_MENUKEY
	help
	  If this key is pressed to stop autoboot, then the commands in the
	  environment variable 'menucmd' will be executed before boot starts.
	  For example, 33 means "!" in ASCII, so pressing ! at boot would take
	  this action.

config AUTOBOOT_MENU_SHOW
	bool "Show a menu on boot"
	depends on CMD_BOOTMENU
	help
	  This enables the boot menu, controlled by environment variables
	  defined by the board. The menu starts after running the 'preboot'
	  environmnent variable (if enabled) and before handling the boot delay.
	  See doc/usage/cmd/bootmenu.rst for more details.

config BOOTMENU_DISABLE_UBOOT_CONSOLE
	bool "Disallow bootmenu to enter the U-Boot console"
	depends on AUTOBOOT_MENU_SHOW
	help
	  If this option is enabled, user can not enter the U-Boot console from
	  bootmenu. It increases the system security.

config BOOT_RETRY
	bool "Boot retry feature"
	help
	  Allow for having the U-Boot command prompt time out and attempt
	  to boot again.  If the environment variable "bootretry" is found then
	  its value is used, otherwise the retry timeout is
	  CONFIG_BOOT_RETRY_TIME.  CONFIG_BOOT_RETRY_MIN is optional and
	  defaults to CONFIG_BOOT_RETRY_TIME. All times are in seconds.

config BOOT_RETRY_TIME
	int "Timeout in seconds before attempting to boot again"
	depends on BOOT_RETRY
	help
	  Time in seconds before the U-Boot prompt will timeout and boot will
	  be attempted again.

config BOOT_RETRY_MIN
	int "Minimum timeout in seconds for 'bootretry'"
	depends on BOOT_RETRY
	default BOOT_RETRY_TIME
	help
	  The minimum time in seconds that "bootretry" can be set to.

config RESET_TO_RETRY
	bool "Reset the board to retry autoboot"
	depends on BOOT_RETRY
	help
	  After the countdown timed out, the board will be reset to restart
	  again.

endmenu

menu "Image support"

config IMAGE_PRE_LOAD
	bool "Image pre-load support"
	help
	  Enable an image pre-load stage in the SPL.
	  This pre-load stage allows to do some manipulation
	  or check (for example signature check) on an image
	  before launching it.

config SPL_IMAGE_PRE_LOAD
	bool "Image pre-load support within SPL"
	depends on SPL && IMAGE_PRE_LOAD
	help
	  Enable an image pre-load stage in the SPL.
	  This pre-load stage allows to do some manipulation
	  or check (for example signature check) on an image
	  before launching it.

config IMAGE_PRE_LOAD_SIG
	bool "Image pre-load signature support"
	depends on IMAGE_PRE_LOAD
	select FIT_SIGNATURE
	select RSA
	select RSA_VERIFY_WITH_PKEY
	help
	  Enable signature check support in the pre-load stage.
	  For this feature a very simple header is added before
	  the image with few fields:
	  - a magic
	  - the image size
	  - the signature
	  All other information (header size, type of signature,
	  ...) are provided in the node /image/pre-load/sig of
	  u-boot.

config SPL_IMAGE_PRE_LOAD_SIG
	bool "Image pre-load signature support witin SPL"
	depends on SPL_IMAGE_PRE_LOAD && IMAGE_PRE_LOAD_SIG
	select SPL_FIT_SIGNATURE
	select SPL_RSA
	select SPL_RSA_VERIFY_WITH_PKEY
	help
	  Enable signature check support in the pre-load stage in the SPL.
	  For this feature a very simple header is added before
	  the image with few fields:
	  - a magic
	  - the image size
	  - the signature
	  All other information (header size, type of signature,
	  ...) are provided in the node /image/pre-load/sig of
	  u-boot.

endmenu

config USE_BOOTARGS
	bool "Enable boot arguments"
	help
	  Provide boot arguments to bootm command. Boot arguments are specified
	  in CONFIG_BOOTARGS option. Enable this option to be able to specify
	  CONFIG_BOOTARGS string. If this option is disabled, CONFIG_BOOTARGS
	  will be undefined and won't take any space in U-Boot image.

config BOOTARGS
	string "Boot arguments"
	depends on USE_BOOTARGS && !USE_DEFAULT_ENV_FILE
	help
	  This can be used to pass arguments to the bootm command. The value of
	  CONFIG_BOOTARGS goes into the environment value "bootargs". Note that
	  this value will also override the "chosen" node in FDT blob.

config BOOTARGS_SUBST
	bool "Support substituting strings in boot arguments"
	help
	  This allows substituting string values in the boot arguments. These
	  are applied after the commandline has been built.

	  One use for this is to insert the root-disk UUID into the command
	  line where bootargs contains "root=${uuid}"

		setenv bootargs "console= root=${uuid}"
		# Set the 'uuid' environment variable
		part uuid mmc 2:2 uuid

		# Command-line substitution will put the real uuid into the
		# kernel command line
		bootm

config USE_BOOTCOMMAND
	bool "Enable a default value for bootcmd"
	help
	  Provide a default value for the bootcmd entry in the environment.  If
	  autoboot is enabled this is what will be run automatically.  Enable
	  this option to be able to specify CONFIG_BOOTCOMMAND as a string.  If
	  this option is disabled, CONFIG_BOOTCOMMAND will be undefined and
	  won't take any space in U-Boot image.

config BOOTCOMMAND
	string "bootcmd value"
	depends on USE_BOOTCOMMAND && !USE_DEFAULT_ENV_FILE
	default "bootflow scan -lb" if BOOTSTD_DEFAULTS && CMD_BOOTFLOW_FULL
	default "bootflow scan" if BOOTSTD_DEFAULTS && !CMD_BOOTFLOW_FULL
	default "run distro_bootcmd" if !BOOTSTD_BOOTCOMMAND && DISTRO_DEFAULTS
	help
	  This is the string of commands that will be used as bootcmd and if
	  AUTOBOOT is set, automatically run.

config USE_PREBOOT
	bool "Enable preboot"
	help
	  When this option is enabled, the existence of the environment
	  variable "preboot" will be checked immediately before starting the
	  CONFIG_BOOTDELAY countdown and/or running the auto-boot command resp.
	  entering interactive mode.

	  This feature is especially useful when "preboot" is automatically
	  generated or modified. For example, the boot code can modify the
	  "preboot" when a user holds down a certain combination of keys.

config PREBOOT
	string "preboot default value"
	depends on USE_PREBOOT && !USE_DEFAULT_ENV_FILE
	default "usb start" if USB_KEYBOARD
	default ""
	help
	  This is the default of "preboot" environment variable.

config PREBOOT_DEFINED
	bool
	default y if PREBOOT != ""

config DEFAULT_FDT_FILE
	string "Default fdt file"
	help
	  This option is used to set the default fdt file to boot OS.

config SAVE_PREV_BL_FDT_ADDR
	depends on ARM
	bool "Saves fdt address, passed by the previous bootloader, to env var"
	help
	  When u-boot is used as a chain-loaded bootloader (replacing OS kernel),
	  enable this option to save fdt address, passed by the
	  previous bootloader for future use.
	  Address is saved to `prevbl_fdt_addr` environment variable.

	  If no fdt was provided by previous bootloader, no env variables
	  will be created.

config SAVE_PREV_BL_INITRAMFS_START_ADDR
	depends on ARM
	bool "Saves initramfs address, passed by the previous bootloader, to env var"
	help
	  When u-boot is used as a chain-loaded bootloader(replacing OS kernel),
	  enable this option to save initramfs address, passed by the
	  previous bootloader for future use.
	  Address is saved to `prevbl_initrd_start_addr` environment variable.

	  If no initramfs was provided by previous bootloader, no env variables
	  will be created.

menu "Configuration editor"

config CEDIT
	bool "Configuration editor"
	depends on BOOTSTD
	help
	  Provides a way to deal with board configuration and present it to
	  the user for adjustment.

	  This is intended to provide both graphical and text-based user
	  interfaces, but only graphical is support at present.

endmenu		# Configuration editor

endmenu		# Booting
