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 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_XTRACE
	string "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.

menu "Autoboot options"

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

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

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

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

config AUTOBOOT_ENCRYPTION
	bool "Enable encryption in autoboot stopping"
	depends on AUTOBOOT_KEYED
	help
	  This option allows a string to be entered into U-Boot to stop the
	  autoboot. The string itself is hashed and compared against the hash
	  in the environment variable 'bootstopkeysha256'. If it matches then
	  boot stops and a command-line prompt is presented.

	  This provides a way to ship a secure production device which can also
	  be accessed at the U-Boot command line.

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

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

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

config AUTOBOOT_STOP_STR_SHA256
	string "Stop autobooting via SHA256 encrypted password"
	depends on AUTOBOOT_KEYED && AUTOBOOT_ENCRYPTION
	help
	  This option adds the feature to only stop the autobooting,
	  and therefore boot into the U-Boot prompt, when the input
	  string / password matches a values that is encypted via
	  a SHA256 hash and saved in the environment.

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

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

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

endmenu

config BUILD_BIN2C
	bool

comment "Commands"

menu "Info commands"

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"
	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_LICENSE
	bool "license"
	select BUILD_BIN2C
	help
	  Print GPL license text

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

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

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
	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
	help
	  Add an ANSI terminal boot menu command.

config CMD_DTIMG
	bool "dtimg"
	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_ELF
	bool "bootelf, bootvx"
	default y
	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 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_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_FITUPD
	bool "fitImage update command"
	help
	  Implements the 'fitupd' command, which allows to automatically
	  store software updates present on a TFTP server in NOR Flash

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"
	default n
	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_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
	  The result of multiple evaluations will be combined with AND.

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_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 LOOPW
	bool "loopw"
	help
	  Infinite write loop on address range

config CMD_MD5SUM
	bool "md5sum"
	default n
	select MD5
	help
	  Compute MD5 checksum.

config MD5SUM_VERIFY
	bool "md5sum -v"
	default n
	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 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.

endif

config CMD_MX_CYCLIC
	bool "mdc, mwc"
	help
	  mdc - memory display cyclic
	  mwc - memory write cyclic

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_UNZIP
	bool "unzip"
	default y if CMD_BOOTI
	help
	  Uncompress a zip-compressed memory region.

config CMD_ZIP
	bool "zip"
	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
	select 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.txt for more information.

config CMD_FDC
	bool "fdcboot - Boot from floppy device"
	help
	  The 'fdtboot' command allows booting an image from a floppy disk.

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 (Xilinx only)"
	depends on CMD_FPGA
	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_GPT
	bool "GPT (GUID Partition Table) command"
	select EFI_PARTITION
	select HAVE_BLOCK_DEVICE
	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,
	  reseting 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_LOADS
	bool "loads"
	default y
	help
	  Load an S-Record file over serial line

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

config CMD_MMC_RPMB
	bool "Enable support for RPMB in the mmc command"
	depends on CMD_MMC
	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 CMD_MMC && MMC_WRITE
	select IMAGE_SPARSE
	help
	  Enable support for the "mmc swrite" command to write Android sparse
	  images to eMMC.

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

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 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"
	select HAVE_BLOCK_DEVICE
	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"
	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_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 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_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"
	select HAVE_BLOCK_DEVICE
	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"
	select USB_FUNCTION_MASS_STORAGE
	help
	  USB mass storage 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_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.

endmenu

menu "Android support commands"

config CMD_AB_SELECT
	bool "ab_select"
	default n
	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_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_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_NTPSERVER
	bool "Request & store 'ntpserverip' from BOOTP/DHCP server"
	depends on CMD_BOOTP

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 - boot image 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 CMD_MII
	bool "mii"
	help
	  Enable MII utility commands.

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

config CMD_CDP
	bool "cdp"
	help
	  Perform CDP network configuration

config CMD_SNTP
	bool "sntp"
	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

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 MENU
	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 LCD || DM_VIDEO || 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_BKOPS_ENABLE
	bool "mmc bkops enable"
	depends on CMD_MMC
	default n
	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_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_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'"
	depends on CFB_CONSOLE || DM_VIDEO || LCD || VIDEO
	default y if LCD
	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
	default n
	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_EXCEPTION
	bool "exception - raise exception"
	depends on ARM || RISCV || 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
	help
	  Enable the 'date' command for getting/setting the time/date in 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.

# TODO: rename to CMD_SLEEP
config CMD_MISC
	bool "sleep"
	default y
	help
	  Delay execution for some time

config MP
	bool "support for multiprocessor"
	help
	  This provides an option to brinup
	  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_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

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.

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 platdata 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"
	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_TPM_V1
	bool

config CMD_TPM_V2
	bool
	select CMD_LOG

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_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_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 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_BEDBUG
	bool "bedbug"
	help
	  The bedbug (emBEDded deBUGger) command provides debugging features
	  for some PowerPC processors. For details please see the
	  docuemntation in doc/README.beddbug

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_IRQ
	bool "irq - Show information about interrupts"
	depends on !ARM && !MIPS && !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
	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"
	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
	default n
	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
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_UBIFS
	tristate "Enable UBIFS - Unsorted block images filesystem commands"
	depends on CMD_UBI
	default y if CMD_UBI
	select LZO
	help
	  UBIFS is a file system for flash devices which works on top of UBI.

endmenu
