menu "Command line interface"

config CMDLINE
	bool "Support U-Boot commands"
	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.

config HUSH_PARSER
	bool "Use hush shell"
	depends on CMDLINE
	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.

config CMDLINE_EDITING
	bool "Enable command line editing"
	depends on CMDLINE
	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"
	depends on CMDLINE
	default y
	help
	  Enable auto completion of commands using TAB.

config SYS_LONGHELP
	bool "Enable long help messages"
	depends on CMDLINE
	default y if CMDLINE
	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 16

config SYS_CBSIZE
	int "Console input buffer size"
	default 2048 if ARCH_TEGRA || ARCH_VERSAL || ARCH_ZYNQ || ARCH_ZYNQMP || \
		RCAR_GEN3 || TARGET_SOCFPGA_SOC64
	default 512 if ARCH_MX5 || ARCH_MX6 || ARCH_MX7 || FSL_LSCH2 || \
		FSL_LSCH3 || X86
	default 256 if M68K || PPC
	default 1024

config SYS_PBSIZE
	int "Buffer size for console output"
	default 1024 if ARCH_SUNXI
	default 1044

config SYS_XTRACE
	bool "Command execution tracer"
	depends on CMDLINE
	default y if CMDLINE
	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 ACPIGEN
	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_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_LICENSE
	bool "license"
	select BUILD_BIN2C
	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.

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
       default n
       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 if BOOTSTD_FULL
	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 bootmethds (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 CMD_BOOTEFI && CMD_BOOTM && FIT
	default y
	help
	  Support booting UEFI FIT images via the bootm command.

config CMD_BOOTZ
	bool "bootz"
	help
	  Boot the Linux zImage

config CMD_BOOTI
	bool "booti"
	depends on ARM64 || RISCV
	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_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 SYS_BOOTM_LEN
	hex "Maximum size of a decompresed OS image"
	depends on CMD_BOOTM || CMD_BOOTI || CMD_BOOTZ
	default 0x4000000 if PPC || ARM64
	default 0x1000000 if X86 || ARCH_MX6 || ARCH_MX7
	default 0x800000
	help
	  This is the maximum size of the buffer that is used to decompress the OS
	  image in to, if passing a compressed image to bootm/booti/bootz.

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

config CMD_BOOTEFI_HELLO_COMPILE
	bool "Compile a standard EFI hello world binary for testing"
	depends on CMD_BOOTEFI && !CPU_V7M
	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_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

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_ELF
	bool "bootelf, bootvx"
	default y
	select LIB_ELF
	help
	  Boot an ELF/vxWorks image from the memory.

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"
	help
	  List all images found in flash

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

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

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 0
	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 0
	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
	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 CMD_ZBOOT
	bool "zboot - x86 boot command"
	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/uImage.FIT/x86-fit-boot.txt

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"
	default y if BLOBLIST
	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"
	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_HELP_STRING
	  string "Tells user what layout names are supported"
	  depends on CMD_EEPROM_LAYOUT
	  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
	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
	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_ARMFLASH
	#depends on FLASH_CFI_DRIVER
	bool "armflash"
	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 MMC
	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
	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 MTD || 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"
	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 RANDOM_UUID
	bool "GPT Random UUID generation"
	select LIB_UUID
	help
	  Enable the generation of partitions with random UUIDs if none
	  are provided.

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"
	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_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
	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_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_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"
	default y if SCSI
	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 0

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"
	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 "Enable UFS - Universal Flash Subsystem 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"
	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_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_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_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.

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
	imply NETDEVICES

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 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 0 if X86

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"
	default y
	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.

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_BMP
	bool "Enable 'bmp' command"
	depends on VIDEO
	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_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"
	depends on CMD_BOOTEFI_BOOTMGR
	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_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
	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.

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).
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
	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
	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
	help
	  Defines a default MTD partitioning scheme in the Linux MTD command
	  line partitions format

config CMD_REISER
	bool "reiser - Access to reiserfs filesystems"
	help
	  This provides two commands which operate on a resierfs filesystem,
	  commonly used some years ago:

	    reiserls - list files
	    reiserload - load a file

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"
	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/README.trace 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
	default n
	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.
endmenu
