menuconfig CMDLINE
	bool "Command line interface"
	default y
	help
	  Enable U-Boot's command-line functions. This provides a means
	  to enter commands into U-Boot for a wide variety of purposes. It
	  also allows scripts (containing commands) to be executed.
	  Various commands and command categorys can be indivdually enabled.
	  Depending on the number of commands enabled, this can add
	  substantially to the size of U-Boot.

if CMDLINE

config HUSH_PARSER
	bool "Use hush shell"
	help
	  This option enables the "hush" shell (from Busybox) as command line
	  interpreter, thus enabling powerful command line syntax like
	  if...then...else...fi conditionals or `&&' and '||'
	  constructs ("shell scripts").

	  If disabled, you get the old, much simpler behaviour with a somewhat
	  smaller memory footprint.

menu "Hush flavor to use"
depends on HUSH_PARSER

config HUSH_OLD_PARSER
	bool "Use hush old parser"
	default y
	help
	  This option enables the old flavor of hush based on hush Busybox from
	  2005.

	  It is actually the default U-Boot shell when decided to use hush as shell.

config HUSH_MODERN_PARSER
	bool "Use hush modern parser"
	help
	  This option enables the new flavor of hush based on hush upstream
	  Busybox.

	  This parser is experimental and not well tested.

config HUSH_SELECTABLE
	bool
	default y if HUSH_OLD_PARSER && HUSH_MODERN_PARSER
endmenu

config CMDLINE_EDITING
	bool "Enable command line editing"
	default y
	help
	  Enable editing and History functions for interactive command line
	  input operations

config CMDLINE_PS_SUPPORT
	bool "Enable support for changing the command prompt string at run-time"
	depends on HUSH_PARSER
	help
	  Only static string in the prompt is supported so far.  The string is
	  obtained from environment variables PS1 and PS2.

config AUTO_COMPLETE
	bool "Enable auto complete using TAB"
	default y
	help
	  Enable auto completion of commands using TAB.

config SYS_LONGHELP
	bool "Enable long help messages"
	default y
	help
	  Defined when you want long help messages included
	  Do not set this option when short of memory.

config SYS_PROMPT
	string "Shell prompt"
	default "Zynq> " if ARCH_ZYNQ
	default "ZynqMP> " if ARCH_ZYNQMP
	default "=> "
	help
	  This string is displayed in the command line to the left of the
	  cursor.

config SYS_PROMPT_HUSH_PS2
	string "Hush shell secondary prompt"
	depends on HUSH_PARSER
	default "> "
	help
	  This defines the secondary prompt string, which is
	  printed when the command interpreter needs more input
	  to complete a command. Usually "> ".

config SYS_MAXARGS
	int "Maximum number arguments accepted by commands"
	default 64

config SYS_XTRACE
	bool "Command execution tracer"
	default y
	help
	  This option enables the possiblity to print all commands before
	  executing them and after all variables are evaluated (similar
	  to Bash's xtrace/'set -x' feature).
	  To enable the tracer a variable "xtrace" needs to be defined in
	  the environment.

config BUILD_BIN2C
	bool

comment "Commands"

menu "Info commands"

config CMD_ACPI
	bool "acpi"
	depends on ACPI
	default y
	help
	  List and dump ACPI tables. ACPI (Advanced Configuration and Power
	  Interface) is used mostly on x86 for providing information to the
	  Operating System about devices in the system. The tables are set up
	  by the firmware, typically U-Boot but possibly an earlier firmware
	  module, if U-Boot is chain-loaded from something else. ACPI tables
	  can also include code, to perform hardware-specific tasks required
	  by the Operating Systems. This allows some amount of separation
	  between the firmware and OS, and is particularly useful when you
	  want to make hardware changes without the OS needing to be adjusted.

config CMD_ADDRMAP
	bool "addrmap"
	depends on ADDR_MAP
	default y
	help
	  List non-identity virtual-physical memory mappings for 32-bit CPUs.

config CMD_BDI
	bool "bdinfo"
	default y
	help
	  Print board info

config CMD_BDINFO_EXTRA
	bool "bdinfo extra features"
	default y if SANDBOX || X86
	help
	  Show additional information about the board. This uses a little more
	  code space but provides more options, particularly those useful for
	  bringup, development and debugging.

config CMD_CONFIG
	bool "config"
	default SANDBOX
	select BUILD_BIN2C
	help
	  Print ".config" contents.

	  If this option is enabled, the ".config" file contents are embedded
	  in the U-Boot image and can be printed on the console by the "config"
	  command.  This provides information of which options are enabled on
	  the running U-Boot.

config CMD_CONSOLE
	bool "coninfo"
	default y
	help
	  Print console devices and information.

config CMD_CPU
	bool "cpu"
	depends on CPU
	help
	  Print information about available CPUs. This normally shows the
	  number of CPUs, type (e.g. manufacturer, architecture, product or
	  internal name) and clock frequency. Other information may be
	  available depending on the CPU driver.

config CMD_FWU_METADATA
	bool "fwu metadata read"
	depends on FWU_MULTI_BANK_UPDATE
	help
	  Command to read the metadata and dump it's contents

config CMD_HISTORY
	bool "history"
	depends on CMDLINE_EDITING
	help
	  Show the command-line history, i.e. a list of commands that are in
	  the history buffer.

config CMD_HISTORY_USE_CALLOC
	bool "dynamically allocate memory"
	default y
	depends on CMD_HISTORY
	help
	  Saying Y to this will use calloc to get the space for history
	  storing. Otherwise the history buffer will be an uninitialized
	  static array directly, without the memory allocation, and it is
	  writable after relocation to RAM. If u-boot is running from ROM
	  all the time or unsure, say Y to this.

config CMD_LICENSE
	bool "license"
	select BUILD_BIN2C
	depends on GZIP
	help
	  Print GPL license text

config CMD_PMC
	bool "pmc"
	help
	  Provides access to the Intel Power-Management Controller (PMC) so
	  that its state can be examined. This does not currently support
	  changing the state but it is still useful for debugging and seeing
	  what is going on.

config CMD_REGINFO
	bool "reginfo"
	depends on PPC
	help
	  Register dump

config CMD_TLV_EEPROM
	bool "tlv_eeprom"
	depends on I2C_EEPROM
	select CRC32
	help
	  Display and program the system EEPROM data block in ONIE Tlvinfo
	  format. TLV stands for Type-Length-Value.

config SPL_CMD_TLV_EEPROM
	bool "tlv_eeprom for SPL"
	depends on SPL_I2C_EEPROM
	select SPL_DRIVERS_MISC
	select SPL_CRC32
	help
	  Read system EEPROM data block in ONIE Tlvinfo format from SPL.

config CMD_SBI
	bool "sbi"
	depends on RISCV_SMODE && SBI_V02
	help
	  Display information about the SBI implementation.

config CMD_SMBIOS
	bool "smbios"
	depends on SMBIOS
	help
	  Display the SMBIOS information.

endmenu

menu "Boot commands"

config CMD_BOOTD
	bool "bootd"
	default y
	help
	  Run the command stored in the environment "bootcmd", i.e.
	  "bootd" does the same thing as "run bootcmd".

config CMD_BOOTM
	bool "bootm"
	default y
	help
	  Boot an application image from the memory.

config CMD_BOOTM_PRE_LOAD
       bool "enable pre-load on bootm"
       depends on CMD_BOOTM
       depends on IMAGE_PRE_LOAD
       help
	 Enable support of stage pre-load for the bootm command.
	 This stage allow to check or modify the image provided
	 to the bootm command.

config CMD_BOOTDEV
	bool "bootdev"
	depends on BOOTSTD
	default y if BOOTSTD_FULL
	help
	  Support listing available bootdevs (boot devices) which can provide an
	  OS to boot, as well as showing information about a particular one.

	  This command is not necessary for bootstd to work.

config CMD_BOOTFLOW
	bool "bootflow"
	depends on BOOTSTD
	default y
	help
	  Support scanning for bootflows available with the bootdevs. The
	  bootflows can optionally be booted.

config CMD_BOOTFLOW_FULL
	bool "bootflow - extract subcommands"
	depends on BOOTSTD_FULL
	default y
	help
	  Add the ability to list the available bootflows, select one and obtain
	  information about it.

	  This command is not necessary for bootstd to work.

config CMD_BOOTMETH
	bool "bootmeth"
	depends on BOOTSTD
	default y if BOOTSTD_FULL
	help
	  Support listing available bootmeths (methods used to boot an
	  Operating System), as well as selecting the order that the bootmeths
	  are used.

	  This command is not necessary for bootstd to work.

config BOOTM_EFI
	bool "Support booting UEFI FIT images"
	depends on EFI_BINARY_EXEC && CMD_BOOTM && FIT
	default y
	help
	  Support booting UEFI FIT images via the bootm command.

config BOOTM_ELF
	bool "Support booting ELF images"
	depends on CMD_BOOTM && LIB_ELF
	default y if LIB_ELF
	help
	  Support booting ELF images via the bootm command.

config CMD_BOOTZ
	bool "bootz"
	help
	  Boot the Linux zImage

config CMD_BOOTI
	bool "booti"
	depends on ARM64 || RISCV || SANDBOX
	default y
	help
	  Boot an AArch64 Linux Kernel image from memory.

config BOOTM_LINUX
	bool "Support booting Linux OS images"
	depends on CMD_BOOTM || CMD_BOOTZ || CMD_BOOTI
	default y
	help
	  Support booting the Linux kernel directly via a command such as bootm
	  or booti or bootz.

config BOOTM_NETBSD
	bool "Support booting NetBSD (non-EFI) loader images"
	depends on CMD_BOOTM
	default y
	help
	  Support booting NetBSD via the bootm command.

config BOOTM_OPENRTOS
	bool "Support booting OPENRTOS / FreeRTOS images"
	depends on CMD_BOOTM
	help
	  Support booting OPENRTOS / FreeRTOS via the bootm command.

config BOOTM_OSE
	bool "Support booting Enea OSE images"
	depends on (ARM && (ARM64 || CPU_V7A || CPU_V7R) || SANDBOX || PPC || X86)
	depends on CMD_BOOTM
	help
	  Support booting Enea OSE images via the bootm command.

config BOOTM_PLAN9
	bool "Support booting Plan9 OS images"
	depends on CMD_BOOTM
	default y
	help
	  Support booting Plan9 images via the bootm command.

config BOOTM_RTEMS
	bool "Support booting RTEMS OS images"
	depends on CMD_BOOTM
	default y
	help
	  Support booting RTEMS images via the bootm command.

config CMD_SEAMA
	bool "Support read SEAMA NAND images"
	depends on MTD_RAW_NAND
	help
	  Support reading NAND Seattle Image (SEAMA) images.

config CMD_VBE
	bool "vbe - Verified Boot for Embedded"
	depends on BOOTMETH_VBE
	default y if BOOTSTD_FULL
	help
	  Provides various subcommands related to VBE, such as listing the
	  available methods, looking at the state and changing which method
	  is used to boot. Updating the parameters is not currently
	  supported.

config BOOTM_VXWORKS
	bool "Support booting VxWorks OS images"
	depends on CMD_BOOTM
	default y
	help
	  Support booting VxWorks images via the bootm command.

config CMD_BOOTEFI
	bool "bootefi"
	depends on EFI_LOADER
	default y
	help
	  Boot an EFI image from memory.

if CMD_BOOTEFI
config CMD_BOOTEFI_BINARY
	bool "Allow booting an EFI binary directly"
	depends on EFI_BINARY_EXEC
	default y
	help
	  Select this option to enable direct execution of binary at 'bootefi'.
	  This subcommand will allow you to load the UEFI binary using
	  other U-Boot commands or external methods and then run it.

config CMD_BOOTEFI_BOOTMGR
	bool "UEFI Boot Manager command"
	depends on EFI_BOOTMGR
	default y
	help
	  Select this option to enable the 'bootmgr' subcommand of 'bootefi'.
	  This subcommand will allow you to select the UEFI binary to be booted
	  via UEFI variables Boot####, BootOrder, and BootNext.

config CMD_BOOTEFI_HELLO_COMPILE
	bool "Compile a standard EFI hello world binary for testing"
	default y
	help
	  This compiles a standard EFI hello world application with U-Boot so
	  that it can be used with the test/py testing framework. This is useful
	  for testing that EFI is working at a basic level, and for bringing
	  up EFI support on a new architecture.

	  No additional space will be required in the resulting U-Boot binary
	  when this option is enabled.

config CMD_BOOTEFI_HELLO
	bool "Allow booting a standard EFI hello world for testing"
	depends on CMD_BOOTEFI_BINARY && CMD_BOOTEFI_HELLO_COMPILE
	default y if CMD_BOOTEFI_SELFTEST
	help
	  This adds a standard EFI hello world application to U-Boot so that
	  it can be used with the 'bootefi hello' command. This is useful
	  for testing that EFI is working at a basic level, and for bringing
	  up EFI support on a new architecture.

source "lib/efi_selftest/Kconfig"
endif

config CMD_BOOTMENU
	bool "bootmenu"
	select MENU
	select CHARSET
	help
	  Add an ANSI terminal boot menu command.

config CMD_ADTIMG
	bool "adtimg"
	help
	  Android DTB/DTBO image manipulation commands. Read dtb/dtbo files from
	  image into RAM, dump image structure information, etc. Those dtb/dtbo
	  files should be merged in one dtb further, which needs to be passed to
	  the kernel, as part of a boot process.

config CMD_ABOOTIMG
	bool "abootimg"
	depends on ANDROID_BOOT_IMAGE
	help
	  Android Boot Image manipulation commands. Allows one to extract
	  images contained in boot.img, like kernel, ramdisk, dtb, etc, and
	  obtain corresponding meta-information from boot.img.

	  See doc/android/boot-image.rst for details.

config CMD_CEDIT
	bool "cedit - Configuration editor"
	depends on CEDIT
	default y
	help
	  Provides a command to allow editing of board configuration and
	  providing a UI for the user to adjust settings. Subcommands allow
	  loading and saving of configuration as well as showing an editor.

config CMD_ELF
	bool "bootelf, bootvx"
	default y
	select LIB_ELF
	help
	  Boot an ELF/vxWorks image from the memory.

config CMD_ELF_FDT_SETUP
	bool "Flattened Device Tree setup in bootelf cmd"
	depends on CMD_ELF
	select OF_LIBFDT
	help
	  Do FDT setup in bootelf command optionally by param -d, which
	  allows to bring additional system info (e.g. /memory node) to
	  the Operating System or application.

config CMD_FDT
	bool "Flattened Device Tree utility commands"
	default y
	depends on OF_LIBFDT
	help
	  Do FDT related setup before booting into the Operating System.

config SUPPORT_EXTENSION_SCAN
	bool

config CMD_EXTENSION
	bool "Extension board management command"
	select CMD_FDT
	depends on SUPPORT_EXTENSION_SCAN
	help
	  Enables the "extension" command, which allows to detect
	  extension boards connected to the system, and apply
	  corresponding Device Tree overlays.

config CMD_GO
	bool "go"
	default y
	help
	  Start an application at a given address.

config CMD_RUN
	bool "run"
	default y
	help
	  Run the command in the given environment variable.

config CMD_IMI
	bool "iminfo"
	default y
	help
	  Print header information for application image.

config CMD_IMLS
	bool "imls"
	depends on MTD_NOR_FLASH || FLASH_CFI_DRIVER
	help
	  List all images found in flash

config CMD_XIMG
	bool "imxtract"
	default y
	help
	  Extract a part of a multi-image.

config SYS_XIMG_LEN
	hex "imxtract max gunzip size"
	default 0x800000
	depends on CMD_XIMG && GZIP
	help
	  This provides the size of the commad-line argument area
	  used by imxtract for extracting pieces of FIT image.
	  It should be large enough to fit uncompressed size of
	  FIT piece we are extracting.

config CMD_SPL
	bool "spl export - Export boot information for Falcon boot"
	depends on SPL
	help
	  Falcon mode allows booting directly from SPL into an Operating
	  System such as Linux, thus skipping U-Boot proper. See
	  doc/README.falcon for full information about how to use this
	  command.

config CMD_SPL_NAND_OFS
	hex "Offset of OS args or dtb for Falcon-mode NAND boot"
	depends on CMD_SPL && (TPL_NAND_SUPPORT || SPL_NAND_SUPPORT)
	default 0x0
	help
	  This provides the offset of the command line arguments for Linux
	  when booting from NAND in Falcon mode.  See doc/README.falcon
	  for full information about how to use this option (and also see
	  board/gateworks/gw_ventana/README for an example).

config CMD_SPL_NOR_OFS
	hex "Offset of OS args or dtb for Falcon-mode NOR boot"
	depends on CMD_SPL && SPL_NOR_SUPPORT
	default 0x0
	help
	  This provides the offset of the command line arguments or dtb for
	  Linux when booting from NOR in Falcon mode.

config CMD_SPL_WRITE_SIZE
	hex "Size of argument area"
	depends on CMD_SPL
	default 0x2000
	help
	  This provides the size of the command-line argument area in NAND
	  flash used by Falcon-mode boot. See the documentation until CMD_SPL
	  for detail.

config CMD_THOR_DOWNLOAD
	bool "thor - TIZEN 'thor' download"
	select DFU
	select USB_FUNCTION_THOR
	depends on USB_GADGET_DOWNLOAD
	help
	  Implements the 'thor' download protocol. This is a way of
	  downloading a software update over USB from an attached host.
	  There is no documentation about this within the U-Boot source code
	  but you should be able to find something on the interwebs.

config THOR_RESET_OFF
	bool "thor: Disable reset on completion"
	depends on CMD_THOR_DOWNLOAD

config CMD_ZBOOT
	bool "zboot - x86 boot command"
	depends on ZBOOT
	default y
	help
	  With x86 machines it is common to boot a bzImage file which
	  contains both a kernel and a setup.bin file. The latter includes
	  configuration information from the dark ages which x86 boards still
	  need to pick things out of.

	  Consider using FIT in preference to this since it supports directly
	  booting both 32- and 64-bit kernels, as well as secure boot.
	  Documentation is available in doc/usage/fit/x86-fit-boot.rst.

endmenu

menu "Environment commands"

config CMD_ASKENV
	bool "ask for env variable"
	help
	  Ask for environment variable

config CMD_EXPORTENV
	bool "env export"
	default y
	help
	  Export environments.

config CMD_IMPORTENV
	bool "env import"
	default y
	help
	  Import environments.

config CMD_EDITENV
	bool "editenv"
	default y
	help
	  Edit environment variable.

config CMD_GREPENV
	bool "search env"
	help
	  Allow for searching environment variables

config CMD_SAVEENV
	bool "saveenv"
	default y
	help
	  Save all environment variables into the compiled-in persistent
	  storage.

config CMD_ERASEENV
	bool "eraseenv"
	depends on CMD_SAVEENV
	help
	  Erase environment variables from the compiled-in persistent
	  storage.

config CMD_ENV_EXISTS
	bool "env exists"
	default y
	help
	  Check if a variable is defined in the environment for use in
	  shell scripting.

config CMD_ENV_CALLBACK
	bool "env callbacks - print callbacks and their associated variables"
	help
	  Some environment variable have callbacks defined by
	  U_BOOT_ENV_CALLBACK. These are called when the variable changes.
	  For example changing "baudrate" adjust the serial baud rate. This
	  command lists the currently defined callbacks.

config CMD_ENV_FLAGS
	bool "env flags -print variables that have non-default flags"
	help
	  Some environment variables have special flags that control their
	  behaviour. For example, serial# can only be written once and cannot
	  be deleted. This command shows the variables that have special
	  flags.

config CMD_NVEDIT_EFI
	bool "env [set|print] -e - set/print UEFI variables"
	depends on EFI_LOADER
	imply HEXDUMP
	help
	  UEFI variables are encoded as some form of U-Boot variables.
	  If enabled, we are allowed to set/print UEFI variables using
	  "env" command with "-e" option without knowing details.

config CMD_NVEDIT_INDIRECT
	bool "env indirect - Sets environment value from another"

config CMD_NVEDIT_INFO
	bool "env info - print or evaluate environment information"
	help
	  Print environment information:
	  - env_valid : is environment valid
	  - env_ready : is environment imported into hash table
	  - env_use_default : is default environment used

	  This command can be optionally used for evaluation in scripts:
	  [-d] : evaluate whether default environment is used
	  [-p] : evaluate whether environment can be persisted
	  [-q] : quiet output
	  The result of multiple evaluations will be combined with AND.

config CMD_NVEDIT_LOAD
	bool "env load"
	help
	  Load all environment variables from the compiled-in persistent
	  storage.

config CMD_NVEDIT_SELECT
	bool "env select"
	help
	  Select the compiled-in persistent storage of environment variables.

endmenu

menu "Memory commands"

config CMD_BINOP
	bool "binop"
	help
	  Compute binary operations (xor, or, and) of byte arrays of arbitrary
	  size from memory and store the result in memory or the environment.

config CMD_BLOBLIST
	bool "bloblist"
	depends on BLOBLIST
	default y
	help
	  Show information about the bloblist, a collection of binary blobs
	  held in memory that persist between SPL and U-Boot. In the case of
	  x86 devices the bloblist can be used to hold ACPI tables so that they
	  remain available in memory.

config CMD_CRC32
	bool "crc32"
	default y
	select HASH
	help
	  Compute CRC32.

config CRC32_VERIFY
	bool "crc32 -v"
	depends on CMD_CRC32
	help
	  Add -v option to verify data against a crc32 checksum.

config CMD_EEPROM
	bool "eeprom - EEPROM subsystem"
	depends on DM_I2C || SYS_I2C_LEGACY
	help
	  (deprecated, needs conversion to driver model)
	  Provides commands to read and write EEPROM (Electrically Erasable
	  Programmable Read Only Memory) chips that are connected over an
	  I2C bus.

config CMD_EEPROM_LAYOUT
	bool "Enable layout-aware eeprom commands"
	depends on CMD_EEPROM
	help
	  (deprecated, needs conversion to driver model)
	  When enabled, additional eeprom sub-commands become available.

	  eeprom print - prints the contents of the eeprom in a human-readable
	  way (eeprom layout fields, and data formatted to be fit for human
	  consumption).

	  eeprom update - allows user to update eeprom fields by specifying
	  the field name, and providing the new data in a human readable format
	  (same format as displayed by the eeprom print command).

	  Both commands can either auto detect the layout, or be told which
	  layout to use.

	  Feature API:
	  __weak int parse_layout_version(char *str)
		- override to provide your own layout name parsing
	  __weak void __eeprom_layout_assign(struct eeprom_layout *layout,
			int layout_version);
		- override to setup the layout metadata based on the version
	  __weak int eeprom_layout_detect(unsigned char *data)
		- override to provide your own algorithm for detecting layout
			version
	  eeprom_field.c
		- contains various printing and updating functions for common
			types of eeprom fields. Can be used for defining
			custom layouts.

config EEPROM_LAYOUT_VERSIONS
	bool "Support specifying eeprom layout version"
	depends on CMD_EEPROM_LAYOUT
	help
	  Support specifying eeprom layout version in the 'eeprom' command
	  via the -l option.

config EEPROM_LAYOUT_HELP_STRING
	  string "Tells user what layout names are supported"
	  depends on EEPROM_LAYOUT_VERSIONS
	  default "<not defined>"
	  help
	    Help printed with the LAYOUT VERSIONS part of the 'eeprom'
	    command's help.

config SYS_I2C_EEPROM_BUS
	int "I2C bus of the EEPROM device."
	depends on CMD_EEPROM
	default 0

config SYS_I2C_EEPROM_ADDR_LEN
	int "Length in bytes of the EEPROM memory array address"
	depends on CMD_EEPROM || ID_EEPROM
	default 1
	range 1 2
	help
	  Note: This is NOT the chip address length!

config SYS_EEPROM_SIZE
	depends on CMD_EEPROM
	int "Size in bytes of the EEPROM device"
	default 256

config SYS_EEPROM_PAGE_WRITE_BITS
	int "Number of bits used to address bytes in a single page"
	depends on CMD_EEPROM || ENV_IS_IN_EEPROM
	default 8
	help
	  The EEPROM page size is 2^SYS_EEPROM_PAGE_WRITE_BITS.
	  A 64 byte page, for example would require six bits.

config SYS_EEPROM_PAGE_WRITE_DELAY_MS
	int "Number of milliseconds to delay between page writes"
	depends on CMD_EEPROM || CMD_I2C
	default 0

config LOOPW
	bool "loopw"
	help
	  Infinite write loop on address range

config CMD_MD5SUM
	bool "md5sum"
	select MD5
	select HASH
	help
	  Compute MD5 checksum.

config MD5SUM_VERIFY
	bool "md5sum -v"
	depends on CMD_MD5SUM
	help
	  Add -v option to verify data against an MD5 checksum.

config CMD_MEMINFO
	bool "meminfo"
	help
	  Display memory information.

config CMD_MEMORY
	bool "md, mm, nm, mw, cp, cmp, base, loop"
	default y
	help
	  Memory commands.
	    md - memory display
	    mm - memory modify (auto-incrementing address)
	    nm - memory modify (constant address)
	    mw - memory write (fill)
	    cp - memory copy
	    cmp - memory compare
	    base - print or set address offset
	    loop - initialize loop on address range

config CMD_MEM_SEARCH
	bool "ms - Memory search"
	help
	  Memory-search command

	  This allows searching through a region of memory looking for hex
	  data (byte, 16-bit word, 32-bit long, also 64-bit on machines that
	  support it). It is also possible to search for a string. The
	  command accepts a memory range and a list of values to search for.
	  The values need to appear in memory in the same order they are given
	  in the command. At most 10 matches can be returned at a time, but
	  pressing return will show the next 10 matches. Environment variables
	  are set for use with scripting (memmatches, memaddr, mempos).

config CMD_MX_CYCLIC
	bool "Enable cyclic md/mw commands"
	depends on CMD_MEMORY
	help
	  Add the "mdc" and "mwc" memory commands. These are cyclic
	  "md/mw" commands.
	  Examples:

	  => mdc.b 10 4 500
	  This command will print 4 bytes (10,11,12,13) each 500 ms.

	  => mwc.l 100 12345678 10
	  This command will write 12345678 to address 100 all 10 ms.

config CMD_RANDOM
	bool "random"
	default y
	depends on CMD_MEMORY && (LIB_RAND || LIB_HW_RAND)
	help
	  random - fill memory with random data

config CMD_MEMTEST
	bool "memtest"
	help
	  Simple RAM read/write test.

if CMD_MEMTEST

config SYS_ALT_MEMTEST
	bool "Alternative test"
	help
	  Use a more complete alternative memory test.

if SYS_ALT_MEMTEST

config SYS_ALT_MEMTEST_BITFLIP
	bool "Bitflip test"
	default y
	help
	  The alternative memory test includes bitflip test since 2020.07.
	  The bitflip test significantly increases the overall test time.
	  Bitflip test can optionally be disabled here.

endif

config SYS_MEMTEST_START
	hex "default start address for mtest"
	default 0x0
	help
	  This is the default start address for mtest for simple read/write
	  test. If no arguments are given to mtest, default address is used
	  as start address.

config SYS_MEMTEST_END
	hex "default end address for mtest"
	default 0x1000
	help
	  This is the default end address for mtest for simple read/write
	  test. If no arguments are given to mtest, default address is used
	  as end address.

endif

config CMD_SHA1SUM
	bool "sha1sum"
	select SHA1
	help
	  Compute SHA1 checksum.

config SHA1SUM_VERIFY
	bool "sha1sum -v"
	depends on CMD_SHA1SUM
	help
	  Add -v option to verify data against a SHA1 checksum.

config CMD_STRINGS
	bool "strings - display strings in memory"
	help
	  This works similarly to the Unix 'strings' command except that it
	  works with a memory range. String of printable characters found
	  within the range are displayed. The minimum number of characters
	  for a sequence to be considered a string can be provided.

endmenu

menu "Compression commands"

config CMD_LZMADEC
	bool "lzmadec"
	default y if CMD_BOOTI
	select LZMA
	help
	  Support decompressing an LZMA (Lempel-Ziv-Markov chain algorithm)
	  image from memory.

config CMD_UNLZ4
	bool "unlz4"
	default y if CMD_BOOTI
	select LZ4
	help
	  Support decompressing an LZ4 image from memory region.

config CMD_UNZIP
	bool "unzip"
	default y if CMD_BOOTI
	select GZIP
	help
	  Uncompress a zip-compressed memory region.

config CMD_ZIP
	bool "zip"
	select GZIP_COMPRESSED
	help
	  Compress a memory region with zlib deflate method.

endmenu

menu "Device access commands"

config CMD_ARMFFA
	bool "Arm FF-A test command"
	depends on ARM_FFA_TRANSPORT
	help
	  Provides a test command for the FF-A support
	  supported options:
		- Listing the partition(s) info
		- Sending a data pattern to the specified partition
		- Displaying the arm_ffa device info

config CMD_ARMFLASH
	bool "armflash"
	depends on FLASH_CFI_DRIVER
	help
	  ARM Ltd reference designs flash partition access

config CMD_ADC
	bool "adc - Access Analog to Digital Converters info and data"
	select ADC
	depends on DM_REGULATOR
	help
	  Shows ADC device info and permit printing one-shot analog converted
	  data from a named Analog to Digital Converter.

config CMD_BCB
	bool "bcb"
	depends on PARTITIONS
	help
	  Read/modify/write the fields of Bootloader Control Block, usually
	  stored on the flash "misc" partition with its structure defined in:
	  https://android.googlesource.com/platform/bootable/recovery/+/master/
	  bootloader_message/include/bootloader_message/bootloader_message.h

	  Some real-life use-cases include (but are not limited to):
	  - Determine the "boot reason" (and act accordingly):
	    https://source.android.com/devices/bootloader/boot-reason
	  - Get/pass a list of commands from/to recovery:
	    https://android.googlesource.com/platform/bootable/recovery
	  - Inspect/dump the contents of the BCB fields

config CMD_BIND
	bool "bind/unbind - Bind or unbind a device to/from a driver"
	depends on DM
	imply CMD_DM
	help
	  Bind or unbind a device to/from a driver from the command line.
	  This is useful in situations where a device may be handled by several
	  drivers. For example, this can be used to bind a UDC to the usb ether
	  gadget driver from the command line.

config CMD_CLK
	bool "clk - Show clock frequencies"
	help
	  (deprecated)
	  Shows clock frequences by calling a sock_clk_dump() hook function.
	  This is depreated in favour of using the CLK uclass and accessing
	  clock values from associated drivers. However currently no command
	  exists for this.

config CMD_DEMO
	bool "demo - Demonstration commands for driver model"
	depends on DM
	help
	  Provides a 'demo' command which can be used to play around with
	  driver model. To use this properly you will need to enable one or
	  both of the demo devices (DM_DEMO_SHAPE and DM_DEMO_SIMPLE).
	  Otherwise you will always get an empty list of devices. The demo
	  devices are defined in the sandbox device tree, so the easiest
	  option is to use sandbox and pass the -d point to sandbox's
	  u-boot.dtb file.

config CMD_DFU
	bool "dfu"
	select DFU
	help
	  Enables the command "dfu" which is used to have U-Boot create a DFU
	  class device via USB. This command requires that the "dfu_alt_info"
	  environment variable be set and define the alt settings to expose to
	  the host.

config CMD_DM
	bool "dm - Access to driver model information"
	depends on DM
	help
	  Provides access to driver model data structures and information,
	  such as a list of devices, list of uclasses and the state of each
	  device (e.g. activated). This is not required for operation, but
	  can be useful to see the state of driver model for debugging or
	  interest.

config CMD_FASTBOOT
	bool "fastboot - Android fastboot support"
	depends on FASTBOOT
	help
	  This enables the command "fastboot" which enables the Android
	  fastboot mode for the platform. Fastboot is a protocol for
	  downloading images, flashing and device control used on
	  Android devices. Fastboot requires either the network stack
	  enabled or support for acting as a USB device.

	  See doc/android/fastboot.rst for more information.

config CMD_FLASH
	bool "flinfo, erase, protect"
	default y
	depends on FLASH_CFI_DRIVER || MTD_NOR_FLASH
	help
	  NOR flash support.
	    flinfo - print FLASH memory information
	    erase - FLASH memory
	    protect - enable or disable FLASH write protection

config CMD_FPGA
	bool "fpga"
	depends on FPGA
	default y
	help
	  FPGA support.

config CMD_FPGA_LOADBP
	bool "fpga loadbp - load partial bitstream (Xilinx only)"
	depends on CMD_FPGA
	help
	  Supports loading an FPGA device from a bitstream buffer containing
	  a partial bitstream.

config CMD_FPGA_LOADFS
	bool "fpga loadfs - load bitstream from FAT filesystem (Xilinx only)"
	depends on CMD_FPGA
	help
	  Supports loading an FPGA device from a FAT filesystem.

config CMD_FPGA_LOADMK
	bool "fpga loadmk - load bitstream from image"
	depends on CMD_FPGA
	help
	  Supports loading an FPGA device from a image generated by mkimage.

config CMD_FPGA_LOADP
	bool "fpga loadp - load partial bitstream"
	depends on CMD_FPGA
	help
	  Supports loading an FPGA device from a bitstream buffer containing
	  a partial bitstream.

config CMD_FPGA_LOAD_SECURE
	bool "fpga loads - loads secure bitstreams"
	depends on CMD_FPGA
	select FPGA_LOAD_SECURE
	help
	  Enables the fpga loads command which is used to load secure
	  (authenticated or encrypted or both) bitstreams on to FPGA.

config CMD_FPGAD
	bool "fpgad - dump FPGA registers"
	depends on GDSYS_LEGACY_DRIVERS
	help
	  (legacy, needs conversion to driver model)
	  Provides a way to dump FPGA registers by calling the board-specific
	  fpga_get_reg() function. This functions similarly to the 'md'
	  command.

config CMD_FUSE
	bool "fuse - support for the fuse subssystem"
	help
	  (deprecated - needs conversion to driver model)
	  This allows reading, sensing, programming or overriding fuses
	  which control the behaviour of the device. The command uses the
	  fuse_...() API.

config CMD_GPIO
	bool "gpio"
	help
	  GPIO support.

config CMD_GPIO_READ
	bool "gpio read - save GPIO value to variable"
	depends on CMD_GPIO
	help
	  Enables the 'gpio read' command that saves the value
	  of a GPIO pin to a variable.

config CMD_PWM
	bool "pwm"
	depends on DM_PWM
	help
	  Control PWM channels, this allows invert/config/enable/disable PWM channels.

config CMD_GPT
	bool "GPT (GUID Partition Table) command"
	select EFI_PARTITION
	select PARTITION_UUIDS
	imply RANDOM_UUID
	help
	  Enable the 'gpt' command to ready and write GPT style partition
	  tables.

config CMD_GPT_RENAME
	bool "GPT partition renaming commands"
	depends on CMD_GPT
	help
	  Enables the 'gpt' command to interchange names on two GPT
	  partitions via the 'gpt swap' command or to rename single
	  partitions via the 'rename' command.

config CMD_IDE
	bool "ide - Support for IDE drivers"
	select IDE
	help
	  Provides an 'ide' command which allows accessing the IDE drive,
	  resetting the IDE interface, printing the partition table and
	  geting device info. It also enables the 'diskboot' command which
	  permits booting from an IDE drive.

config CMD_IO
	bool "io - Support for performing I/O accesses"
	help
	  Provides an 'iod' command to display I/O space and an 'iow' command
	  to write values to the I/O space. This can be useful for manually
	  checking the state of devices during boot when debugging device
	  drivers, etc.

config CMD_IOTRACE
	bool "iotrace - Support for tracing I/O activity"
	help
	  Provides an 'iotrace' command which supports recording I/O reads and
	  writes in a trace buffer in memory . It also maintains a checksum
	  of the trace records (even if space is exhausted) so that the
	  sequence of I/O accesses can be verified.

	  When debugging drivers it is useful to see what I/O accesses were
	  done and in what order.

	  Even if the individual accesses are of little interest it can be
	  useful to verify that the access pattern is consistent each time
	  an operation is performed. In this case a checksum can be used to
	  characterise the operation of a driver. The checksum can be compared
	  across different runs of the operation to verify that the driver is
	  working properly.

	  In particular, when performing major refactoring of the driver, where
	  the access pattern should not change, the checksum provides assurance
	  that the refactoring work has not broken the driver.

	  This works by sneaking into the io.h heder for an architecture and
	  redirecting I/O accesses through iotrace's tracing mechanism.

	  For now no commands are provided to examine the trace buffer. The
	  format is fairly simple, so 'md' is a reasonable substitute.

	  Note: The checksum feature is only useful for I/O regions where the
	  contents do not change outside of software control. Where this is not
	  suitable you can fall back to manually comparing the addresses. It
	  might be useful to enhance tracing to only checksum the accesses and
	  not the data read/written.

config CMD_I2C
	bool "i2c"
	help
	  I2C support.

config CMD_W1
	depends on W1
	default y if W1
	bool "w1 - Support for Dallas 1-Wire protocol"
	help
	  Dallas 1-wire protocol support

config CMD_LOADB
	bool "loadb"
	default y
	help
	  Load a binary file over serial line.

config CMD_LOADM
	bool "loadm"
	help
	  Load a binary over memory mapped.

config CMD_LOADS
	bool "loads - Load a file over serial in S-Record format"
	default y
	help
	  Load an S-Record file over serial line

config LOADS_ECHO
	bool "Echo all characters received during a loads back to console"
	depends on CMD_LOADS
	help
	  If enabled, all characters received during a serial download (using
	  the "loads" command) are echoed back. This might be needed by some
	  terminal emulations (like "cu"), but may as well just take time on
	  others. This sets the initial value of the "loads_echo" environment
	  variable to 1.

config CMD_SAVES
	bool "saves - Save a file over serial in S-Record format"
	depends on CMD_LOADS
	help
	  Provides a way to save a binary file using the Motorola S-Record
	  format over the serial line.

config SYS_LOADS_BAUD_CHANGE
	bool "Enable a temporary baudrate change during loads/saves command"
	depends on CMD_LOADS || CMD_SAVES

config CMD_LOADXY_TIMEOUT
	int "loadxy_timeout"
	range 0 2000
	default 90
	help
	  Initial timeout for loadx and loady commands. Zero means infinity.

config CMD_LSBLK
	depends on BLK
	bool "lsblk - list block drivers and devices"
	help
	  Print list of available block device drivers, and for each, the list
	  of known block devices.

config CMD_MBR
	bool "MBR (Master Boot Record) command"
	select DOS_PARTITION
	help
	  Enable the 'mbr' command to ready and write MBR (Master Boot Record)
	  style partition tables.

config CMD_MISC
	bool "misc"
	depends on MISC
	help
	  Enable the command "misc" for accessing miscellaneous devices with
	  a MISC uclass driver. The command provides listing all MISC devices
	  as well as read and write functionalities via their drivers.

config CMD_MMC
	bool "mmc"
	depends on MMC
	help
	  MMC memory mapped support.

if CMD_MMC

config CMD_BKOPS_ENABLE
	bool "mmc bkops enable"
	depends on CMD_MMC
	help
	  Enable command for setting manual background operations handshake
	  on a eMMC device. The feature is optionally available on eMMC devices
	  conforming to standard >= 4.41.

config CMD_MMC_REG
	bool "Enable support for reading card registers in the mmc command"
	depends on CMD_MMC
	help
	  Enable the commands for reading card registers. This is useful
	  mostly for debugging or extracting details from the card.

config CMD_MMC_RPMB
	bool "Enable support for RPMB in the mmc command"
	depends on SUPPORT_EMMC_RPMB
	help
	  Enable the commands for reading, writing and programming the
	  key for the Replay Protection Memory Block partition in eMMC.

config CMD_MMC_SWRITE
	bool "mmc swrite"
	depends on MMC_WRITE
	select IMAGE_SPARSE
	help
	  Enable support for the "mmc swrite" command to write Android sparse
	  images to eMMC.

endif

config CMD_CLONE
	bool "clone"
	depends on BLK
	help
	  Enable storage cloning over block devices, useful for
	  initial flashing by external block device without network
	  or usb support.

config CMD_OPTEE_RPMB
	bool "Enable read/write support on RPMB via OPTEE"
	depends on (SUPPORT_EMMC_RPMB && OPTEE) || SANDBOX_TEE
	default y if SANDBOX_TEE
	select OPTEE_TA_AVB if SANDBOX_TEE
	help
	  Enable the commands for reading, writing persistent named values
	  in the Replay Protection Memory Block partition in eMMC by
	  using Persistent Objects in OPTEE

config CMD_MTD
	bool "mtd"
	depends on MTD
	select MTD_PARTITIONS
	help
	  MTD commands support.

config CMD_MTD_OTP
	bool "mtd otp"
	depends on CMD_MTD
	select HEXDUMP
	help
	  MTD commands for OTP access.

config CMD_MUX
	bool "mux"
	depends on MULTIPLEXER
	help
	 List, select, and deselect mux controllers on the fly.

config CMD_NAND
	bool "nand"
	default y if NAND_SUNXI
	depends on MTD_RAW_NAND
	help
	  NAND support.

if CMD_NAND
config CMD_NAND_TRIMFFS
	bool "nand write.trimffs"
	default y if ARCH_SUNXI
	help
	  Allows one to skip empty pages when flashing something on a NAND.

config CMD_NAND_LOCK_UNLOCK
	bool "nand lock/unlock"
	help
	  NAND locking support.

config CMD_NAND_TORTURE
	bool "nand torture"
	help
	  NAND torture support.

endif # CMD_NAND

config CMD_NVME
	bool "nvme"
	depends on NVME
	default y if NVME
	help
	  NVM Express device support

config CMD_ONENAND
	bool "onenand - access to onenand device"
	depends on MTD
	help
	  OneNAND is a brand of NAND ('Not AND' gate) flash which provides
	  various useful features. This command allows reading, writing,
	  and erasing blocks. It allso provides a way to show and change
	  bad blocks, and test the device.

config USE_ONENAND_BOARD_INIT
	bool "Call onenand_board_init() in the onenand command"
	depends on CMD_ONENAND

config CMD_OSD
	bool "osd"
	help
	  Enable the 'osd' command which allows to query information from and
	  write text data to a on-screen display (OSD) device; a virtual device
	  associated with a display capable of displaying a text overlay on the
	  display it's associated with..

config CMD_PART
	bool "part"
	depends on PARTITIONS
	select PARTITION_UUIDS
	help
	  Read and display information about the partition table on
	  various media.

config CMD_PCI
	bool "pci - Access PCI devices"
	help
	  Provide access to PCI (Peripheral Interconnect Bus), a type of bus
	  used on some devices to allow the CPU to communicate with its
	  peripherals. Sub-commands allow bus enumeration, displaying and
	  changing configuration space and a few other features.

config CMD_PCI_MPS
	bool "pci_mps - Configure PCI device MPS"
	depends on PCI
	help
	  Enables PCI Express Maximum Packet Size (MPS) tuning. This
	  command configures the PCI Express MPS of each endpoint to the
	  largest value supported by all devices below the root complex.
	  The Maximum Read Request Size will not be altered. This method is
	  the same algorithm as used by Linux pci=pcie_bus_safe.

config CMD_PINMUX
	bool "pinmux - show pins muxing"
	depends on PINCTRL
	default y if PINCTRL
	help
	  Parse all available pin-controllers and show pins muxing. This
	  is useful for debug purpoer to check the pin muxing and to know if
	  a pin is configured as a GPIO or as an alternate function.

config CMD_POWEROFF
	bool "poweroff"
	help
	  Poweroff/Shutdown the system

config CMD_READ
	bool "read - Read binary data from a partition"
	help
	  Provides low-level access to the data in a partition.

config CMD_REMOTEPROC
	bool "remoteproc"
	depends on REMOTEPROC
	help
	  Support for Remote Processor control

config CMD_SATA
	bool "sata - Access SATA subsystem"
	select SATA
	help
	  SATA (Serial Advanced Technology Attachment) is a serial bus
	  standard for connecting to hard drives and other storage devices.
	  This command provides information about attached devices and allows
	  reading, writing and other operations.

	  SATA replaces PATA (originally just ATA), which stands for Parallel AT
	  Attachment, where AT refers to an IBM AT (Advanced Technology)
	  computer released in 1984.

config CMD_SCSI
	bool "scsi - Access to SCSI devices"
	depends on SCSI
	default y
	help
	  This provides a 'scsi' command which provides access to SCSI (Small
	  Computer System Interface) devices. The command provides a way to
	  scan the bus, reset the bus, read and write data and get information
	  about devices.

config CMD_SDRAM
	bool "sdram - Print SDRAM configuration information"
	help
	  Provides information about attached SDRAM. This assumed that the
	  SDRAM has an EEPROM with information that can be read using the
	  I2C bus. This is only available on some boards.

config CMD_SF
	bool "sf"
	depends on DM_SPI_FLASH || SPI_FLASH
	default y if DM_SPI_FLASH
	help
	  SPI Flash support

config CMD_SF_TEST
	bool "sf test - Allow testing of SPI flash"
	depends on CMD_SF
	help
	  Provides a way to test that SPI flash is working correctly. The
	  test is destructive, in that an area of SPI flash must be provided
	  for the test to use. Performance information is also provided,
	  measuring the performance of reading, writing and erasing in
	  Mbps (Million Bits Per Second). This value should approximately
	  equal the SPI bus speed for a single-bit-wide SPI bus, assuming
	  everything is working properly.

config CMD_SPI
	bool "sspi - Command to access spi device"
	depends on SPI
	help
	  SPI utility command.

config DEFAULT_SPI_BUS
	int "default spi bus used by sspi command"
	depends on CMD_SPI
	default 0

config DEFAULT_SPI_MODE
	hex "default spi mode used by sspi command (see include/spi.h)"
	depends on CMD_SPI
	default 0x0

config CMD_TEMPERATURE
	bool "temperature - display the temperature from thermal sensors"
	depends on DM_THERMAL
	help
	  Provides a way to list thermal sensors and to get their readings.

config CMD_TSI148
	bool "tsi148 - Command to access tsi148 device"
	depends on DM_PCI_COMPAT
	help
	  This provides various sub-commands to initialise and configure the
	  Turndra tsi148 device. See the command help for full details.

config CMD_UFS
	bool "ufs - Universal Flash Storage commands"
	depends on UFS
	help
	  "This provides commands to initialise and configure universal flash
	   subsystem devices"

config CMD_UNIVERSE
	bool "universe - Command to set up the Turndra Universe controller"
	depends on DM_PCI_COMPAT
	help
	  This allows setting up the VMEbus provided by this controller.
	  See the command help for full details.

config CMD_USB
	bool "usb"
	depends on USB_HOST
	help
	  USB support.

config CMD_USB_SDP
	bool "sdp"
	select USB_FUNCTION_SDP
	help
	  Enables the command "sdp" which is used to have U-Boot emulating the
	  Serial Download Protocol (SDP) via USB.

config CMD_RKMTD
	bool "rkmtd"
	select RKMTD
	help
	  Enable the command "rkmtd" to create a virtual block device to transfer
	  Rockchip boot block data to and from NAND with block orientated tools
	  like "ums" and "rockusb".

config CMD_ROCKUSB
	bool "rockusb"
	depends on USB_FUNCTION_ROCKUSB
	help
	  Rockusb protocol is widely used by Rockchip SoC based devices. It can
	  read/write info, image to/from devices. This enable rockusb command
	  support to communication with rockusb device. for more detail about
	  this command, please read doc/README.rockusb.

config CMD_USB_MASS_STORAGE
	bool "UMS usb mass storage"
	depends on USB_GADGET_DOWNLOAD
	select USB_FUNCTION_MASS_STORAGE
	depends on BLK && USB_GADGET
	help
	  Enables the command "ums" and the USB mass storage support to the
	  export a block device: U-Boot, the USB device, acts as a simple
	  external hard drive plugged on the host USB port.

config CMD_UMS_ABORT_KEYED
	bool "UMS abort with any key"
	depends on CMD_USB_MASS_STORAGE
	help
	  Allow interruption of usb mass storage run with any key pressed.

config CMD_PVBLOCK
	bool "Xen para-virtualized block device"
	depends on XEN
	select PVBLOCK
	help
	  Xen para-virtualized block device support

config CMD_VIRTIO
	bool "virtio"
	depends on VIRTIO
	default y if VIRTIO
	help
	  VirtIO block device support

config CMD_WDT
	bool "wdt"
	depends on WDT
	help
	  This provides commands to control the watchdog timer devices.

config CMD_WRITE
	bool "write - Write binary data to a partition"
	help
	  Provides low-level write access to a partition.

config CMD_AXI
	bool "axi"
	depends on AXI
	help
	  Enable the command "axi" for accessing AXI (Advanced eXtensible
	  Interface) busses, a on-chip interconnect specification for managing
	  functional blocks in SoC designs, which is also often used in designs
	  involving FPGAs (e.g.  communication with IP cores in Xilinx FPGAs).
endmenu


menu "Shell scripting commands"

config CMD_CAT
	bool "cat"
	help
	  Print file to standard output

config CMD_ECHO
	bool "echo"
	default y
	help
	  Echo args to console

config CMD_ITEST
	bool "itest"
	default y
	help
	  Return true/false on integer compare.

config CMD_SOURCE
	bool "source"
	default y
	help
	  Run script from memory

config CMD_SETEXPR
	bool "setexpr"
	default y
	help
	  Evaluate boolean and math expressions and store the result in an env
	    variable.
	  Also supports loading the value at a memory location into a variable.
	  If CONFIG_REGEX is enabled, setexpr also supports a gsub function.

config CMD_SETEXPR_FMT
	bool "setexpr_fmt"
	depends on CMD_SETEXPR
	help
	  Evaluate format string expression and store result in an environment
	    variable.

config CMD_XXD
	bool "xxd"
	help
	  Print file as hexdump to standard output

endmenu

menu "Android support commands"

config CMD_AB_SELECT
	bool "ab_select"
	depends on ANDROID_AB
	help
	  On Android devices with more than one boot slot (multiple copies of
	  the kernel and system images) this provides a command to select which
	  slot should be used to boot from and register the boot attempt. This
	  is used by the new A/B update model where one slot is updated in the
	  background while running from the other slot.

endmenu

if NET

menuconfig CMD_NET
	bool "Network commands"
	default y

if CMD_NET

config CMD_BOOTP
	bool "bootp"
	default y
	help
	  bootp - boot image via network using BOOTP/TFTP protocol

config CMD_DHCP
	bool "dhcp"
	depends on CMD_BOOTP
	help
	  Boot image via network using DHCP/TFTP protocol

config CMD_DHCP6
	bool "dhcp6"
	depends on IPV6
	help
	  Boot image via network using DHCPv6/TFTP protocol using IPv6.

	  Will perform 4-message exchange with DHCPv6 server, requesting
	  the minimum required options to TFTP boot. Complies with RFC 8415.

if CMD_DHCP6

config DHCP6_PXE_CLIENTARCH
	hex
	default 0x16 if ARM64
	default 0x15 if ARM
	default 0xFF

config DHCP6_PXE_DHCP_OPTION
	bool "Request & store 'pxe_configfile' from DHCP6 server"

config DHCP6_ENTERPRISE_ID
	int "Enterprise ID to send in DHCPv6 Vendor Class Option"
	default 0

endif

config BOOTP_MAY_FAIL
	bool "Allow for the BOOTP/DHCP server to not be found"
	depends on CMD_BOOTP
	help
	  If the DHCP server is not found after the configured retry count, the
	  call will fail instead of starting over.  This can be used to fail
	  over to Link-local IP address configuration if the DHCP server is not
	  available.

config BOOTP_BOOTPATH
	bool "Request & store 'rootpath' from BOOTP/DHCP server"
	default y
	depends on CMD_BOOTP
	help
	  Even though the config is called BOOTP_BOOTPATH, it stores the
	  path in the variable 'rootpath'.

config BOOTP_VENDOREX
	bool "Support vendor extensions from BOOTP/DHCP server"
	depends on CMD_BOOTP

config BOOTP_BOOTFILESIZE
	bool "Request & store 'bootfilesize' from BOOTP/DHCP server"
	depends on CMD_BOOTP

config BOOTP_DNS
	bool "Request & store 'dnsip' from BOOTP/DHCP server"
	default y
	depends on CMD_BOOTP
	help
	  The primary DNS server is stored as 'dnsip'. If two servers are
	  returned, you must set BOOTP_DNS2 to store that second server IP
	  also.

config BOOTP_DNS2
	bool "Store 'dnsip2' from BOOTP/DHCP server"
	depends on BOOTP_DNS
	help
	  If a DHCP client requests the DNS server IP from a DHCP server,
	  it is possible that more than one DNS serverip is offered to the
	  client. If CONFIG_BOOTP_DNS2 is enabled, the secondary DNS
	  server IP will be stored in the additional environment
	  variable "dnsip2". The first DNS serverip is always
	  stored in the variable "dnsip", when BOOTP_DNS is defined.

config BOOTP_GATEWAY
	bool "Request & store 'gatewayip' from BOOTP/DHCP server"
	default y
	depends on CMD_BOOTP

config BOOTP_HOSTNAME
	bool "Request & store 'hostname' from BOOTP/DHCP server"
	default y
	depends on CMD_BOOTP
	help
	  The name may or may not be qualified with the local domain name.

config BOOTP_PREFER_SERVERIP
	bool "serverip variable takes precedent over DHCP server IP."
	depends on CMD_BOOTP
	help
	  By default a BOOTP/DHCP reply will overwrite the 'serverip' variable.

	  With this option enabled, the 'serverip' variable in the environment
	  takes precedence over DHCP server IP and will only be set by the DHCP
	  server if not already set in the environment.

config BOOTP_SUBNETMASK
	bool "Request & store 'netmask' from BOOTP/DHCP server"
	default y
	depends on CMD_BOOTP

config BOOTP_NISDOMAIN
	bool "Request & store 'nisdomain' from BOOTP/DHCP server"
	depends on CMD_BOOTP

config BOOTP_NTPSERVER
	bool "Request & store 'ntpserverip' from BOOTP/DHCP server"
	depends on CMD_BOOTP

config BOOTP_TIMEOFFSET
	bool "Request & store 'timeoffset' from BOOTP/DHCP server"
	depends on CMD_BOOTP && CMD_SNTP

config CMD_PCAP
	bool "pcap capture"
	help
	  Selecting this will allow capturing all Ethernet packets and store
	  them in physical memory in a PCAP formated file,
	  later to be analyzed by PCAP reader application (IE. WireShark).

config BOOTP_PXE
	bool "Send PXE client arch to BOOTP/DHCP server"
	default y
	depends on CMD_BOOTP && CMD_PXE
	help
	  Supported for ARM, ARM64, and x86 for now.

config BOOTP_PXE_CLIENTARCH
	hex
	depends on BOOTP_PXE
	default 0x16 if ARM64
	default 0x15 if ARM
	default 0x0 if X86

config BOOTP_PXE_DHCP_OPTION
	bool "Request & store 'pxe_configfile' from BOOTP/DHCP server"
	depends on BOOTP_PXE

config BOOTP_VCI_STRING
	string
	depends on CMD_BOOTP
	default "U-Boot.armv7" if CPU_V7A || CPU_V7M || CPU_V7R
	default "U-Boot.armv8" if ARM64
	default "U-Boot.arm" if ARM
	default "U-Boot"

config CMD_TFTPBOOT
	bool "tftpboot"
	default y
	help
	  tftpboot - load file via network using TFTP protocol

config CMD_TFTPPUT
	bool "tftp put"
	depends on CMD_TFTPBOOT
	help
	  TFTP put command, for uploading files to a server

config CMD_TFTPSRV
	bool "tftpsrv"
	depends on CMD_TFTPBOOT
	help
	  Act as a TFTP server and boot the first received file

config NET_TFTP_VARS
	bool "Control TFTP timeout and count through environment"
	depends on CMD_TFTPBOOT
	default y
	help
	  If set, allows controlling the TFTP timeout through the
	  environment variable tftptimeout, and the TFTP maximum
	  timeout count through the variable tftptimeoutcountmax.
	  If unset, timeout and maximum are hard-defined as 1 second
	  and 10 timouts per TFTP transfer.

config CMD_RARP
	bool "rarpboot"
	help
	  Boot image via network using RARP/TFTP protocol

config CMD_NFS
	bool "nfs"
	help
	  Boot image via network using NFS protocol.

config NFS_TIMEOUT
	int "Timeout in milliseconds for NFS mounts"
	depends on CMD_NFS
	default 2000
	help
	  Timeout in milliseconds used in NFS protocol.  If you encounter
	  "ERROR: Cannot umount" in nfs command, try longer timeout such as
	  10000.

config SYS_DISABLE_AUTOLOAD
	bool "Disable automatically loading files over the network"
	depends on CMD_BOOTP || CMD_DHCP || CMD_NFS || CMD_RARP
	help
	  Typically, commands such as "dhcp" will attempt to automatically
	  load a file from the network, once the initial network configuration
	  is complete.  Enable this option to disable this behavior and instead
	  require files to be loaded over the network by subsequent commands.

config CMD_WGET
	bool "wget"
	select PROT_TCP
	help
	  wget is a simple command to download kernel, or other files,
	  from a http server over TCP.

config CMD_MII
	bool "mii"
	imply CMD_MDIO
	help
	  If set, allows 802.3(clause 22) MII Management functions interface access
	  The management interface specified in Clause 22 provides
	  a simple, two signal, serial interface to connect a
	  Station Management entity and a managed PHY for providing access
	  to management parameters and services.
	  The interface is referred to as the MII management interface.

config MII_INIT
	bool "Call mii_init() in the mii command"
	depends on CMD_MII && (MPC8XX_FEC || FSLDMAFE || MCFFEC)

config CMD_MDIO
	bool "mdio"
	depends on PHYLIB
	help
	  If set, allows Enable 802.3(clause 45) MDIO interface registers access
	  The MDIO interface is orthogonal to the MII interface and extends
	  it by adding access to more registers through indirect addressing.

config CMD_PING
	bool "ping"
	help
	  Send ICMP ECHO_REQUEST to network host

config CMD_PING6
	bool "ping6"
	depends on IPV6
	default y if (CMD_PING && IPV6)
	help
	  Send ICMPv6 ECHO_REQUEST to network host

config CMD_CDP
	bool "cdp"
	help
	  Perform CDP network configuration

config CMD_SNTP
	bool "sntp"
	select PROT_UDP
	help
	  Synchronize RTC via network

config CMD_DNS
	bool "dns"
	help
	  Lookup the IP of a hostname

config CMD_LINK_LOCAL
	bool "linklocal"
	select LIB_RAND
	help
	  Acquire a network IP address using the link-local protocol

config CMD_NCSI
	bool "ncsi"
	depends on PHY_NCSI
	help
	  Manually configure the attached NIC via NC-SI.
	  Normally this happens automatically before other network
	  operations.

config IPV6_ROUTER_DISCOVERY
	bool "Do IPv6 router discovery"
	depends on IPV6
	help
	  Will automatically perform router solicitation on first IPv6
	  network operation
endif

config CMD_ETHSW
	bool "ethsw"
	help
	  Allow control of L2 Ethernet switch commands. These are supported
	  by the vsc9953 Ethernet driver at present. Sub-commands allow
	  operations such as enabling / disabling a port and
	  viewing/maintaining the filtering database (FDB)

config CMD_PXE
	bool "pxe"
	select PXE_UTILS
	help
	  Boot image via network using PXE protocol

config CMD_WOL
	bool "wol"
	help
	  Wait for wake-on-lan Magic Packet

endif

menu "Misc commands"

config CMD_2048
	bool "Play 2048"
	help
	  This is a simple sliding block puzzle game designed by Italian web
	  developer Gabriele Cirulli. The game's objective is to slide numbered
	  tiles on a grid to combine them to create a tile with the number
	  2048.

	  This needs ANSI support on your terminal to work. It is not fully
	  functional on a video device.

config CMD_BMP
	bool "Enable 'bmp' command"
	depends on VIDEO
	select BMP
	help
	  This provides a way to obtain information about a BMP-format image
	  and to display it. BMP (which presumably stands for BitMaP) is a
	  file format defined by Microsoft which supports images of various
	  depths, formats and compression methods. Headers on the file
	  determine the formats used. This command can be used by first loading
	  the image into RAM, then using this command to look at it or display
	  it.

config CMD_BOOTCOUNT
	bool "bootcount"
	depends on BOOTCOUNT_LIMIT
	help
	  Enable the bootcount command, which allows interrogation and
	  reset of the bootcounter.

config CMD_BSP
	bool "Enable board-specific commands"
	help
	  (deprecated: instead, please define a Kconfig option for each command)

	  Some boards have board-specific commands which are only enabled
	  during developemnt and need to be turned off for production. This
	  option provides a way to control this. The commands that are enabled
	  vary depending on the board.

config CMD_BLOCK_CACHE
	bool "blkcache - control and stats for block cache"
	depends on BLOCK_CACHE
	default y if BLOCK_CACHE
	help
	  Enable the blkcache command, which can be used to control the
	  operation of the cache functions.
	  This is most useful when fine-tuning the operation of the cache
	  during development, but also allows the cache to be disabled when
	  it might hurt performance (e.g. when using the ums command).

config CMD_BLKMAP
	bool "blkmap - Composable virtual block devices"
	depends on BLKMAP
	default y if BLKMAP
	help
 	  Create virtual block devices that are backed by various sources,
 	  e.g. RAM, or parts of an existing block device. Though much more
 	  rudimentary, it borrows a lot of ideas from Linux's device mapper
 	  subsystem.

	  Example use-cases:
	  - Treat a region of RAM as a block device, i.e. a RAM disk. This let's
	    you extract files from filesystem images stored in RAM (perhaps as a
	    result of a TFTP transfer).
	  - Create a virtual partition on an existing device. This let's you
	    access filesystems that aren't stored at an exact partition
	    boundary. A common example is a filesystem image embedded in an FIT
	    image.

config CMD_BUTTON
	bool "button"
	depends on BUTTON
	default y if BUTTON
	help
	  Enable the 'button' command which allows to get the status of
	  buttons supported by the board. The buttonss can be listed with
	  'button list' and state can be known with 'button <label>'.
	  Any button drivers can be controlled with this command, e.g.
	  button_gpio.

config CMD_CACHE
	bool "icache or dcache"
	help
	  Enable the "icache" and "dcache" commands

config CMD_CONITRACE
	bool "conitrace - trace console input codes"
	help
	  Enable the 'conitrace' command which displays the codes received
	  from the console input as hexadecimal numbers.

config CMD_CLS
	bool "Enable clear screen command 'cls'"
	default y if LCD || VIDEO
	help
	  Enable the 'cls' command which clears the screen contents
	  on video frame buffer.

config CMD_EFIDEBUG
	bool "efidebug - display/configure UEFI environment"
	depends on EFI_LOADER
	select EFI_DEVICE_PATH_TO_TEXT
	help
	  Enable the 'efidebug' command which provides a subset of UEFI
	  shell utility with simplified functionality. It will be useful
	  particularly for managing boot parameters as  well as examining
	  various EFI status for debugging.

config CMD_EFICONFIG
	bool "eficonfig - provide menu-driven uefi variables maintenance interface"
	default y if !HAS_BOARD_SIZE_LIMIT
	depends on EFI_BOOTMGR
	select MENU
	help
	  Enable the 'eficonfig' command which provides the menu-driven UEFI
	  variable maintenance interface.

config CMD_EXCEPTION
	bool "exception - raise exception"
	depends on ARM || RISCV || SANDBOX || X86
	help
	  Enable the 'exception' command which allows to raise an exception.

config CMD_LED
	bool "led"
	depends on LED
	default y if LED
	help
	  Enable the 'led' command which allows for control of LEDs supported
	  by the board. The LEDs can be listed with 'led list' and controlled
	  with led on/off/togle/blink. Any LED drivers can be controlled with
	  this command, e.g. led_gpio.

config CMD_INI
	bool "ini"
	help
	  Enable the 'ini' command which allows a .ini file to be parsed and
	  placed into environment variables. Please check the source code for
	  this as there is no documentation.

config CMD_DATE
	bool "date"
	default y if DM_RTC
	select LIB_DATE
	help
	  Enable the 'date' command for getting/setting the time/date in RTC
	  devices.

config CMD_RTC
	bool "rtc"
	depends on DM_RTC
	help
	  Enable the 'rtc' command for low-level access to RTC devices.

config CMD_TIME
	bool "time"
	help
	  Run commands and summarize execution time.

config CMD_GETTIME
	bool "gettime - read elapsed time"
	help
	  Enable the 'gettime' command which reads the elapsed time since
	  U-Boot started running. This shows the time in seconds and
	  milliseconds. See also the 'bootstage' command which provides more
	  flexibility for boot timing.

config CMD_PAUSE
	bool "pause command"
	help
	  Delay execution waiting for any user input.
	  Useful to allow the user to read a failure log.

config CMD_RNG
	bool "rng command"
	depends on DM_RNG
	default y if SANDBOX
	select HEXDUMP
	help
	  Print bytes from the hardware random number generator.

config CMD_KASLRSEED
	bool "kaslrseed"
	depends on DM_RNG
	help
	  Set the kaslr-seed in the chosen node with entropy provided by a
	  hardware random number generator.

config CMD_SLEEP
	bool "sleep"
	default y
	help
	  Delay execution for some time

config CMD_MP
	bool "support for multiprocessor commands"
	depends on MP
	default y
	help
	  This enables commands to bringup different processors
	  in multiprocessor cases.

config CMD_TIMER
	bool "timer"
	help
	  Access the system timer.

config CMD_SOUND
	bool "sound"
	depends on SOUND
	help
	  This provides basic access to the U-Boot's sound support. The main
	  feature is to play a beep.

	     sound init   - set up sound system
	     sound play   - play a sound

config CMD_SYSBOOT
	bool "sysboot"
	select PXE_UTILS
	help
	  Boot image via local extlinux.conf file

config CMD_QFW
	bool "qfw"
	select QFW
	default y if TARGET_QEMU_ARM_32BIT || TARGET_QEMU_ARM_64BIT || \
		TARGET_QEMU_X86 || TARGET_QEMU_X86_64
	help
	  This provides access to the QEMU firmware interface.  The main
	  feature is to allow easy loading of files passed to qemu-system
	  via -kernel / -initrd

config CMD_PSTORE
	bool "pstore"
	help
	  This provides access to Linux PStore with Rammoops backend. The main
	  feature is to allow to display or save PStore records.

	  See doc/pstore.rst for more information.

if CMD_PSTORE

config CMD_PSTORE_MEM_ADDR
	hex "Memory Address"
	depends on CMD_PSTORE
	help
	  Base addr used for PStore ramoops memory, should be identical to
	  ramoops.mem_address parameter used by kernel

config CMD_PSTORE_MEM_SIZE
	hex "Memory size"
	depends on CMD_PSTORE
	default "0x10000"
	help
	  Size of PStore ramoops memory, should be identical to ramoops.mem_size
	  parameter used by kernel, a power of 2 and larger than the sum of the
	  record sizes

config CMD_PSTORE_RECORD_SIZE
	hex "Dump record size"
	depends on CMD_PSTORE
	default "0x1000"
	help
	  Size of each dump done on oops/panic, should be identical to
	  ramoops.record_size parameter used by kernel and a power of 2
	  Must be non-zero

config CMD_PSTORE_CONSOLE_SIZE
	hex "Kernel console log size"
	depends on CMD_PSTORE
	default "0x1000"
	help
	  Size of kernel console log, should be identical to
	  ramoops.console_size parameter used by kernel and a power of 2
	  Must be non-zero

config CMD_PSTORE_FTRACE_SIZE
	hex "FTrace log size"
	depends on CMD_PSTORE
	default "0x1000"
	help
	  Size of ftrace log, should be identical to ramoops.ftrace_size
	  parameter used by kernel and a power of 2

config CMD_PSTORE_PMSG_SIZE
	hex "User space message log size"
	depends on CMD_PSTORE
	default "0x1000"
	help
	  Size of user space message log, should be identical to
	  ramoops.pmsg_size parameter used by kernel and a power of 2

config CMD_PSTORE_ECC_SIZE
	int "ECC size"
	depends on CMD_PSTORE
	default "0"
	help
	if non-zero, the option enables ECC support and specifies ECC buffer
	size in bytes (1 is a special value, means 16 bytes ECC), should be
	identical to ramoops.ramoops_ecc parameter used by kernel

endif

source "cmd/mvebu/Kconfig"

config CMD_TERMINAL
	bool "terminal - provides a way to attach a serial terminal"
	help
	  Provides a 'cu'-like serial terminal command. This can be used to
	  access other serial ports from the system console. The terminal
	  is very simple with no special processing of characters. As with
	  cu, you can press ~. (tilde followed by period) to exit.

config CMD_UUID
	bool "uuid, guid - generation of unique IDs"
	select LIB_UUID
	help
	  This enables two commands:

	     uuid - generate random Universally Unique Identifier
	     guid - generate Globally Unique Identifier based on random UUID

	  The two commands are very similar except for the endianness of the
	  output.

config CMD_VIDCONSOLE
	bool "lcdputs and setcurs"
	depends on VIDEO
	default y
	help
	  Enabling this will provide 'setcurs' and 'lcdputs' commands which
	  support cursor positioning and drawing strings on the video
	  console (framebuffer).

	  The name 'lcdputs' is a bit of a misnomer, but so named because the
	  video device is often an LCD.

config CMD_SELECT_FONT
	bool "select font size"
	depends on VIDEO
	default y if CONSOLE_TRUETYPE
	help
	  Enabling this will provide 'font' command.
	  Allows font selection at runtime.

endmenu

source "cmd/ti/Kconfig"

config CMD_BOOTSTAGE
	bool "Enable the 'bootstage' command"
	depends on BOOTSTAGE
	help
	  Add a 'bootstage' command which supports printing a report
	  and un/stashing of bootstage data.

menu "Power commands"
config CMD_PMIC
	bool "Enable Driver Model PMIC command"
	depends on DM_PMIC
	help
	  This is the pmic command, based on a driver model pmic's API.
	  Command features are unchanged:
	  - list               - list pmic devices
	  - pmic dev <id>      - show or [set] operating pmic device (NEW)
	  - pmic dump          - dump registers
	  - pmic read address  - read byte of register at address
	  - pmic write address - write byte to register at address
	  The only one change for this command is 'dev' subcommand.

config CMD_REGULATOR
	bool "Enable Driver Model REGULATOR command"
	depends on DM_REGULATOR
	help
	  This command is based on driver model regulator's API.
	  User interface features:
	  - list               - list regulator devices
	  - regulator dev <id> - show or [set] operating regulator device
	  - regulator info     - print constraints info
	  - regulator status   - print operating status
	  - regulator value <val] <-f> - print/[set] voltage value [uV]
	  - regulator current <val>    - print/[set] current value [uA]
	  - regulator mode <id>        - print/[set] operating mode id
	  - regulator enable           - enable the regulator output
	  - regulator disable          - disable the regulator output

	  The '-f' (force) option can be used for set the value which exceeds
	  the limits, which are found in device-tree and are kept in regulator's
	  uclass plat structure.

endmenu

menu "Security commands"
config CMD_AES
	bool "Enable the 'aes' command"
	select AES
	help
	  This provides a means to encrypt and decrypt data using the AES
	  (Advanced Encryption Standard). This algorithm uses a symetric key
	  and is widely used as a streaming cipher. Different key lengths are
	  supported by the algorithm but this command only supports 128 bits
	  at present.

config CMD_BLOB
	bool "Enable the 'blob' command"
	depends on !MX6ULL && !MX6SLL && !MX6SL
	select IMX_HAB if ARCH_MX6 || ARCH_MX7 || ARCH_MX7ULP || ARCH_IMX8M
	help
	  This is used with the Freescale secure boot mechanism.

	  Freescale's SEC block has built-in Blob Protocol which provides
	  a method for protecting user-defined data across system power
	  cycles. SEC block protects data in a data structure called a Blob,
	  which provides both confidentiality and integrity protection.

	  Encapsulating data as a blob
	  Each time that the Blob Protocol is used to protect data, a
	  different randomly generated key is used to encrypt the data.
	  This random key is itself encrypted using a key which is derived
	  from SoC's non-volatile secret key and a 16 bit Key identifier.
	  The resulting encrypted key along with encrypted data is called a
	  blob. The non-volatile secure key is available for use only during
	  secure boot.

	  During decapsulation, the reverse process is performed to get back
	  the original data.

	  Sub-commands:
	    blob enc - encapsulating data as a cryptgraphic blob
	    blob dec - decapsulating cryptgraphic blob to get the data

	  Syntax:

	  blob enc src dst len km

	  Encapsulate and create blob of data $len bytes long
	  at address $src and store the result at address $dst.
	  $km is the 16 byte key modifier is also required for
	  generation/use as key for cryptographic operation. Key
	  modifier should be 16 byte long.

	  blob dec src dst len km

	  Decapsulate the  blob of data at address $src and
	  store result of $len byte at addr $dst.
	  $km is the 16 byte key modifier is also required for
	  generation/use as key for cryptographic operation. Key
	  modifier should be 16 byte long.

config CMD_HASH
	bool "Support 'hash' command"
	select HASH
	help
	  This provides a way to hash data in memory using various supported
	  algorithms (such as SHA1, MD5, CRC32). The computed digest can be
	  saved to memory or to an environment variable. It is also possible
	  to verify a hash against data in memory.

config CMD_HVC
	bool "Support the 'hvc' command"
	depends on ARM_SMCCC
	help
	  Allows issuing Hypervisor Calls (HVCs). Mostly useful for
	  development and testing.

config CMD_SMC
	bool "Support the 'smc' command"
	depends on ARM_SMCCC
	help
	  Allows issuing Secure Monitor Calls (SMCs). Mostly useful for
	  development and testing.

config HASH_VERIFY
	bool "hash -v"
	depends on CMD_HASH
	help
	  Add -v option to verify data against a hash.

config CMD_SCP03
	bool "scp03 - SCP03 enable and rotate/provision operations"
	depends on SCP03
	help
	  This command provides access to a Trusted Application
	  running in a TEE to request Secure Channel Protocol 03
	  (SCP03) enablement and/or rotation of its SCP03 keys.

config CMD_TPM_V1
	bool

config CMD_TPM_V2
	bool

config CMD_TPM
	bool "Enable the 'tpm' command"
	depends on TPM_V1 || TPM_V2
	select CMD_TPM_V1 if TPM_V1
	select CMD_TPM_V2 if TPM_V2
	help
	  This provides a means to talk to a TPM from the command line. A wide
	  range of commands if provided - see 'tpm help' for details. The
	  command requires a suitable TPM on your board and the correct driver
	  must be enabled.

if CMD_TPM

config CMD_TPM_TEST
	bool "Enable the 'tpm test' command"
	depends on TPM_V1
	help
	  This provides a a series of tests to confirm that the TPMv1.x is
	  working correctly. The tests cover initialisation, non-volatile RAM,
	  extend, global lock and checking that timing is within expectations.
	  The tests pass correctly on Infineon TPMs but may need to be adjusted
	  for other devices.

endif

endmenu

menu "Firmware commands"
config CMD_CROS_EC
	bool "Enable crosec command"
	depends on CROS_EC
	default y
	help
	  Enable command-line access to the Chrome OS EC (Embedded
	  Controller). This provides the 'crosec' command which has
	  a number of sub-commands for performing EC tasks such as
	  updating its flash, accessing a small saved context area
	  and talking to the I2C bus behind the EC (if there is one).

config CMD_SCMI
	bool "Enable scmi command"
	depends on SCMI_FIRMWARE
	help
	  This command provides user interfaces to several SCMI (System
	  Control and Management Interface) protocols available on Arm
	  platforms to manage system resources.
endmenu

menu "Filesystem commands"
config CMD_BTRFS
	bool "Enable the 'btrsubvol' command"
	select FS_BTRFS
	help
	  This enables the 'btrsubvol' command to list subvolumes
	  of a BTRFS filesystem. There are no special commands for
	  listing BTRFS directories or loading BTRFS files - this
	  can be done by the generic 'fs' commands (see CMD_FS_GENERIC)
	  when BTRFS is enabled (see FS_BTRFS).

config CMD_CBFS
	bool "Enable the 'cbfs' command"
	depends on FS_CBFS
	help
	  Define this to enable support for reading from a Coreboot
	  filesystem. This is a ROM-based filesystem used for accessing files
	  on systems that use coreboot as the first boot-loader and then load
	  U-Boot to actually boot the Operating System. Available commands are
	  cbfsinit, cbfsinfo, cbfsls and cbfsload.

config CMD_CRAMFS
	bool "Enable the 'cramfs' command"
	depends on FS_CRAMFS
	help
	  This provides commands for dealing with CRAMFS (Compressed ROM
	  filesystem). CRAMFS is useful when space is tight since files are
	  compressed. Two commands are provided:

	     cramfsls   - lists files in a cramfs image
	     cramfsload - loads a file from a cramfs image

config CMD_EROFS
	bool "EROFS command support"
	select FS_EROFS
	help
	  Support for the EROFS fs

config CMD_EXT2
	bool "ext2 command support"
	select FS_EXT4
	help
	  Enables EXT2 FS command

config CMD_EXT4
	bool "ext4 command support"
	select FS_EXT4
	help
	  Enables EXT4 FS command

config CMD_EXT4_WRITE
	depends on CMD_EXT4
	bool "ext4 write command support"
	select EXT4_WRITE
	help
	  Enables EXT4 FS write command

config CMD_FAT
	bool "FAT command support"
	select FS_FAT
	help
	  Support for the FAT fs

config CMD_SQUASHFS
	bool "SquashFS command support"
	select FS_SQUASHFS
	help
	  Enables SquashFS filesystem commands (e.g. load, ls).

config CMD_FS_GENERIC
	bool "filesystem commands"
	help
	  Enables filesystem commands (e.g. load, ls) that work for multiple
	  fs types.

config CMD_FS_UUID
	bool "fsuuid command"
	help
	  Enables fsuuid command for filesystem UUID.

config CMD_JFFS2
	bool "jffs2 command"
	select FS_JFFS2
	help
	  Enables commands to support the JFFS2 (Journalling Flash File System
	  version 2) filesystem. This enables fsload, ls and fsinfo which
	  provide the ability to load files, list directories and obtain
	  filesystem information.

config JFFS2_DEV
	string "Default device for JFFS2"
	depends on CMD_JFFS2
	default "nor0"
	help
	  The default device to use with the jffs2 command.

config JFFS2_PART_OFFSET
	hex "Default offset within flash to locate the JFFS2 image"
	depends on CMD_JFFS2
	default 0x0
	help
	  The default offset within flash to locate the JFFS2 image.

config JFFS2_PART_SIZE
	hex "Default size of JFFS2 partition"
	depends on CMD_JFFS2
	default 0xFFFFFFFF
	help
	  The default size of the JFFS2 partition

config CMD_MTDPARTS
	bool "MTD partition support"
	depends on MTD
	select MTD_PARTITIONS
	help
	  MTD partitioning tool support.
	  It is strongly encouraged to avoid using this command
	  anymore along with 'sf', 'nand', 'onenand'. One can still
	  declare the partitions in the mtdparts environment variable
	  but better use the MTD stack and the 'mtd' command instead.

config CMD_MTDPARTS_SPREAD
	bool "Padd partition size to take account of bad blocks"
	depends on CMD_MTDPARTS
	help
	  This enables the 'spread' sub-command of the mtdparts command.
	  This command will modify the existing mtdparts variable by increasing
	  the size of the partitions such that 1) each partition's net size is
	  at least as large as the size specified in the mtdparts variable and
	  2) each partition starts on a good block.

config CMD_MTDPARTS_SHOW_NET_SIZES
	bool "Show net size (w/o bad blocks) of partitions"
	depends on CMD_MTDPARTS
	help
	  Adds two columns to the printed partition table showing the
	  effective usable size of a partition, if bad blocks are taken
	  into account.

config MTDIDS_DEFAULT
	string "Default MTD IDs"
	depends on MTD || SPI_FLASH
	depends on !SYS_MTDPARTS_RUNTIME
	help
	  Defines a default MTD IDs list for use with MTD partitions in the
	  Linux MTD command line partitions format.

config MTDPARTS_DEFAULT
	string "Default MTD partition scheme"
	depends on MTD || SPI_FLASH
	depends on !SYS_MTDPARTS_RUNTIME
	help
	  Defines a default MTD partitioning scheme in the Linux MTD command
	  line partitions format

config CMD_YAFFS2
	bool "yaffs2 - Access of YAFFS2 filesystem"
	depends on YAFFS2
	default y
	help
	  This provides commands for accessing a YAFFS2 filesystem. Yet
	  Another Flash Filesystem 2 is a filesystem designed specifically
	  for NAND flash. It incorporates bad-block management and ensures
	  that device writes are sequential regardless of filesystem
	  activity.

config CMD_ZFS
	bool "zfs - Access of ZFS filesystem"
	help
	  This provides commands to accessing a ZFS filesystem, commonly used
	  on Solaris systems. Two sub-commands are provided:

	    zfsls - list files in a directory
	    zfsload - load a file

	  See doc/README.zfs for more details.

endmenu

menu "Debug commands"

config CMD_CBSYSINFO
	bool "cbsysinfo"
	depends on X86
	default y if SYS_COREBOOT
	help
	  This provides information about the coreboot sysinfo table stored in
	  memory by coreboot before jumping to U-Boot. It can be useful for
	  debugging the beaaviour of coreboot or U-Boot.

config CMD_CYCLIC
	bool "cyclic - Show information about cyclic functions"
	depends on CYCLIC
	default y
	help
	  This enables the 'cyclic' command which provides information about
	  cyclic execution functions. This infrastructure allows registering
	  functions to be executed cyclically, e.g. every 100ms. These commands
	  are supported:

	    cyclic list - list cyclic functions
	    cyclic cyclic demo <cycletime_ms> <delay_us> - register cyclic
		demo function

	  See doc/develop/cyclic.rst for more details.

config CMD_DIAG
	bool "diag - Board diagnostics"
	help
	  This command provides access to board diagnostic tests. These are
	  called Power-on Self Tests (POST). The command allows listing of
	  available tests and running either all the tests, or specific tests
	  identified by name.

config CMD_EVENT
	bool "event - Show information about events"
	depends on EVENT
	default y if EVENT_DEBUG
	help
	  This enables the 'event' command which provides information about
	  events and event-handler routines. This can help to device event
	  hadling.

config CMD_IRQ
	bool "irq - Show information about interrupts"
	depends on !ARM && !MIPS && !RISCV && !SH
	help
	  This enables two commands:

	     interrupts - enable or disable interrupts
	     irqinfo - print device-specific interrupt information

config CMD_KGDB
	bool "kgdb - Allow debugging of U-Boot with gdb"
	depends on PPC
	help
	  This enables a 'kgdb' command which allows gdb to connect to U-Boot
	  over a serial link for debugging purposes. This allows
	  single-stepping, inspecting variables, etc. This is supported only
	  on PowerPC at present.

config CMD_LOG
	bool "log - Generation, control and access to logging"
	select LOG
	select GETOPT
	help
	  This provides access to logging features. It allows the output of
	  log data to be controlled to a limited extent (setting up the default
	  maximum log level for emitting of records). It also provides access
	  to a command used for testing the log system.

config CMD_TRACE
	bool "trace - Support tracing of function calls and timing"
	depends on TRACE
	default y
	help
	  Enables a command to control using of function tracing within
	  U-Boot. This allows recording of call traces including timing
	  information. The command can write data to memory for exporting
	  for analysis (e.g. using bootchart). See doc/develop/trace.rst
	  for full details.

config CMD_AVB
	bool "avb - Android Verified Boot 2.0 operations"
	depends on AVB_VERIFY
	help
	  Enables a "avb" command to perform verification of partitions using
	  Android Verified Boot 2.0 functionality. It includes such subcommands:
	    avb init - initialize avb2 subsystem
	    avb read_rb - read rollback index
	    avb write_rb - write rollback index
	    avb is_unlocked - check device lock state
	    avb get_uuid - read and print uuid of a partition
	    avb read_part - read data from partition
	    avb read_part_hex - read data from partition and output to stdout
	    avb write_part - write data to partition
	    avb verify - run full verification chain

config CMD_STACKPROTECTOR_TEST
	bool "Test command for stack protector"
	depends on STACKPROTECTOR
	help
	  Enable stackprot_test command
	  The stackprot_test command will force a stack overrun to test
	  the stack smashing detection mechanisms.

endmenu

config CMD_UBI
	tristate "Enable UBI - Unsorted block images commands"
	select MTD_UBI
	help
	  UBI is a software layer above MTD layer which admits use of LVM-like
	  logical volumes on top of MTD devices, hides some complexities of
	  flash chips like wear and bad blocks and provides some other useful
	  capabilities. Please, consult the MTD web site for more details
	  (www.linux-mtd.infradead.org). Activate this option if you want
	  to use U-Boot UBI commands.
	  It is also strongly encouraged to also enable CONFIG_MTD to get full
	  partition support.

config CMD_UBI_RENAME
       bool "Enable rename"
       depends on CMD_UBI
       help
	 Enable a "ubi" command to rename ubi volume:
	   ubi rename <oldname> <newname>

config CMD_UBIFS
	tristate "Enable UBIFS - Unsorted block images filesystem commands"
	depends on CMD_UBI
	default y if CMD_UBI
	select LZO
	select GZIP
	help
	  UBIFS is a file system for flash devices which works on top of UBI.

config MMC_SPEED_MODE_SET
	bool "set speed mode using mmc command"
	depends on CMD_MMC
	help
	  Enable setting speed mode using mmc rescan and mmc dev commands.
	  The speed mode is provided as the last argument in these commands
	  and is indicated using the index from enum bus_mode in
	  include/mmc.h. A speed mode can be set only if it has already
	  been enabled in the device tree.

config CMD_MESON
	bool "Amlogic Meson commands"
	depends on ARCH_MESON
	default y
	help
	  Enable useful commands for the Meson Soc family developed by Amlogic Inc.

endif
