Currently all shell command docs are put in the doc/usage root.
Let's group them into cmd/ sub-directory.
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-acpi command
-============
-
-Synopis
--------
-
-::
-
- acpi list
- acpi items [-d]
- acpi dump <name>
-
-Description
------------
-
-The *acpi* command is used to dump the ACPI tables generated by U-Boot for passing
-to the operating systems.
-
-ACPI tables can be generated by various output functions and even devices can
-output material to include in the Differentiated System Description Table (DSDT)
-and SSDT tables (Secondary System Description Table). U-Boot keeps track of
-which device or table-writer produced each piece of the ACPI tables.
-
-The ACPI tables are stored contiguously in memory.
-
-
-acpi list
-~~~~~~~~~
-
-List the ACPI tables that have been generated. Each table has a 4-character
-table name (e.g. SSDT, FACS) and has a format defined by the
-`ACPI specification`_.
-
-U-Boot does not currently support decoding the tables. Unlike devicetree, ACPI
-tables have no regular schema and also some include bytecode, so decoding the
-tables requires a lot of code.
-
-The table shows the following information:
-
-Name
- Table name, e.g. `MCFG`
-
-Base
- Base address of table in memory
-
-Size
- Size of table in bytes
-
-Detail
- More information depending on the table type
-
- Revision
- Table revision number (two decimal digits)
-
- OEM ID
- ID for the Original Equipment Manufacturer. Typically this is "U-BOOT".
-
- OEM Table ID
- Table ID for the Original Equipment Manufacturer. Typically this is
- "U-BOOTBL" (U-Boot bootloader)
-
- OEM Revision
- Revision string for the Original Equipment Manufacturer. Typically this
- is the U-Boot release number, e.g. 20220101 (meaning v2022.01 since the
- final 01 is not used). For DSDT, this is set by the source code in
- the parameters of DefinitionBlock().
-
- ACPI compiler-vendor ID
- This is normally `INTL` for Intel
-
- ACPI compiler revision
- This is the compiler revision. It is set to the version string for the
- DSDT table but other tables just use the value 0 or 1, since U-Boot does
- not actually use the compiler in these cases. It generates the code
- itself.
-
-acpi items
-~~~~~~~~~~
-
-List the ACPI data that was generated, broken down by item. An item is either
-an ACPI table generated by a writer function, or the part of a table that was
-generated by a particular device.
-
-The `-d` flag also shows a binary dump of the table.
-
-The table shows the following information about each item:
-
-Seq
- Sequence number in hex
-
-Type
- Type of item
-
- ===== ============================================================
- Type Meaning
- ===== ============================================================
- dsdt Fragment of a DSDT table, as generated by a device
- ssdt Fragment of a SSDT table, as generated by a device
- other A whole table of a particular type. as generated by a writer
- ===== ============================================================
-
-Base
- Base address of table in memory
-
-Size
- Size of table in bytes
-
-Device / Writer
- Name of device (for ssdt/dsdt) that wrong this fragment of the table, or
- name of the registered writer function (otherwise) that wrote the table.
-
-acpi dump
-~~~~~~~~~
-
-Dump a paticular ACPI table in binary format. This can be used to read the table
-if you have the specification handy.
-
-
-Example
--------
-
-::
-
- => acpi list
- Name Base Size Detail
- ---- -------- ----- ------
- RSDP 79925000 24 v02 U-BOOT
- RSDT 79925030 48 v01 U-BOOT U-BOOTBL 20220101 INTL 0
- XSDT 799250e0 6c v01 U-BOOT U-BOOTBL 20220101 INTL 0
- FACP 79929570 f4 v04 U-BOOT U-BOOTBL 20220101 INTL 1
- DSDT 79925280 32ea v02 U-BOOT U-BOOTBL 20110725 INTL 20180105
- FACS 79925240 40
- MCFG 79929670 2c v01 U-BOOT U-BOOTBL 20220101 INTL 0
- SPCR 799296a0 50 v02 U-BOOT U-BOOTBL 20220101 INTL 0
- TPM2 799296f0 4c v04 U-BOOT U-BOOTBL 20220101 INTL 0
- APIC 79929740 6c v02 U-BOOT U-BOOTBL 20220101 INTL 0
- SSDT 799297b0 1523 v02 U-BOOT U-BOOTBL 20220101 INTL 1
- NHLT 7992ace0 e60 v05 coral coral 3 INTL 0
- DBG2 7992db40 61 v00 U-BOOT U-BOOTBL 20220101 INTL 0
- HPET 7992dbb0 38 v01 U-BOOT U-BOOTBL 20220101 INTL 0
- => acpi items
- Seq Type Base Size Device/Writer
- --- ----- -------- ---- -------------
- 0 other 79925000 240 0base
- 1 other 79925240 40 1facs
- 2 dsdt 799252a4 58 board
- 3 dsdt 799252fc 10 lpc
- 4 other 79925280 32f0 3dsdt
- 5 other 79928570 1000 4gnvs
- 6 other 79929570 100 5fact
- 7 other 79929670 30 5mcfg
- 8 other 799296a0 50 5spcr
- 9 other 799296f0 50 5tpm2
- a other 79929740 70 5x86
- b ssdt 799297d4 fe maxim-codec
- c ssdt 799298d2 28 i2c2@16,0
- d ssdt 799298fa 270 da-codec
- e ssdt 79929b6a 28 i2c2@16,1
- f ssdt 79929b92 28 i2c2@16,2
- 10 ssdt 79929bba 83 tpm@50
- 11 ssdt 79929c3d 28 i2c2@16,3
- 12 ssdt 79929c65 282 elan-touchscreen@10
- 13 ssdt 79929ee7 285 raydium-touchscreen@39
- 14 ssdt 7992a16c 28 i2c2@17,0
- 15 ssdt 7992a194 d8 elan-touchpad@15
- 16 ssdt 7992a26c 163 synaptics-touchpad@2c
- 17 ssdt 7992a3cf 28 i2c2@17,1
- 18 ssdt 7992a3f7 111 wacom-digitizer@9
- 19 ssdt 7992a508 8f sdmmc@1b,0
- 1a ssdt 7992a597 4b wifi
- 1b ssdt 7992a5e2 1a0 cpu@0
- 1c ssdt 7992a782 1a0 cpu@1
- 1d ssdt 7992a922 1a0 cpu@2
- 1e ssdt 7992aac2 211 cpu@3
- 1f other 799297b0 1530 6ssdt
- 20 other 7992ace0 2f10 8dev
- => acpi dump mcfg
- MCFG @ 79929670
- 00000000: 4d 43 46 47 2c 00 00 00 01 41 55 2d 42 4f 4f 54 MCFG,....AU-BOOT
- 00000010: 55 2d 42 4f 4f 54 42 4c 01 01 22 20 49 4e 54 4c U-BOOTBL.." INTL
- 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 ............
- => acpi items -d
- Seq Type Base Size Device/Writer
- --- ----- -------- ---- -------------
- 0 other 79925000 240 0base
- 00000000: 52 53 44 20 50 54 52 20 9e 55 2d 42 4f 4f 54 02 RSD PTR .U-BOOT.
- 00000010: 30 50 92 79 24 00 00 00 e0 50 92 79 00 00 00 00 0P.y$....P.y....
- 00000020: a1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 00000030: 52 53 44 54 48 00 00 00 01 8b 55 2d 42 4f 4f 54 RSDTH.....U-BOOT
- 00000040: 55 2d 42 4f 4f 54 42 4c 01 01 22 20 49 4e 54 4c U-BOOTBL.." INTL
- 00000050: 00 00 00 00 70 95 92 79 70 96 92 79 a0 96 92 79 ....p..yp..y...y
- 00000060: f0 96 92 79 40 97 92 79 b0 97 92 79 e0 ac 92 79 ...y@..y...y...y
- 00000070: 40 db 92 79 b0 db 92 79 00 00 00 00 00 00 00 00 @..y...y........
- 00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 000000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 000000b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 000000c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 000000d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 000000e0: 58 53 44 54 6c 00 00 00 01 61 55 2d 42 4f 4f 54 XSDTl....aU-BOOT
- 000000f0: 55 2d 42 4f 4f 54 42 4c 01 01 22 20 49 4e 54 4c U-BOOTBL.." INTL
- 00000100: 00 00 00 00 70 95 92 79 00 00 00 00 70 96 92 79 ....p..y....p..y
- 00000110: 00 00 00 00 a0 96 92 79 00 00 00 00 f0 96 92 79 .......y.......y
- 00000120: 00 00 00 00 40 97 92 79 00 00 00 00 b0 97 92 79 ....@..y.......y
- 00000130: 00 00 00 00 e0 ac 92 79 00 00 00 00 40 db 92 79 .......y....@..y
- 00000140: 00 00 00 00 b0 db 92 79 00 00 00 00 00 00 00 00 .......y........
- 00000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 00000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- ...
-
- 1 other 79925240 40 1facs
- 00000000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@...........
- 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 00000020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
- 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
-
- 2 dsdt 799252a4 58 board
- 00000000: 10 87 05 00 5c 00 08 4f 49 50 47 12 8c 04 00 03 ....\..OIPG.....
- 00000010: 12 8b 01 00 04 01 01 0e ff ff ff ff ff ff ff ff ................
- 00000020: 0d 49 4e 54 33 34 35 32 3a 30 31 00 12 85 01 00 .INT3452:01.....
- 00000030: 04 0a 03 01 0a 23 0d 49 4e 54 33 34 35 32 3a 30 .....#.INT3452:0
- 00000040: 31 00 12 85 01 00 04 0a 04 01 0a 0a 0d 49 4e 54 1............INT
- 00000050: 33 34 35 32 3a 30 30 00 3452:00.
-
- 3 dsdt 799252fc 10 lpc
- 00000000: 10 8f 00 00 5c 00 08 4e 56 53 41 0c 10 50 93 79 ....\..NVSA..P.y
-
- 4 other 79925280 32f0 3dsdt
- 00000000: 44 53 44 54 ea 32 00 00 02 eb 55 2d 42 4f 4f 54 DSDT.2....U-BOOT
- 00000010: 55 2d 42 4f 4f 54 42 4c 25 07 11 20 49 4e 54 4c U-BOOTBL%.. INTL
-
-
-.. _`ACPI specification`: https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-addrmap command
-===============
-
-Synopsis
---------
-
-::
-
- addrmap
-
-Description
------------
-
-The addrmap command is used to display non-identity virtual-physical memory
-mappings for 32-bit CPUs.
-
-The output may look like:
-
-::
-
- => addrmap
- vaddr paddr size
- ================ ================ ================
- e0000000 fe0000000 00100000
- 00000000 00000000 04000000
- 04000000 04000000 04000000
- 80000000 c00000000 10000000
- 90000000 c10000000 10000000
- a0000000 fe1000000 00010000
-
-The first column indicates the virtual address.
-The second column indicates the physical address.
-The third column indicates the mapped size.
-
-Configuration
--------------
-
-To use the addrmap command you must specify CONFIG_CMD_ADDRMAP=y.
-It is automatically turned on when CONFIG_ADDR_MAP is set.
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-askenv command
-===============
-
-Synopsis
---------
-
-::
-
- askenv name [message] [size]
-
-Description
------------
-
-Display message and get environment variable name of max size characters
-from stdin.
-
-name
- name of the environment variable
-
-message
- message is displayed while the command waits for the value to be
- entered from stdin.if no message is specified,a default message
- "Please enter name:" will be displayed.
-
-size
- maximum number of characters that will be stored in environment
- variable name.this is in decimal number format (unlike in
- other commands where size values are in hexa-decimal). Default
- value of size is 1023 (CONFIG_SYS_CBSIZE - 1).
-
-Example
--------
-
-Value of a environment variable env1 without message and size parameters:
-
-::
-
- => askenv env1;echo $?
- Please enter 'env1': val1
- 0
- => printenv env1
- env1=val1
-
-Value of a environment variable env2 with message and size parameters:
-
-::
-
- => askenv env2 Please type-in a value for env2: 10;echo $?
- Please type-in a value for env2: 1234567890123
- 0
- => printenv env2
- env2=1234567890
-
-Value of a environment variable env3 with size parameter only:
-
-::
-
- => askenv env3 10;echo $?
- Please enter 'env3': val3
- 0
- => printenv env3
- env3=val3
-
-Return Value of askenv command, when used without any other arguments:
-
-::
-
- => askenv;echo $?
- askenv - get environment variables from stdin
-
- Usage:
- askenv name [message] [size]
- - display 'message' and get environment variable 'name' from stdin (max 'size' chars)
- 1
-
-Configuration
--------------
-
-The askenv command is only available if CMD_ASKENV=y
-
-Return value
-------------
-
-The return value $? is set to 0 (true).
-If no other arguments are specified (along with askenv), it is set to 1 (false).
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-base command
-============
-
-Synopsis
---------
-
-::
-
- base [address]
-
-Description
------------
-
-The *base* command sets or displays the address offset used by the memory
-commands *cmp, cp, md, mdc, mm, ms, mw, mwc*.
-
-All other commands ignore the address defined by *base*.
-
-address
- new base address as hexadecimal number. If no value is provided, the current
- value is displayed.
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-.. Copyright 2020, Heinrich Schuchardt <xypron.glpk@gmx.de>
-
-bootefi command
-===============
-
-Synopsis
---------
-
-::
-
- bootefi [image_addr] [fdt_addr]
- bootefi bootmgr [fdt_addr]
- bootefi hello [fdt_addr]
- bootefi selftest [fdt_addr]
-
-Description
------------
-
-The *bootefi* command is used to launch a UEFI binary which can be either of
-
-* UEFI application
-* UEFI boot services driver
-* UEFI run-time services driver
-
-An operating system requires a hardware description which can either be
-presented as ACPI table (CONFIG\_GENERATE\_ACPI\_TABLE=y) or as device-tree
-The load address of the device-tree may be provided as parameter *fdt\_addr*. If
-this address is not specified, the bootefi command will try to fall back in
-sequence to:
-
-* the device-tree specified by environment variable *fdt\_addr*
-* the device-tree specified by environment variable *fdtcontroladdr*
-
-The load address of the binary is specified by parameter *image_address*. A
-command sequence to run a UEFI application might look like
-
-::
-
- load mmc 0:2 $fdt_addr_r dtb
- load mmc 0:1 $kernel_addr_r /EFI/grub/grubaa64.efi
- bootefi $kernel_addr_r $fdt_addr_r
-
-The last file loaded defines the image file path in the loaded image protocol.
-Hence the executable should always be loaded last.
-
-The value of the environment variable *bootargs* is converted from UTF-8 to
-UTF-16 and passed as load options in the loaded image protocol to the UEFI
-binary.
-
-Note
- UEFI binaries that are contained in FIT images are launched via the
- *bootm* command.
-
-UEFI boot manager
-'''''''''''''''''
-
-The UEFI boot manager is invoked by the *bootefi bootmgr* sub-command.
-Here boot options are defined by UEFI variables with a name consisting of the
-letters *Boot* followed by a four digit hexadecimal number, e.g. *Boot0001* or
-*BootA03E*. The boot variable defines a label, the device path of the binary to
-execute as well as the load options passed in the loaded image protocol.
-
-If the UEFI variable *BootNext* is defined, it specifies the number of the boot
-option to execute next. If no binary can be loaded via *BootNext* the variable
-*BootOrder* specifies in which sequence boot options shalled be tried.
-
-The values of these variables can be managed using the U-Boot command
-*efidebug*.
-
-UEFI hello world application
-''''''''''''''''''''''''''''
-
-U-Boot can be compiled with a hello world application that can be launched using
-the *bootefi hello* sub-command. A session might look like
-
-::
-
- => setenv bootargs 'Greetings to the world'
- => bootefi hello
- Booting /MemoryMapped(0x0,0x10001000,0x1000)
- Hello, world!
- Running on UEFI 2.8
- Have SMBIOS table
- Have device tree
- Load options: Greetings to the world
-
-UEFI selftest
-'''''''''''''
-
-U-Boot can be compiled with UEFI unit tests. These unit tests are invoked using
-the *bootefi selftest* sub-command.
-
-Which unit test is executed is controlled by the environment variable
-*efi\_selftest*. If this variable is not set, all unit tests that are not marked
-as 'on request' are executed.
-
-To show a list of the available unit tests the value *list* can be used
-
-::
-
- => setenv efi_selftest list
- => bootefi selftest
-
- Available tests:
- 'block image transfer' - on request
- 'block device'
- 'configuration tables'
- ...
-
-A single test is selected for execution by setting the *efi\_selftest*
-environment variable to match one of the listed identifiers
-
-::
-
- => setenv efi_selftest 'block image transfer'
- => bootefi selftest
-
-Some of the tests execute the ExitBootServices() UEFI boot service and will not
-return to the command line but require a board reset.
-
-Configuration
--------------
-
-To use the *bootefi* command you must specify CONFIG\_CMD\_BOOTEFI=y.
-The *bootefi hello* sub-command requries CMD\_BOOTEFI\_HELLO=y.
-The *bootefi selftest* sub-command depends on CMD\_BOOTEFI\_SELFTEST=y.
-
-See also
---------
-
-* *bootm* for launching UEFI binaries packed in FIT images
-* *booti*, *bootm*, *bootz* for launching a Linux kernel without using the
- UEFI sub-system
-* *efidebug* for setting UEFI boot variables
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-booti command
-=============
-
-Synopsis
---------
-
-::
-
- booti [<addr> [<initrd>[:<size>]] [<fdt>]]
-
-Description
------------
-
-The booti command is used to boot a Linux kernel in flat or compressed
-'Image' format. Which compressed formats are supported is configurable.
-
-addr
- address of kernel image, defaults to CONFIG_SYS_LOAD_ADDR.
-
-initrd
- address of the initial RAM disk. Use '-' to boot a kernel with a device
- tree but without an initial RAM disk.
-
-size
- size of the initial RAM disk. This parameter must be specified for raw
- initial RAM disks.
-
-fdt
- address of the device tree.
-
-To support compressed Image files the following environment variables must be
-set:
-
-kernel_comp_addr_r
- start of memory area used for decompression
-
-kernel_comp_size
- size of the compressed file. The value has to be at least the size of
- loaded image for decompression to succeed. For the booti command the
- maximum decompressed size is 10 times this value.
-
-Example
--------
-
-This is the boot log of an Odroid C2 board:
-
-::
-
- => load mmc 0:1 $fdt_addr_r dtb-5.10.0-3-arm64
- 27530 bytes read in 7 ms (3.7 MiB/s)
- => load mmc 0:1 $kernel_addr_r vmlinuz-5.10.0-3-arm64
- 26990448 bytes read in 1175 ms (21.9 MiB/s)
- => load mmc 0:1 $ramdisk_addr_r initrd.img-5.10.0-3-arm64
- 27421776 bytes read in 1209 ms (21.6 MiB/s)
- => booti $kernel_addr_r $ramdisk_addr_r:$filesize $fdt_addr_r
- Moving Image from 0x8080000 to 0x8200000, end=9c60000
- ## Flattened Device Tree blob at 08008000
- Booting using the fdt blob at 0x8008000
- Loading Ramdisk to 7a52a000, end 7bf50c50 ... OK
- Loading Device Tree to 000000007a520000, end 000000007a529b89 ... OK
-
- Starting kernel ...
-
-The kernel can be compressed with gzip:
-
-.. code-block:: bash
-
- cd /boot
- gzip -k vmlinuz-5.10.0-3-arm64
-
-Here is the boot log for the compressed kernel:
-
-::
-
- => setenv kernel_comp_addr_r 0x50000000
- => setenv kernel_comp_size 0x04000000
- => load mmc 0:1 $fdt_addr_r dtb-5.10.0-3-arm64
- 27530 bytes read in 6 ms (4.4 MiB/s)
- => load mmc 0:1 $kernel_addr_r vmlinuz-5.10.0-3-arm64.gz
- 9267730 bytes read in 402 ms (22 MiB/s)
- => load mmc 0:1 $ramdisk_addr_r initrd.img-5.10.0-3-arm64
- 27421776 bytes read in 1181 ms (22.1 MiB/s)
- => booti $kernel_addr_r $ramdisk_addr_r:$filesize $fdt_addr_r
- Uncompressing Kernel Image
- Moving Image from 0x8080000 to 0x8200000, end=9c60000
- ## Flattened Device Tree blob at 08008000
- Booting using the fdt blob at 0x8008000
- Loading Ramdisk to 7a52a000, end 7bf50c50 ... OK
- Loading Device Tree to 000000007a520000, end 000000007a529b89 ... OK
-
- Starting kernel ...
-
-Configuration
--------------
-
-The booti command is only available if CONFIG_CMD_BOOTI=y.
-
-Which compression types are supported depends on:
-
-* CONFIG_BZIP2
-* CONFIG_GZIP
-* CONFIG_LZ4
-* CONFIG_LZMA
-* CONFIG_LZO
-* CONFIG_ZSTD
-
-Return value
-------------
-
-Normally this command does not return. If an error occurs, the return value $?
-is set to 1 (false). If the operating system returns to U-Boot, the system is
-reset.
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-.. (C) Copyright 2011-2012 Pali Rohár <pali@kernel.org>
-
-bootmenu command
-================
-
-The "bootmenu" command uses U-Boot menu interfaces and provides
-a simple mechanism for creating menus with different boot items.
-The cursor keys "Up" and "Down" are used for navigation through
-the items. Current active menu item is highlighted and can be
-selected using the "Enter" key. The selection of the highlighted
-menu entry invokes an U-Boot command (or a list of commands)
-associated with this menu entry.
-
-The "bootmenu" command interprets ANSI escape sequencies, so
-an ANSI terminal is required for proper menu rendering and item
-selection.
-
-The assembling of the menu is done via a set of environment variables
-"bootmenu_<num>" and "bootmenu_delay", i.e.::
-
- bootmenu_delay=<delay>
- bootmenu_<num>="<title>=<commands>"
-
-<delay>
- is the autoboot delay in seconds, after which the first
- menu entry will be selected automatically
-
-<num>
- is the boot menu entry number, starting from zero
-
-<title>
- is the text of the menu entry shown on the console
- or on the boot screen
-
-<commands>
- are commands which will be executed when a menu
- entry is selected
-
-Title and commands are separated by the first appearance of a '='
-character in the value of the environment variable.
-
-The first (optional) argument of the "bootmenu" command is a delay specifier
-and it overrides the delay value defined by "bootmenu_delay" environment
-variable. If the environment variable "bootmenu_delay" is not set or if
-the argument of the "bootmenu" command is not specified, the default delay
-will be CONFIG_BOOTDELAY. If delay is 0, no menu entries will be shown on
-the console (or on the screen) and the command of the first menu entry will
-be called immediately. If delay is less then 0, bootmenu will be shown and
-autoboot will be disabled.
-
-Bootmenu always adds menu entry "U-Boot console" at the end of all menu
-entries specified by environment variables. When selecting this entry
-the bootmenu terminates and the usual U-Boot command prompt is presented
-to the user.
-
-Example environment::
-
- setenv bootmenu_0 Boot 1. kernel=bootm 0x82000000 # Set first menu entry
- setenv bootmenu_1 Boot 2. kernel=bootm 0x83000000 # Set second menu entry
- setenv bootmenu_2 Reset board=reset # Set third menu entry
- setenv bootmenu_3 U-Boot boot order=boot # Set fourth menu entry
- bootmenu 20 # Run bootmenu with autoboot delay 20s
-
-
-The above example will be rendered as below::
-
- *** U-Boot Boot Menu ***
-
- Boot 1. kernel
- Boot 2. kernel
- Reset board
- U-Boot boot order
- U-Boot console
-
- Hit any key to stop autoboot: 20
- Press UP/DOWN to move, ENTER to select
-
-The selected menu entry will be highlighted - it will have inverted
-background and text colors.
-
-The "bootmenu" cammand is enabled by::
-
- CONFIG_CMD_BOOTMENU=y
-
-To run the bootmenu at startup add these additional settings::
-
- CONFIG_AUTOBOOT_KEYED=y
- CONFIG_BOOTDELAY=30
- CONFIG_AUTOBOOT_MENU_SHOW=y
-
-When you intend to use the bootmenu on a color frame buffer console,
-make sure to additionally define::
-
- CONFIG_CFB_CONSOLE_ANSI=y
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-button command
-==============
-
-Synopsis
---------
-
-::
-
- button list
- button <name>
-
-Description
------------
-
-The button command is used to retrieve the status of a button. To show the
-status of a button with name 'button1' you would issue the command
-
-::
-
- button button1
-
-The status of the button is both written to the console as *ON* or *OFF* and
-set in the return value variable *$?* as 0 (true) or 1 (false). To retrieve
-the status of a button with name *button1* and to write it to environment
-variable *status1* you would execute the commands
-
-::
-
- button button1
- setenv status1 $?
-
-A list of all available buttons and their status can be displayed using
-
-::
-
- button list
-
-If a button device has not been probed yet, its status will be shown as
-*<inactive>* in the list.
-
-Configuration
--------------
-
-To use the button command you must specify CONFIG_CMD_BUTTON=y and enable a
-button driver. The available buttons are defined in the device-tree.
-
-Return value
-------------
-
-The variable *$?* takes the following values
-
-+---+-----------------------------+
-| 0 | ON, the button is pressed |
-+---+-----------------------------+
-| 1 | OFF, the button is released |
-+---+-----------------------------+
-| 0 | button list was shown |
-+---+-----------------------------+
-| 1 | button not found |
-+---+-----------------------------+
-| 1 | invalid arguments |
-+---+-----------------------------+
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+acpi command
+============
+
+Synopis
+-------
+
+::
+
+ acpi list
+ acpi items [-d]
+ acpi dump <name>
+
+Description
+-----------
+
+The *acpi* command is used to dump the ACPI tables generated by U-Boot for passing
+to the operating systems.
+
+ACPI tables can be generated by various output functions and even devices can
+output material to include in the Differentiated System Description Table (DSDT)
+and SSDT tables (Secondary System Description Table). U-Boot keeps track of
+which device or table-writer produced each piece of the ACPI tables.
+
+The ACPI tables are stored contiguously in memory.
+
+
+acpi list
+~~~~~~~~~
+
+List the ACPI tables that have been generated. Each table has a 4-character
+table name (e.g. SSDT, FACS) and has a format defined by the
+`ACPI specification`_.
+
+U-Boot does not currently support decoding the tables. Unlike devicetree, ACPI
+tables have no regular schema and also some include bytecode, so decoding the
+tables requires a lot of code.
+
+The table shows the following information:
+
+Name
+ Table name, e.g. `MCFG`
+
+Base
+ Base address of table in memory
+
+Size
+ Size of table in bytes
+
+Detail
+ More information depending on the table type
+
+ Revision
+ Table revision number (two decimal digits)
+
+ OEM ID
+ ID for the Original Equipment Manufacturer. Typically this is "U-BOOT".
+
+ OEM Table ID
+ Table ID for the Original Equipment Manufacturer. Typically this is
+ "U-BOOTBL" (U-Boot bootloader)
+
+ OEM Revision
+ Revision string for the Original Equipment Manufacturer. Typically this
+ is the U-Boot release number, e.g. 20220101 (meaning v2022.01 since the
+ final 01 is not used). For DSDT, this is set by the source code in
+ the parameters of DefinitionBlock().
+
+ ACPI compiler-vendor ID
+ This is normally `INTL` for Intel
+
+ ACPI compiler revision
+ This is the compiler revision. It is set to the version string for the
+ DSDT table but other tables just use the value 0 or 1, since U-Boot does
+ not actually use the compiler in these cases. It generates the code
+ itself.
+
+acpi items
+~~~~~~~~~~
+
+List the ACPI data that was generated, broken down by item. An item is either
+an ACPI table generated by a writer function, or the part of a table that was
+generated by a particular device.
+
+The `-d` flag also shows a binary dump of the table.
+
+The table shows the following information about each item:
+
+Seq
+ Sequence number in hex
+
+Type
+ Type of item
+
+ ===== ============================================================
+ Type Meaning
+ ===== ============================================================
+ dsdt Fragment of a DSDT table, as generated by a device
+ ssdt Fragment of a SSDT table, as generated by a device
+ other A whole table of a particular type. as generated by a writer
+ ===== ============================================================
+
+Base
+ Base address of table in memory
+
+Size
+ Size of table in bytes
+
+Device / Writer
+ Name of device (for ssdt/dsdt) that wrong this fragment of the table, or
+ name of the registered writer function (otherwise) that wrote the table.
+
+acpi dump
+~~~~~~~~~
+
+Dump a paticular ACPI table in binary format. This can be used to read the table
+if you have the specification handy.
+
+
+Example
+-------
+
+::
+
+ => acpi list
+ Name Base Size Detail
+ ---- -------- ----- ------
+ RSDP 79925000 24 v02 U-BOOT
+ RSDT 79925030 48 v01 U-BOOT U-BOOTBL 20220101 INTL 0
+ XSDT 799250e0 6c v01 U-BOOT U-BOOTBL 20220101 INTL 0
+ FACP 79929570 f4 v04 U-BOOT U-BOOTBL 20220101 INTL 1
+ DSDT 79925280 32ea v02 U-BOOT U-BOOTBL 20110725 INTL 20180105
+ FACS 79925240 40
+ MCFG 79929670 2c v01 U-BOOT U-BOOTBL 20220101 INTL 0
+ SPCR 799296a0 50 v02 U-BOOT U-BOOTBL 20220101 INTL 0
+ TPM2 799296f0 4c v04 U-BOOT U-BOOTBL 20220101 INTL 0
+ APIC 79929740 6c v02 U-BOOT U-BOOTBL 20220101 INTL 0
+ SSDT 799297b0 1523 v02 U-BOOT U-BOOTBL 20220101 INTL 1
+ NHLT 7992ace0 e60 v05 coral coral 3 INTL 0
+ DBG2 7992db40 61 v00 U-BOOT U-BOOTBL 20220101 INTL 0
+ HPET 7992dbb0 38 v01 U-BOOT U-BOOTBL 20220101 INTL 0
+ => acpi items
+ Seq Type Base Size Device/Writer
+ --- ----- -------- ---- -------------
+ 0 other 79925000 240 0base
+ 1 other 79925240 40 1facs
+ 2 dsdt 799252a4 58 board
+ 3 dsdt 799252fc 10 lpc
+ 4 other 79925280 32f0 3dsdt
+ 5 other 79928570 1000 4gnvs
+ 6 other 79929570 100 5fact
+ 7 other 79929670 30 5mcfg
+ 8 other 799296a0 50 5spcr
+ 9 other 799296f0 50 5tpm2
+ a other 79929740 70 5x86
+ b ssdt 799297d4 fe maxim-codec
+ c ssdt 799298d2 28 i2c2@16,0
+ d ssdt 799298fa 270 da-codec
+ e ssdt 79929b6a 28 i2c2@16,1
+ f ssdt 79929b92 28 i2c2@16,2
+ 10 ssdt 79929bba 83 tpm@50
+ 11 ssdt 79929c3d 28 i2c2@16,3
+ 12 ssdt 79929c65 282 elan-touchscreen@10
+ 13 ssdt 79929ee7 285 raydium-touchscreen@39
+ 14 ssdt 7992a16c 28 i2c2@17,0
+ 15 ssdt 7992a194 d8 elan-touchpad@15
+ 16 ssdt 7992a26c 163 synaptics-touchpad@2c
+ 17 ssdt 7992a3cf 28 i2c2@17,1
+ 18 ssdt 7992a3f7 111 wacom-digitizer@9
+ 19 ssdt 7992a508 8f sdmmc@1b,0
+ 1a ssdt 7992a597 4b wifi
+ 1b ssdt 7992a5e2 1a0 cpu@0
+ 1c ssdt 7992a782 1a0 cpu@1
+ 1d ssdt 7992a922 1a0 cpu@2
+ 1e ssdt 7992aac2 211 cpu@3
+ 1f other 799297b0 1530 6ssdt
+ 20 other 7992ace0 2f10 8dev
+ => acpi dump mcfg
+ MCFG @ 79929670
+ 00000000: 4d 43 46 47 2c 00 00 00 01 41 55 2d 42 4f 4f 54 MCFG,....AU-BOOT
+ 00000010: 55 2d 42 4f 4f 54 42 4c 01 01 22 20 49 4e 54 4c U-BOOTBL.." INTL
+ 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 ............
+ => acpi items -d
+ Seq Type Base Size Device/Writer
+ --- ----- -------- ---- -------------
+ 0 other 79925000 240 0base
+ 00000000: 52 53 44 20 50 54 52 20 9e 55 2d 42 4f 4f 54 02 RSD PTR .U-BOOT.
+ 00000010: 30 50 92 79 24 00 00 00 e0 50 92 79 00 00 00 00 0P.y$....P.y....
+ 00000020: a1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 00000030: 52 53 44 54 48 00 00 00 01 8b 55 2d 42 4f 4f 54 RSDTH.....U-BOOT
+ 00000040: 55 2d 42 4f 4f 54 42 4c 01 01 22 20 49 4e 54 4c U-BOOTBL.." INTL
+ 00000050: 00 00 00 00 70 95 92 79 70 96 92 79 a0 96 92 79 ....p..yp..y...y
+ 00000060: f0 96 92 79 40 97 92 79 b0 97 92 79 e0 ac 92 79 ...y@..y...y...y
+ 00000070: 40 db 92 79 b0 db 92 79 00 00 00 00 00 00 00 00 @..y...y........
+ 00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 000000a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 000000b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 000000c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 000000d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 000000e0: 58 53 44 54 6c 00 00 00 01 61 55 2d 42 4f 4f 54 XSDTl....aU-BOOT
+ 000000f0: 55 2d 42 4f 4f 54 42 4c 01 01 22 20 49 4e 54 4c U-BOOTBL.." INTL
+ 00000100: 00 00 00 00 70 95 92 79 00 00 00 00 70 96 92 79 ....p..y....p..y
+ 00000110: 00 00 00 00 a0 96 92 79 00 00 00 00 f0 96 92 79 .......y.......y
+ 00000120: 00 00 00 00 40 97 92 79 00 00 00 00 b0 97 92 79 ....@..y.......y
+ 00000130: 00 00 00 00 e0 ac 92 79 00 00 00 00 40 db 92 79 .......y....@..y
+ 00000140: 00 00 00 00 b0 db 92 79 00 00 00 00 00 00 00 00 .......y........
+ 00000150: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 00000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ ...
+
+ 1 other 79925240 40 1facs
+ 00000000: 46 41 43 53 40 00 00 00 00 00 00 00 00 00 00 00 FACS@...........
+ 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 00000020: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+ 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+
+ 2 dsdt 799252a4 58 board
+ 00000000: 10 87 05 00 5c 00 08 4f 49 50 47 12 8c 04 00 03 ....\..OIPG.....
+ 00000010: 12 8b 01 00 04 01 01 0e ff ff ff ff ff ff ff ff ................
+ 00000020: 0d 49 4e 54 33 34 35 32 3a 30 31 00 12 85 01 00 .INT3452:01.....
+ 00000030: 04 0a 03 01 0a 23 0d 49 4e 54 33 34 35 32 3a 30 .....#.INT3452:0
+ 00000040: 31 00 12 85 01 00 04 0a 04 01 0a 0a 0d 49 4e 54 1............INT
+ 00000050: 33 34 35 32 3a 30 30 00 3452:00.
+
+ 3 dsdt 799252fc 10 lpc
+ 00000000: 10 8f 00 00 5c 00 08 4e 56 53 41 0c 10 50 93 79 ....\..NVSA..P.y
+
+ 4 other 79925280 32f0 3dsdt
+ 00000000: 44 53 44 54 ea 32 00 00 02 eb 55 2d 42 4f 4f 54 DSDT.2....U-BOOT
+ 00000010: 55 2d 42 4f 4f 54 42 4c 25 07 11 20 49 4e 54 4c U-BOOTBL%.. INTL
+
+
+.. _`ACPI specification`: https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+addrmap command
+===============
+
+Synopsis
+--------
+
+::
+
+ addrmap
+
+Description
+-----------
+
+The addrmap command is used to display non-identity virtual-physical memory
+mappings for 32-bit CPUs.
+
+The output may look like:
+
+::
+
+ => addrmap
+ vaddr paddr size
+ ================ ================ ================
+ e0000000 fe0000000 00100000
+ 00000000 00000000 04000000
+ 04000000 04000000 04000000
+ 80000000 c00000000 10000000
+ 90000000 c10000000 10000000
+ a0000000 fe1000000 00010000
+
+The first column indicates the virtual address.
+The second column indicates the physical address.
+The third column indicates the mapped size.
+
+Configuration
+-------------
+
+To use the addrmap command you must specify CONFIG_CMD_ADDRMAP=y.
+It is automatically turned on when CONFIG_ADDR_MAP is set.
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+askenv command
+===============
+
+Synopsis
+--------
+
+::
+
+ askenv name [message] [size]
+
+Description
+-----------
+
+Display message and get environment variable name of max size characters
+from stdin.
+
+name
+ name of the environment variable
+
+message
+ message is displayed while the command waits for the value to be
+ entered from stdin.if no message is specified,a default message
+ "Please enter name:" will be displayed.
+
+size
+ maximum number of characters that will be stored in environment
+ variable name.this is in decimal number format (unlike in
+ other commands where size values are in hexa-decimal). Default
+ value of size is 1023 (CONFIG_SYS_CBSIZE - 1).
+
+Example
+-------
+
+Value of a environment variable env1 without message and size parameters:
+
+::
+
+ => askenv env1;echo $?
+ Please enter 'env1': val1
+ 0
+ => printenv env1
+ env1=val1
+
+Value of a environment variable env2 with message and size parameters:
+
+::
+
+ => askenv env2 Please type-in a value for env2: 10;echo $?
+ Please type-in a value for env2: 1234567890123
+ 0
+ => printenv env2
+ env2=1234567890
+
+Value of a environment variable env3 with size parameter only:
+
+::
+
+ => askenv env3 10;echo $?
+ Please enter 'env3': val3
+ 0
+ => printenv env3
+ env3=val3
+
+Return Value of askenv command, when used without any other arguments:
+
+::
+
+ => askenv;echo $?
+ askenv - get environment variables from stdin
+
+ Usage:
+ askenv name [message] [size]
+ - display 'message' and get environment variable 'name' from stdin (max 'size' chars)
+ 1
+
+Configuration
+-------------
+
+The askenv command is only available if CMD_ASKENV=y
+
+Return value
+------------
+
+The return value $? is set to 0 (true).
+If no other arguments are specified (along with askenv), it is set to 1 (false).
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+base command
+============
+
+Synopsis
+--------
+
+::
+
+ base [address]
+
+Description
+-----------
+
+The *base* command sets or displays the address offset used by the memory
+commands *cmp, cp, md, mdc, mm, ms, mw, mwc*.
+
+All other commands ignore the address defined by *base*.
+
+address
+ new base address as hexadecimal number. If no value is provided, the current
+ value is displayed.
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+.. Copyright 2020, Heinrich Schuchardt <xypron.glpk@gmx.de>
+
+bootefi command
+===============
+
+Synopsis
+--------
+
+::
+
+ bootefi [image_addr] [fdt_addr]
+ bootefi bootmgr [fdt_addr]
+ bootefi hello [fdt_addr]
+ bootefi selftest [fdt_addr]
+
+Description
+-----------
+
+The *bootefi* command is used to launch a UEFI binary which can be either of
+
+* UEFI application
+* UEFI boot services driver
+* UEFI run-time services driver
+
+An operating system requires a hardware description which can either be
+presented as ACPI table (CONFIG\_GENERATE\_ACPI\_TABLE=y) or as device-tree
+The load address of the device-tree may be provided as parameter *fdt\_addr*. If
+this address is not specified, the bootefi command will try to fall back in
+sequence to:
+
+* the device-tree specified by environment variable *fdt\_addr*
+* the device-tree specified by environment variable *fdtcontroladdr*
+
+The load address of the binary is specified by parameter *image_address*. A
+command sequence to run a UEFI application might look like
+
+::
+
+ load mmc 0:2 $fdt_addr_r dtb
+ load mmc 0:1 $kernel_addr_r /EFI/grub/grubaa64.efi
+ bootefi $kernel_addr_r $fdt_addr_r
+
+The last file loaded defines the image file path in the loaded image protocol.
+Hence the executable should always be loaded last.
+
+The value of the environment variable *bootargs* is converted from UTF-8 to
+UTF-16 and passed as load options in the loaded image protocol to the UEFI
+binary.
+
+Note
+ UEFI binaries that are contained in FIT images are launched via the
+ *bootm* command.
+
+UEFI boot manager
+'''''''''''''''''
+
+The UEFI boot manager is invoked by the *bootefi bootmgr* sub-command.
+Here boot options are defined by UEFI variables with a name consisting of the
+letters *Boot* followed by a four digit hexadecimal number, e.g. *Boot0001* or
+*BootA03E*. The boot variable defines a label, the device path of the binary to
+execute as well as the load options passed in the loaded image protocol.
+
+If the UEFI variable *BootNext* is defined, it specifies the number of the boot
+option to execute next. If no binary can be loaded via *BootNext* the variable
+*BootOrder* specifies in which sequence boot options shalled be tried.
+
+The values of these variables can be managed using the U-Boot command
+*efidebug*.
+
+UEFI hello world application
+''''''''''''''''''''''''''''
+
+U-Boot can be compiled with a hello world application that can be launched using
+the *bootefi hello* sub-command. A session might look like
+
+::
+
+ => setenv bootargs 'Greetings to the world'
+ => bootefi hello
+ Booting /MemoryMapped(0x0,0x10001000,0x1000)
+ Hello, world!
+ Running on UEFI 2.8
+ Have SMBIOS table
+ Have device tree
+ Load options: Greetings to the world
+
+UEFI selftest
+'''''''''''''
+
+U-Boot can be compiled with UEFI unit tests. These unit tests are invoked using
+the *bootefi selftest* sub-command.
+
+Which unit test is executed is controlled by the environment variable
+*efi\_selftest*. If this variable is not set, all unit tests that are not marked
+as 'on request' are executed.
+
+To show a list of the available unit tests the value *list* can be used
+
+::
+
+ => setenv efi_selftest list
+ => bootefi selftest
+
+ Available tests:
+ 'block image transfer' - on request
+ 'block device'
+ 'configuration tables'
+ ...
+
+A single test is selected for execution by setting the *efi\_selftest*
+environment variable to match one of the listed identifiers
+
+::
+
+ => setenv efi_selftest 'block image transfer'
+ => bootefi selftest
+
+Some of the tests execute the ExitBootServices() UEFI boot service and will not
+return to the command line but require a board reset.
+
+Configuration
+-------------
+
+To use the *bootefi* command you must specify CONFIG\_CMD\_BOOTEFI=y.
+The *bootefi hello* sub-command requries CMD\_BOOTEFI\_HELLO=y.
+The *bootefi selftest* sub-command depends on CMD\_BOOTEFI\_SELFTEST=y.
+
+See also
+--------
+
+* *bootm* for launching UEFI binaries packed in FIT images
+* *booti*, *bootm*, *bootz* for launching a Linux kernel without using the
+ UEFI sub-system
+* *efidebug* for setting UEFI boot variables
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+booti command
+=============
+
+Synopsis
+--------
+
+::
+
+ booti [<addr> [<initrd>[:<size>]] [<fdt>]]
+
+Description
+-----------
+
+The booti command is used to boot a Linux kernel in flat or compressed
+'Image' format. Which compressed formats are supported is configurable.
+
+addr
+ address of kernel image, defaults to CONFIG_SYS_LOAD_ADDR.
+
+initrd
+ address of the initial RAM disk. Use '-' to boot a kernel with a device
+ tree but without an initial RAM disk.
+
+size
+ size of the initial RAM disk. This parameter must be specified for raw
+ initial RAM disks.
+
+fdt
+ address of the device tree.
+
+To support compressed Image files the following environment variables must be
+set:
+
+kernel_comp_addr_r
+ start of memory area used for decompression
+
+kernel_comp_size
+ size of the compressed file. The value has to be at least the size of
+ loaded image for decompression to succeed. For the booti command the
+ maximum decompressed size is 10 times this value.
+
+Example
+-------
+
+This is the boot log of an Odroid C2 board:
+
+::
+
+ => load mmc 0:1 $fdt_addr_r dtb-5.10.0-3-arm64
+ 27530 bytes read in 7 ms (3.7 MiB/s)
+ => load mmc 0:1 $kernel_addr_r vmlinuz-5.10.0-3-arm64
+ 26990448 bytes read in 1175 ms (21.9 MiB/s)
+ => load mmc 0:1 $ramdisk_addr_r initrd.img-5.10.0-3-arm64
+ 27421776 bytes read in 1209 ms (21.6 MiB/s)
+ => booti $kernel_addr_r $ramdisk_addr_r:$filesize $fdt_addr_r
+ Moving Image from 0x8080000 to 0x8200000, end=9c60000
+ ## Flattened Device Tree blob at 08008000
+ Booting using the fdt blob at 0x8008000
+ Loading Ramdisk to 7a52a000, end 7bf50c50 ... OK
+ Loading Device Tree to 000000007a520000, end 000000007a529b89 ... OK
+
+ Starting kernel ...
+
+The kernel can be compressed with gzip:
+
+.. code-block:: bash
+
+ cd /boot
+ gzip -k vmlinuz-5.10.0-3-arm64
+
+Here is the boot log for the compressed kernel:
+
+::
+
+ => setenv kernel_comp_addr_r 0x50000000
+ => setenv kernel_comp_size 0x04000000
+ => load mmc 0:1 $fdt_addr_r dtb-5.10.0-3-arm64
+ 27530 bytes read in 6 ms (4.4 MiB/s)
+ => load mmc 0:1 $kernel_addr_r vmlinuz-5.10.0-3-arm64.gz
+ 9267730 bytes read in 402 ms (22 MiB/s)
+ => load mmc 0:1 $ramdisk_addr_r initrd.img-5.10.0-3-arm64
+ 27421776 bytes read in 1181 ms (22.1 MiB/s)
+ => booti $kernel_addr_r $ramdisk_addr_r:$filesize $fdt_addr_r
+ Uncompressing Kernel Image
+ Moving Image from 0x8080000 to 0x8200000, end=9c60000
+ ## Flattened Device Tree blob at 08008000
+ Booting using the fdt blob at 0x8008000
+ Loading Ramdisk to 7a52a000, end 7bf50c50 ... OK
+ Loading Device Tree to 000000007a520000, end 000000007a529b89 ... OK
+
+ Starting kernel ...
+
+Configuration
+-------------
+
+The booti command is only available if CONFIG_CMD_BOOTI=y.
+
+Which compression types are supported depends on:
+
+* CONFIG_BZIP2
+* CONFIG_GZIP
+* CONFIG_LZ4
+* CONFIG_LZMA
+* CONFIG_LZO
+* CONFIG_ZSTD
+
+Return value
+------------
+
+Normally this command does not return. If an error occurs, the return value $?
+is set to 1 (false). If the operating system returns to U-Boot, the system is
+reset.
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+.. (C) Copyright 2011-2012 Pali Rohár <pali@kernel.org>
+
+bootmenu command
+================
+
+The "bootmenu" command uses U-Boot menu interfaces and provides
+a simple mechanism for creating menus with different boot items.
+The cursor keys "Up" and "Down" are used for navigation through
+the items. Current active menu item is highlighted and can be
+selected using the "Enter" key. The selection of the highlighted
+menu entry invokes an U-Boot command (or a list of commands)
+associated with this menu entry.
+
+The "bootmenu" command interprets ANSI escape sequencies, so
+an ANSI terminal is required for proper menu rendering and item
+selection.
+
+The assembling of the menu is done via a set of environment variables
+"bootmenu_<num>" and "bootmenu_delay", i.e.::
+
+ bootmenu_delay=<delay>
+ bootmenu_<num>="<title>=<commands>"
+
+<delay>
+ is the autoboot delay in seconds, after which the first
+ menu entry will be selected automatically
+
+<num>
+ is the boot menu entry number, starting from zero
+
+<title>
+ is the text of the menu entry shown on the console
+ or on the boot screen
+
+<commands>
+ are commands which will be executed when a menu
+ entry is selected
+
+Title and commands are separated by the first appearance of a '='
+character in the value of the environment variable.
+
+The first (optional) argument of the "bootmenu" command is a delay specifier
+and it overrides the delay value defined by "bootmenu_delay" environment
+variable. If the environment variable "bootmenu_delay" is not set or if
+the argument of the "bootmenu" command is not specified, the default delay
+will be CONFIG_BOOTDELAY. If delay is 0, no menu entries will be shown on
+the console (or on the screen) and the command of the first menu entry will
+be called immediately. If delay is less then 0, bootmenu will be shown and
+autoboot will be disabled.
+
+Bootmenu always adds menu entry "U-Boot console" at the end of all menu
+entries specified by environment variables. When selecting this entry
+the bootmenu terminates and the usual U-Boot command prompt is presented
+to the user.
+
+Example environment::
+
+ setenv bootmenu_0 Boot 1. kernel=bootm 0x82000000 # Set first menu entry
+ setenv bootmenu_1 Boot 2. kernel=bootm 0x83000000 # Set second menu entry
+ setenv bootmenu_2 Reset board=reset # Set third menu entry
+ setenv bootmenu_3 U-Boot boot order=boot # Set fourth menu entry
+ bootmenu 20 # Run bootmenu with autoboot delay 20s
+
+
+The above example will be rendered as below::
+
+ *** U-Boot Boot Menu ***
+
+ Boot 1. kernel
+ Boot 2. kernel
+ Reset board
+ U-Boot boot order
+ U-Boot console
+
+ Hit any key to stop autoboot: 20
+ Press UP/DOWN to move, ENTER to select
+
+The selected menu entry will be highlighted - it will have inverted
+background and text colors.
+
+The "bootmenu" cammand is enabled by::
+
+ CONFIG_CMD_BOOTMENU=y
+
+To run the bootmenu at startup add these additional settings::
+
+ CONFIG_AUTOBOOT_KEYED=y
+ CONFIG_BOOTDELAY=30
+ CONFIG_AUTOBOOT_MENU_SHOW=y
+
+When you intend to use the bootmenu on a color frame buffer console,
+make sure to additionally define::
+
+ CONFIG_CFB_CONSOLE_ANSI=y
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+button command
+==============
+
+Synopsis
+--------
+
+::
+
+ button list
+ button <name>
+
+Description
+-----------
+
+The button command is used to retrieve the status of a button. To show the
+status of a button with name 'button1' you would issue the command
+
+::
+
+ button button1
+
+The status of the button is both written to the console as *ON* or *OFF* and
+set in the return value variable *$?* as 0 (true) or 1 (false). To retrieve
+the status of a button with name *button1* and to write it to environment
+variable *status1* you would execute the commands
+
+::
+
+ button button1
+ setenv status1 $?
+
+A list of all available buttons and their status can be displayed using
+
+::
+
+ button list
+
+If a button device has not been probed yet, its status will be shown as
+*<inactive>* in the list.
+
+Configuration
+-------------
+
+To use the button command you must specify CONFIG_CMD_BUTTON=y and enable a
+button driver. The available buttons are defined in the device-tree.
+
+Return value
+------------
+
+The variable *$?* takes the following values
+
++---+-----------------------------+
+| 0 | ON, the button is pressed |
++---+-----------------------------+
+| 1 | OFF, the button is released |
++---+-----------------------------+
+| 0 | button list was shown |
++---+-----------------------------+
+| 1 | button not found |
++---+-----------------------------+
+| 1 | invalid arguments |
++---+-----------------------------+
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+cbsysinfo
+=========
+
+Synopis
+-------
+
+::
+
+ cbsysinfo
+
+
+Description
+-----------
+
+This displays information obtained from the coreboot sysinfo table. It is only
+useful when booting U-Boot from coreboot.
+
+Example
+-------
+
+::
+
+ => cbsysinfo
--- /dev/null
+conitrace command
+=================
+
+Synopsis
+--------
+
+::
+
+ conitrace
+
+Description
+-----------
+
+The conitrace command is used to test the correct function of the console input
+driver. It is especially valuable for checking the support for special keys like
+<F1> or <POS1>.
+
+To display escape sequences on a single line the output only advances to the
+next line after detecting a pause of a few milliseconds.
+
+The output is hexadecimal.
+
+Examples
+--------
+
+Entering keys <B><SHIFT-B><CTRL-B><X>
+
+::
+
+ => conitrace
+ Waiting for your input
+ To terminate type 'x'
+ 62
+ 42
+ 02
+ =>
+
+Entering keys <F1><POS1><DEL><BACKSPACE><X>
+
+::
+
+ => conitrace
+ Waiting for your input
+ To terminate type 'x'
+ 1b 4f 50
+ 1b 5b 48
+ 1b 5b 33 7e
+ 7f
+ =>
+
+Configuration
+-------------
+
+The conitrace command is only available if CONFIG_CMD_CONITRACE=y.
--- /dev/null
+echo command
+============
+
+Synopsis
+--------
+
+::
+
+ echo [-n] [args ...]
+
+Description
+-----------
+
+The echo command prints its arguments to the console separated by spaces.
+
+-n
+ Do not print a line feed after the last argument.
+
+args
+ Arguments to be printed. The arguments are evaluated before being passed to
+ the command.
+
+Examples
+--------
+
+Strings are parsed before the arguments are passed to the echo command:
+
+::
+
+ => echo "a" 'b' c
+ a b c
+ =>
+
+Observe how variables included in strings are handled:
+
+::
+
+ => setenv var X; echo "a)" ${var} 'b)' '${var}' c) ${var}
+ a) X b) ${var} c) X
+ =>
+
+
+-n suppresses the line feed:
+
+::
+
+ => echo -n 1 2 3; echo a b c
+ 1 2 3a b c
+ => echo -n 1 2 3
+ 1 2 3=>
+
+A more complex example:
+
+::
+
+ => for i in a b c; do for j in 1 2 3; do echo -n "${i}${j}, "; done; echo; done;
+ a1, a2, a3,
+ b1, b2, b3,
+ c1, c2, c3,
+ =>
+
+Return value
+------------
+
+The return value $? is always set to 0 (true).
--- /dev/null
+exception command
+=================
+
+Synopsis
+--------
+
+::
+
+ exception <type>
+
+Description
+-----------
+
+The exception command is used to test the handling of exceptions like undefined
+instructions, segmentation faults or alignment faults.
+
+type
+ type of exception to be generated. The available types are architecture
+ dependent. Use 'help exception' to determine which are available.
+
+ **ARM:**
+
+ breakpoint
+ prefetch abort
+
+ unaligned
+ data abort
+
+ undefined
+ undefined instruction
+
+ **RISC-V:**
+
+ ebreak
+ breakpoint exception
+
+ unaligned
+ load address misaligned
+
+ undefined
+ undefined instruction
+
+ **Sandbox:**
+
+ sigsegv
+ illegal memory access
+
+ undefined
+ undefined instruction
+
+ **x86:**
+
+ undefined
+ undefined instruction
+
+Examples
+--------
+
+::
+
+ => exception undefined
+
+ Illegal instruction
+ pc = 0x56076dd1a0f9, pc_reloc = 0x540f9
+
+ resetting ...
--- /dev/null
+exit command
+============
+
+Synopsis
+--------
+
+::
+
+ exit
+
+Description
+-----------
+
+The exit command terminates a script started via the run or source command.
+If scripts are nested, only the innermost script is left.
+
+::
+
+ => setenv inner 'echo entry inner; exit; echo inner done'
+ => setenv outer 'echo entry outer; run inner; echo outer done'
+ => run outer
+ entry outer
+ entry inner
+ outer done
+ =>
+
+When executed outside a script a warning is written. Following commands are not
+executed.
+
+::
+
+ => echo first; exit; echo last
+ first
+ exit not allowed from main input shell.
+ =>
+
+Return value
+------------
+
+$? is always set to 0 (true).
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+.. Copyright 2021, Kory Maincent <kory.maincent@bootlin.com>
+
+U-Boot extension board usage (CONFIG_EXTENSION)
+===============================================
+
+Synopsis
+--------
+
+::
+
+ extension scan
+ extension list
+ extension apply <extension number|all>
+
+Description
+-----------
+
+The "extension" command proposes a generic U-Boot mechanism to detect
+extension boards connected to the HW platform, and apply the appropriate
+Device Tree overlays depending on the detected extension boards.
+
+The "extension" command comes with three sub-commands:
+
+ - "extension scan" makes the generic code call the board-specific
+ extension_board_scan() function to retrieve the list of detected
+ extension boards.
+
+ - "extension list" allows to list the detected extension boards.
+
+ - "extension apply <number>|all" allows to apply the Device Tree
+ overlay(s) corresponding to one, or all, extension boards
+
+The latter requires two environment variables to exist:
+
+ - extension_overlay_addr: the RAM address where to load the Device
+ Tree overlays
+
+ - extension_overlay_cmd: the U-Boot command to load one overlay.
+ Indeed, the location and mechanism to load DT overlays is very setup
+ specific.
+
+In order to enable this mechanism, board-specific code must implement
+the extension_board_scan() function that fills in a linked list of
+"struct extension", each describing one extension board. In addition,
+the board-specific code must select the SUPPORT_EXTENSION_SCAN Kconfig
+boolean.
+
+Usage example
+-------------
+
+1. Make sure your devicetree is loaded and set as the working fdt tree.
+
+::
+
+ => run loadfdt
+ => fdt addr $fdtaddr
+
+2. Prepare the environment variables
+
+::
+
+ => setenv extension_overlay_addr 0x88080000
+ => setenv extension_overlay_cmd 'load mmc 0:1 ${extension_overlay_addr} /boot/${extension_overlay_name}'
+
+3. Detect the plugged extension board
+
+::
+
+ => extension scan
+
+4. List the plugged extension board information and the devicetree
+ overlay name
+
+::
+
+ => extension list
+
+5. Apply the appropriate devicetree overlay
+
+For apply the selected overlay:
+
+::
+
+ => extension apply 0
+
+For apply all the overlays:
+
+::
+
+ => extension apply all
+
+Simple extension_board_scan function example
+--------------------------------------------
+
+.. code-block:: c
+
+ int extension_board_scan(struct list_head *extension_list)
+ {
+ struct extension *extension;
+
+ extension = calloc(1, sizeof(struct extension));
+ snprintf(extension->overlay, sizeof(extension->overlay), "overlay.dtbo");
+ snprintf(extension->name, sizeof(extension->name), "extension board");
+ snprintf(extension->owner, sizeof(extension->owner), "sandbox");
+ snprintf(extension->version, sizeof(extension->version), "1.1");
+ snprintf(extension->other, sizeof(extension->other), "Extension board information");
+ list_add_tail(&extension->list, extension_list);
+
+ return 1;
+ }
--- /dev/null
+false command
+=============
+
+Synopsis
+--------
+
+::
+
+ false
+
+Description
+-----------
+
+The false command sets the return value $? to 1 (false).
+
+Example
+-------
+
+::
+
+ => false; echo $?
+ 1
+ =>
+
+Configuration
+-------------
+
+The false command is only available if CONFIG_HUSH_PARSER=y.
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+fatinfo command
+===============
+
+Synopsis
+--------
+
+::
+
+ fatinfo <interface> <dev[:part]>
+
+Description
+-----------
+
+The fatinfo command displays information about a FAT partition.
+
+interface
+ interface for accessing the block device (mmc, sata, scsi, usb, ....)
+
+dev
+ device number
+
+part
+ partition number, defaults to 1
+
+Example
+-------
+
+Here is the output for a partition on a 32 GB SD-Card:
+
+::
+
+ => fatinfo mmc 0:1
+ Interface: MMC
+ Device 0: Vendor: Man 00001b Snr 97560602 Rev: 13.8 Prod: EB1QT0
+ Type: Removable Hard Disk
+ Capacity: 30528.0 MB = 29.8 GB (62521344 x 512)
+ Filesystem: FAT32 "MYDISK "
+ =>
+
+Configuration
+-------------
+
+The fatinfo command is only available if CONFIG_CMD_FAT=y.
+
+Return value
+------------
+
+The return value $? is set to 0 (true) if the partition is a FAT partition.
+Otherwise it is set to 1 (false).
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+fatload command
+===============
+
+Synopsis
+--------
+
+::
+
+ fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
+
+Description
+-----------
+
+The fatload command is used to read a file from a FAT filesystem into memory.
+You can always use the :doc:`load command <load>` instead.
+
+The number of transferred bytes is saved in the environment variable filesize.
+The load address is saved in the environment variable fileaddr.
+
+interface
+ interface for accessing the block device (mmc, sata, scsi, usb, ....)
+
+dev
+ device number
+
+part
+ partition number, defaults to 0 (whole device)
+
+addr
+ load address, defaults to environment variable loadaddr or if loadaddr is
+ not set to configuration variable CONFIG_SYS_LOAD_ADDR
+
+filename
+ path to file, defaults to environment variable bootfile
+
+bytes
+ maximum number of bytes to load
+
+pos
+ number of bytes to skip
+
+addr, bytes, pos are hexadecimal numbers.
+
+If either 'pos' or 'bytes' are not aligned according to the minimum alignment
+requirement for DMA transfer (ARCH_DMA_MINALIGN) additional buffering will be
+used, a misaligned buffer warning will be printed, and performance will suffer
+for the load.
+
+Example
+-------
+
+::
+
+ => fatload mmc 0:1 ${kernel_addr_r} snp.efi
+ 149280 bytes read in 11 ms (12.9 MiB/s)
+ =>
+ => fatload mmc 0:1 ${kernel_addr_r} snp.efi 1000000
+ 149280 bytes read in 9 ms (15.8 MiB/s)
+ =>
+ => fatload mmc 0:1 ${kernel_addr_r} snp.efi 1000000 100
+ 149024 bytes read in 10 ms (14.2 MiB/s)
+ =>
+ => fatload mmc 0:1 ${kernel_addr_r} snp.efi 10
+ 16 bytes read in 1 ms (15.6 KiB/s)
+ =>
+
+Configuration
+-------------
+
+The fatload command is only available if CONFIG_CMD_FAT=y.
+
+Return value
+------------
+
+The return value $? is set to 0 (true) if the file was successfully loaded
+even if the number of bytes is less then the specified length.
+
+If an error occurs, the return value $? is set to 1 (false).
--- /dev/null
+for command
+===========
+
+Synopis
+-------
+
+::
+
+ for <variable> in <items>; do <commands>; done
+
+Description
+-----------
+
+The for command is used to loop over a list of values and execute a series of
+commands for each of these.
+
+The counter variable of the loop is a shell variable. Please, keep in mind that
+an environment variable takes precedence over a shell variable of the same name.
+
+variable
+ name of the counter variable
+
+items
+ space separated item list
+
+commands
+ commands to execute
+
+Example
+-------
+
+::
+
+ => setenv c
+ => for c in 1 2 3; do echo item ${c}; done
+ item 1
+ item 2
+ item 3
+ => echo ${c}
+ 3
+ => setenv c x
+ => for c in 1 2 3; do echo item ${c}; done
+ item x
+ item x
+ item x
+ =>
+
+The first line ensures that there is no environment variable *c*. Hence in the
+first loop the shell variable *c* is printed.
+
+After defining an environment variable of name *c* it takes precedence over the
+shell variable and the environment variable is printed.
+
+Return value
+------------
+
+The return value $? after the done statement is the return value of the last
+statement executed in the loop.
+
+::
+
+ => for i in true false; do ${i}; done; echo $?
+ 1
+ => for i in false true; do ${i}; done; echo $?
+ 0
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+load command
+============
+
+Synopsis
+--------
+
+::
+
+ load <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
+
+Description
+-----------
+
+The load command is used to read a file from a filesystem into memory.
+
+The number of transferred bytes is saved in the environment variable filesize.
+The load address is saved in the environment variable fileaddr.
+
+interface
+ interface for accessing the block device (mmc, sata, scsi, usb, ....)
+
+dev
+ device number
+
+part
+ partition number, defaults to 0 (whole device)
+
+addr
+ load address, defaults to environment variable loadaddr or if loadaddr is
+ not set to configuration variable CONFIG_SYS_LOAD_ADDR
+
+filename
+ path to file, defaults to environment variable bootfile
+
+bytes
+ maximum number of bytes to load
+
+pos
+ number of bytes to skip
+
+addr, bytes, pos are hexadecimal numbers.
+
+Example
+-------
+
+::
+
+ => load mmc 0:1 ${kernel_addr_r} snp.efi
+ 149280 bytes read in 11 ms (12.9 MiB/s)
+ =>
+ => load mmc 0:1 ${kernel_addr_r} snp.efi 1000000
+ 149280 bytes read in 9 ms (15.8 MiB/s)
+ =>
+ => load mmc 0:1 ${kernel_addr_r} snp.efi 1000000 100
+ 149024 bytes read in 10 ms (14.2 MiB/s)
+ =>
+ => load mmc 0:1 ${kernel_addr_r} snp.efi 10
+ 16 bytes read in 1 ms (15.6 KiB/s)
+ =>
+
+Configuration
+-------------
+
+The load command is only available if CONFIG_CMD_FS_GENERIC=y.
+
+Return value
+------------
+
+The return value $? is set to 0 (true) if the file was successfully loaded
+even if the number of bytes is less then the specified length.
+
+If an error occurs, the return value $? is set to 1 (false).
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+loady command
+=============
+
+Synopsis
+--------
+
+::
+
+ loady [addr [baud]]
+
+Description
+-----------
+
+The loady command is used to transfer a file to the device via the serial line
+using the YMODEM protocol.
+
+The number of transferred bytes is saved in environment variable filesize.
+
+addr
+ load address, defaults to environment variable loadaddr or if loadaddr is
+ not set to configuration variable CONFIG_SYS_LOAD_ADDR
+
+baud
+ baud rate for the ymodem transmission. After the transmission the baud
+ rate is reset to the original value.
+
+Example
+-------
+
+In the example below the terminal emulation program picocom was used to
+transfer a file to the device.
+
+After entering the loady command the key sequence <CTRL-A><CTRL-S> is used to
+let picocom prompt for the file name. Picocom invokes the program sz for the
+file transfer.
+
+::
+
+ => loady 80064000 115200
+ ## Ready for binary (ymodem) download to 0x80064000 at 115200 bps...
+ C
+ *** file: BOOTRISCV64.EFI
+ $ sz -b -vv BOOTRISCV64.EFI
+ Sending: BOOTRISCV64.EFI
+ Bytes Sent: 398976 BPS:7883
+ Sending:
+ Ymodem sectors/kbytes sent: 0/ 0k
+ Transfer complete
+
+ *** exit status: 0 ***
+ /1(CAN) packets, 4 retries
+ ## Total Size = 0x0006165f = 398943 Bytes
+ => echo ${filesize}
+ 6165f
+ =>
+
+Configuration
+-------------
+
+The command is only available if CONFIG_CMD_LOADB=y.
+
+Return value
+------------
+
+The return value $? is always 0 (true).
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+mbr command
+===========
+
+Synopsis
+--------
+
+::
+
+ mbr verify [interface] [device no] [partition list]
+ mbr write [interface] [device no] [partition list]
+
+Description
+-----------
+
+The mbr command lets users create or verify the MBR (Master Boot Record)
+partition layout based on the provided text description. The partition
+layout is alternatively read from the 'mbr_parts' environment variable.
+This can be used in scripts to help system image flashing tools to ensure
+proper partition layout.
+
+The syntax of the text description of the partition list is similar to
+the one used by the 'gpt' command.
+
+Supported partition parameters are:
+
+* name (currently ignored)
+* start (partition start offset in bytes)
+* size (in bytes or '-' to expand it to the whole free area)
+* bootable (boolean flag)
+* id (MBR partition type)
+
+If one wants to create more than 4 partitions, an 'Extended' primary
+partition (with 0x05 ID) has to be explicitly provided as a one of the
+first 4 entries.
+
+Here is an example how to create a 6 partitions (3 on the 'extended
+volume'), some of the predefined sizes:
+
+::
+
+ => setenv mbr_parts 'name=boot,start=4M,size=128M,bootable,id=0x0e;
+ name=rootfs,size=3072M,id=0x83;
+ name=system-data,size=512M,id=0x83;
+ name=[ext],size=-,id=0x05;
+ name=user,size=-,id=0x83;
+ name=modules,size=100M,id=0x83;
+ name=ramdisk,size=8M,id=0x83'
+ => mbr write mmc 0
+
+To check if the layout on the MMC #0 storage device matches the provided
+text description one has to issue following command (assuming that
+mbr_parts environment variable is set):
+
+::
+
+ => mbr verify mmc 0
+
+The verify sub-command is especially useful in the system update scripts:
+
+::
+
+ => if mbr verify mmc 0; then
+ echo MBR layout needs to be updated
+ ...
+ fi
+
+The 'mbr write' command returns 0 on success write or 1 on failure.
+
+The 'mbr verify' returns 0 if the layout matches the one on the storage
+device or 1 if not.
+
+Configuration
+-------------
+
+To use the mbr command you must specify CONFIG_CMD_MBR=y.
+
+Return value
+------------
+
+The variable *$?* takes the following values
+
++---+------------------------------+
+| 0 | mbr write was succesful |
++---+------------------------------+
+| 1 | mbr write failed |
++---+------------------------------+
+| 0 | mbr verify was succesful |
++---+------------------------------+
+| 1 | mbr verify was not succesful |
++---+------------------------------+
+|-1 | invalid arguments |
++---+------------------------------+
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+md command
+==========
+
+Synopis
+-------
+
+::
+
+ md <address>[<data_size>] [<length>]
+
+Description
+-----------
+
+The md command is used to dump the contents of memory. It uses a standard
+format that includes the address, hex data and ASCII display. It supports
+various data sizes and uses the endianness of the target.
+
+The specified data_size and length become the defaults for future memory
+commands commands.
+
+address
+ start address to display
+
+data_size
+ size of each value to display (defaults to .l):
+
+ ========= ===================
+ data_size Output size
+ ========= ===================
+ .b byte
+ .w word (16 bits)
+ .l long (32 bits)
+ .q quadword (64 bits)
+ ========= ===================
+
+length
+ number of values to dump. Defaults to 40 (0d64). Note that this is not
+ the same as the number of bytes, unless .b is used.
+
+Note that the format of 'md.b' can be emulated from linux with::
+
+ # This works but requires using sed to get the extra spaces
+ # <addr> is the address, <f> is the filename
+ xxd -o <addr> -g1 <f> |sed 's/ / /' >bad
+
+ # This uses a single tool but the offset always starts at 0
+ # <f> is the filename
+ hexdump -v -e '"%08.8_ax: " 16/1 "%02x " " "' -e '16/1 "%_p" "\n" ' <f>
+
+
+Example
+-------
+
+::
+
+ => md 10000
+ 00010000: 00010000 00000000 f0f30f00 00005596 .............U..
+ 00010010: 10011010 00000000 10011010 00000000 ................
+ 00010020: 10011050 00000000 b96d4cd8 00007fff P........Lm.....
+ 00010030: 00000000 00000000 f0f30f18 00005596 .............U..
+ 00010040: 10011040 00000000 10011040 00000000 @.......@.......
+ 00010050: b96d4cd8 00007fff 10011020 00000000 .Lm..... .......
+ 00010060: 00000003 000000c3 00000000 00000000 ................
+ 00010070: 00000000 00000000 f0e892f3 00005596 .............U..
+ 00010080: 00000000 000000a1 00000000 00000000 ................
+ 00010090: 00000000 00000000 f0e38aa6 00005596 .............U..
+ 000100a0: 00000000 000000a6 00000022 00000000 ........".......
+ 000100b0: 00000001 00000000 f0e38aa1 00005596 .............U..
+ 000100c0: 00000000 000000be 00000000 00000000 ................
+ 000100d0: 00000000 00000000 00000000 00000000 ................
+ 000100e0: 00000000 00000000 00000000 00000000 ................
+ 000100f0: 00000000 00000000 00000000 00000000 ................
+ => md.b 10000
+ 00010000: 00 00 01 00 00 00 00 00 00 0f f3 f0 96 55 00 00 .............U..
+ 00010010: 10 10 01 10 00 00 00 00 10 10 01 10 00 00 00 00 ................
+ 00010020: 50 10 01 10 00 00 00 00 d8 4c 6d b9 ff 7f 00 00 P........Lm.....
+ 00010030: 00 00 00 00 00 00 00 00 18 0f f3 f0 96 55 00 00 .............U..
+ => md.b 10000 10
+ 00010000: 00 00 01 00 00 00 00 00 00 0f f3 f0 96 55 00 00 .............U..
+ =>
+ 00010010: 10 10 01 10 00 00 00 00 10 10 01 10 00 00 00 00 ................
+ =>
+ 00010020: 50 10 01 10 00 00 00 00 d8 4c 6d b9 ff 7f 00 00 P........Lm.....
+ =>
+ => md.q 10000
+ 00010000: 0000000000010000 00005596f0f30f00 .............U..
+ 00010010: 0000000010011010 0000000010011010 ................
+ 00010020: 0000000010011050 00007fffb96d4cd8 P........Lm.....
+ 00010030: 0000000000000000 00005596f0f30f18 .............U..
+ 00010040: 0000000010011040 0000000010011040 @.......@.......
+ 00010050: 00007fffb96d4cd8 0000000010011020 .Lm..... .......
+ 00010060: 000000c300000003 0000000000000000 ................
+ 00010070: 0000000000000000 00005596f0e892f3 .............U..
+
+The empty commands cause a 'repeat', so that md shows the next available data
+in the same format as before.
+
+
+Return value
+------------
+
+The return value $? is always 0 (true).
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+mmc command
+============
+
+Synopsis
+--------
+
+::
+
+ mmc info
+ mmc read addr blk# cnt
+ mmc write addr blk# cnt
+ mmc erase blk# cnt
+ mmc rescan [mode]
+ mmc part
+ mmc dev [dev] [part] [mode]
+ mmc list
+ mmc wp
+ mmc bootbus <dev> <boot_bus_width> <reset_boot_bus_width> <boot_mode>
+ mmc bootpart-resize <dev> <dev part size MB> <RPMB part size MB>
+ mmc partconf <dev> [[varname] | [<boot_ack> <boot_partition> <partition_access>]]
+ mmc rst-function <dev> <value>
+
+Description
+-----------
+
+The mmc command is used to control MMC(eMMC/SD) device.
+
+The 'mmc info' command displays information (Manufacturer ID, OEM, Name, Bus Speed, Mode, ...) of MMC device.
+
+The 'mmc read' command reads raw data to memory address from MMC device with block offset and count.
+
+The 'mmc write' command writes raw data to MMC device from memory address with block offset and count.
+
+ addr
+ memory address
+ blk#
+ start block offset
+ cnt
+ block count
+
+The 'mmc erase' command erases *cnt* blocks on the MMC device starting at block *blk#*.
+
+ blk#
+ start block offset
+ cnt
+ block count
+
+The 'mmc rescan' command scans the available MMC device.
+
+ mode
+ speed mode to set.
+ CONFIG_MMC_SPEED_MODE_SET should be enabled. The requested speed mode is
+ passed as a decimal number according to the following table:
+
+ ========== ==========================
+ Speed mode Description
+ ========== ==========================
+ 0 MMC legacy
+ 1 MMC High Speed (26MHz)
+ 2 SD High Speed (50MHz)
+ 3 MMC High Speed (52MHz)
+ 4 MMC DDR52 (52MHz)
+ 5 UHS SDR12 (25MHz)
+ 6 UHS SDR25 (50MHz)
+ 7 UHS SDR50 (100MHz)
+ 8 UHS DDR50 (50MHz)
+ 9 UHS SDR104 (208MHz)
+ 10 HS200 (200MHz)
+ 11 HS400 (200MHz)
+ 12 HS400ES (200MHz)
+ ========== ==========================
+
+ A speed mode can be set only if it has already been enabled in the device tree
+
+The 'mmc part' command displays the list available partition on current mmc device.
+
+The 'mmc dev' command shows or set current mmc device.
+
+ dev
+ device number to change
+ part
+ partition number to change
+
+ mode
+ speed mode to set.
+ CONFIG_MMC_SPEED_MODE_SET should be enabled. The requested speed mode is
+ passed as a decimal number according to the following table:
+
+ ========== ==========================
+ Speed mode Description
+ ========== ==========================
+ 0 MMC legacy
+ 1 MMC High Speed (26MHz)
+ 2 SD High Speed (50MHz)
+ 3 MMC High Speed (52MHz)
+ 4 MMC DDR52 (52MHz)
+ 5 UHS SDR12 (25MHz)
+ 6 UHS SDR25 (50MHz)
+ 7 UHS SDR50 (100MHz)
+ 8 UHS DDR50 (50MHz)
+ 9 UHS SDR104 (208MHz)
+ 10 HS200 (200MHz)
+ 11 HS400 (200MHz)
+ 12 HS400ES (200MHz)
+ ========== ==========================
+
+ A speed mode can be set only if it has already been enabled in the device tree
+
+The 'mmc list' command displays the list available devices.
+
+The 'mmc wp' command enables "power on write protect" function for boot partitions.
+
+The 'mmc bootbus' command sets the BOOT_BUS_WIDTH field. (*Refer to eMMC specification*)
+
+ boot_bus_width
+ 0x0
+ x1 (sdr) or x4(ddr) buswidth in boot operation mode (default)
+ 0x1
+ x4 (sdr/ddr) buswidth in boot operation mode
+ 0x2
+ x8 (sdr/ddr) buswidth in boot operation mode
+ 0x3
+ Reserved
+
+ reset_boot_bus_width
+ 0x0
+ Reset buswidth to x1, Single data reate and backward compatible timing after boot operation (default)
+ 0x1
+ Retain BOOT_BUS_WIDTH and BOOT_MODE value after boot operation. This is relevant to Push-pull mode operation only
+
+ boot_mode
+ 0x0
+ Use single data rate + backward compatible timing in boot operation (default)
+ 0x1
+ Use single data rate + High Speed timing in boot operation mode
+ 0x2
+ Use dual data rate in boot operation
+ 0x3
+ Reserved
+
+The 'mmc partconf' command shows or changes PARTITION_CONFIG field.
+
+ varname
+ When showing the PARTITION_CONFIG, an optional environment variable to store the current boot_partition value into.
+ boot_ack
+ boot acknowledge value
+ boot_partition
+ boot partition to enable for boot
+ 0x0
+ Device not boot enabled(default)
+ 0x1
+ Boot partition1 enabled for boot
+ 0x2
+ Boot partition2 enabled for boot
+ 0x7
+ User area enabled for boot
+ others
+ Reserved
+ partition_access
+ partitions to access
+
+The 'mmc bootpart-resize' command changes sizes of boot and RPMB partitions.
+
+ dev
+ device number
+ boot part size MB
+ target size of boot partition
+ RPMB part size MB
+ target size of RPMB partition
+
+The 'mmc rst-function' command changes the RST_n_FUNCTION field.
+**WARNING** : This is a write-once field. (*Refer to eMMC specification*)
+
+ value
+ 0x0
+ RST_n signal is temporarily disabled (default)
+ 0x1
+ RST_n signal is permanently enabled
+ 0x2
+ RST_n signal is permanently disabled
+ 0x3
+ Reserved
+
+
+Examples
+--------
+
+The 'mmc info' command displays device's capabilities:
+::
+
+ => mmc info
+ Device: EXYNOS DWMMC
+ Manufacturer ID: 45
+ OEM: 100
+ Name: SDW16
+ Bus Speed: 52000000
+ Mode: MMC DDR52 (52MHz)
+ Rd Block Len: 512
+ MMC version 5.0
+ High Capacity: Yes
+ Capacity: 14.7 GiB
+ Bus Width: 8-bit DDR
+ Erase Group Size: 512 KiB
+ HC WP Group Size: 8 MiB
+ User Capacity: 14.7 GiB WRREL
+ Boot Capacity: 4 MiB ENH
+ RPMB Capacity: 4 MiB ENH
+ Boot area 0 is not write protected
+ Boot area 1 is not write protected
+
+The raw data can be read/written via 'mmc read/write' command:
+::
+
+ => mmc read 0x40000000 0x5000 0x100
+ MMC read: dev # 0, block # 20480, count 256 ... 256 blocks read: OK
+
+ => mmc write 0x40000000 0x5000 0x10
+ MMC write: dev # 0, block # 20480, count 256 ... 256 blocks written: OK
+
+The partition list can be shown via 'mmc part' command:
+::
+
+ => mmc part
+ Partition Map for MMC device 0 -- Partition Type: DOS
+
+ Part Start Sector Num Sectors UUID Type
+ 1 8192 131072 dff8751a-01 0e Boot
+ 2 139264 6291456 dff8751a-02 83
+ 3 6430720 1048576 dff8751a-03 83
+ 4 7479296 23298048 dff8751a-04 05 Extd
+ 5 7481344 307200 dff8751a-05 83
+ 6 7790592 65536 dff8751a-06 83
+ 7 7858176 16384 dff8751a-07 83
+ 8 7876608 22900736 dff8751a-08 83
+
+The current device can be shown or set via 'mmc dev' command:
+::
+
+ => mmc dev
+ switch to partitions #0, OK
+ mmc0(part0) is current device
+ => mmc dev 2 0
+ switch to partitions #0, OK
+ mmc2 is current device
+ => mmc dev 0 1 4
+ switch to partitions #1, OK
+ mmc0(part 1) is current device
+
+The list of available devices can be shown via 'mmc list' command:
+::
+
+ => mmc list
+ mmc list
+ EXYNOS DWMMC: 0 (eMMC)
+ EXYNOS DWMMC: 2 (SD)
+
+Configuration
+-------------
+
+The mmc command is only available if CONFIG_CMD_MMC=y.
+Some commands need to enable more configuration.
+
+write, erase
+ CONFIG_MMC_WRITE
+bootbus, bootpart-resize, partconf, rst-function
+ CONFIG_SUPPORT_EMMC_BOOT=y
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+pinmux command
+==============
+
+Synopsis
+--------
+
+::
+
+ pinmux list
+ pinmux dev [pincontroller-name]
+ pinmux status [-a | pin-name]
+
+Description
+-----------
+
+The pinmux command is used to show the pin-controller muxing.
+
+The 'pinmux list' command diplays the available pin-controller.
+
+The 'pinmux dev' command selects the pin-controller for next commands.
+
+ pincontroller-name
+ name of the pin-controller to select
+
+The 'pinmux status' command displays the pin muxing information.
+
+ \-a
+ display pin muxing of all pin-controllers.
+ pin-name
+ name of the pin to display
+
+Example
+-------
+
+::
+
+ => pinmux list
+ | Device | Driver | Parent
+ | pinctrl-gpio | sandbox_pinctrl_gpio | root_driver
+ | pinctrl | sandbox_pinctrl | root_driver
+ =>
+ => pinmux dev pinctrl
+ dev: pinctrl
+ =>
+ => pinmux status
+ P0 : UART TX.
+ P1 : UART RX.
+ P2 : I2S SCK.
+ P3 : I2S SD.
+ P4 : I2S WS.
+ P5 : GPIO0 bias-pull-up input-disable.
+ P6 : GPIO1 drive-open-drain.
+ P7 : GPIO2 bias-pull-down input-enable.
+ P8 : GPIO3 bias-disable.
+ =>
+ => pinmux status P0
+ P0 : UART TX.
+ =>
+ => pinmux status -a
+ --------------------------
+ pinctrl-gpio:
+ a0 : gpio input .
+ a1 : gpio input .
+ a2 : gpio input .
+ a3 : gpio input .
+ a4 : gpio input .
+ a5 : gpio output .
+ a6 : gpio output .
+ a7 : gpio input .
+ a8 : gpio input .
+ a9 : gpio input .
+ --------------------------
+ pinctrl:
+ P0 : UART TX.
+ P1 : UART RX.
+ P2 : I2S SCK.
+ P3 : I2S SD.
+ P4 : I2S WS.
+ P5 : GPIO0 bias-pull-up input-disable.
+ P6 : GPIO1 drive-open-drain.
+ P7 : GPIO2 bias-pull-down input-enable.
+ P8 : GPIO3 bias-disable.
+
+Configuration
+-------------
+
+The pinmux command is only available if CONFIG_CMD_PINMUX=y.
+
+Return value
+------------
+
+The return value $? is set to 0 (true) if the command succeded and to 1 (false)
+otherwise.
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+pstore command
+==============
+
+Synopsis
+--------
+
+::
+
+ pstore set <addr> <len> [record-size] [console-size] [ftrace-size] [pmsg_size] [ecc-size]
+ pstore display [record-type] [nb]
+ pstore save <interface> <dev[:part]> <directory-path>
+
+Design
+------
+
+Linux PStore and Ramoops modules (Linux config options PSTORE and PSTORE_RAM)
+allow to use memory to pass data from the dying breath of a crashing kernel to
+its successor. This command allows to read those records from U-Boot command
+line.
+
+Ramoops is an oops/panic logger that writes its logs to RAM before the system
+crashes. It works by logging oopses and panics in a circular buffer. Ramoops
+needs a system with persistent RAM so that the content of that area can survive
+after a restart.
+
+Ramoops uses a predefined memory area to store the dump.
+
+Ramoops parameters can be passed as kernel parameters or through Device Tree,
+i.e.::
+
+ ramoops.mem_address=0x30000000 ramoops.mem_size=0x100000 ramoops.record_size=0x2000 ramoops.console_size=0x2000 memmap=0x100000$0x30000000
+
+The same values should be set in U-Boot to be able to retrieve the records.
+This values can be set at build time in U-Boot configuration file, or at runtime.
+U-Boot automatically patches the Device Tree to pass the Ramoops parameters to
+the kernel.
+
+The PStore configuration parameters are:
+
+======================= ==========
+ Name Default
+======================= ==========
+CMD_PSTORE_MEM_ADDR
+CMD_PSTORE_MEM_SIZE 0x10000
+CMD_PSTORE_RECORD_SIZE 0x1000
+CMD_PSTORE_CONSOLE_SIZE 0x1000
+CMD_PSTORE_FTRACE_SIZE 0x1000
+CMD_PSTORE_PMSG_SIZE 0x1000
+CMD_PSTORE_ECC_SIZE 0
+======================= ==========
+
+Records sizes should be a power of 2.
+The memory size and the record/console size must be non-zero.
+
+Multiple 'dump' records can be stored in the memory reserved for PStore.
+The memory size has to be larger than the sum of the record sizes, i.e.::
+
+ MEM_SIZE >= RECORD_SIZE * n + CONSOLE_SIZE + FTRACE_SIZE + PMSG_SIZE
+
+Usage
+-----
+
+Generate kernel crash
+~~~~~~~~~~~~~~~~~~~~~
+
+For test purpose, you can generate a kernel crash by setting reboot timeout to
+10 seconds and trigger a panic
+
+.. code-block:: console
+
+ $ sudo sh -c "echo 1 > /proc/sys/kernel/sysrq"
+ $ sudo sh -c "echo 10 > /proc/sys/kernel/panic"
+ $ sudo sh -c "echo c > /proc/sysrq-trigger"
+
+Retrieve logs in U-Boot
+~~~~~~~~~~~~~~~~~~~~~~~
+
+First of all, unless PStore parameters as been set during U-Boot configuration
+and match kernel ramoops parameters, it needs to be set using 'pstore set', e.g.::
+
+ => pstore set 0x30000000 0x100000 0x2000 0x2000
+
+Then all available dumps can be displayed
+using::
+
+ => pstore display
+
+Or saved to an existing directory in an Ext2 or Ext4 partition, e.g. on root
+directory of 1st partition of the 2nd MMC::
+
+ => pstore save mmc 1:1 /
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+qfw command
+===========
+
+Synopsis
+--------
+
+::
+
+ qfw list
+ qfw cpus
+ qfw load [kernel_addr [initrd_addr]]
+
+Description
+-----------
+
+The *qfw* command is used to retrieve information form the QEMU firmware.
+
+The *qfw list* sub-command displays the QEMU firmware files.
+
+The *qfw cpus* sub-command displays the available CPUs.
+
+The *qfw load* command is used to load a kernel and an initial RAM disk.
+
+kernel_addr
+ address to which the file specified by the -kernel parameter of QEMU shall
+ be loaded. Defaults to environment variable *loadaddr* and further to
+ the value of *CONFIG_SYS_LOAD_ADDR*.
+
+initrd_addr
+ address to which the file specified by the -initrd parameter of QEMU shall
+ be loaded. Defaults to environment variable *ramdiskaddr* and further to
+ the value of *CONFIG_RAMDISK_ADDR*.
+
+Examples
+--------
+
+QEMU firmware files are listed via the *qfw list* command:
+
+::
+
+ => qfw list
+ etc/boot-fail-wait
+ etc/smbios/smbios-tables
+ etc/smbios/smbios-anchor
+ etc/e820
+ genroms/kvmvapic.bin
+ genroms/linuxboot.bin
+ etc/system-states
+ etc/acpi/tables
+ etc/table-loader
+ etc/tpm/log
+ etc/acpi/rsdp
+ bootorder
+
+The available CPUs can be shown via the *qfw cpus* command:
+
+::
+
+ => qfw cpu
+ 2 cpu(s) online
+
+The *-kernel* and *-initrd* parameters allow to specify a kernel and an
+initial RAM disk for QEMU:
+
+.. code-block:: bash
+
+ $ qemu-system-x86_64 -machine pc-i440fx-2.5 -bios u-boot.rom -m 1G \
+ -nographic -kernel vmlinuz -initrd initrd
+
+Now the kernel and the initial RAM disk can be loaded to the U-Boot memory via
+the *qfw load* command and booted thereafter.
+
+::
+
+ => qfw load ${kernel_addr_r} ${ramdisk_addr_r}
+ loading kernel to address 0000000001000000 size 5048f0 initrd 0000000004000000 size 3c94891
+ => zboot 1000000 5048f0 4000000 3c94891
+ Valid Boot Flag
+ Magic signature found
+ Linux kernel version 4.19.0-14-amd64 (debian-kernel@lists.debian.org) #1 SMP Debian 4.19.171-2 (2021-01-30)
+ Building boot_params at 0x00090000
+ Loading bzImage at address 100000 (5260160 bytes)
+
+Configuration
+-------------
+
+The qfw command is only available if CONFIG_CMD_QFW=y.
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+reset command
+=============
+
+Synopsis
+--------
+
+::
+
+ reset [-w]
+
+Description
+-----------
+
+Perform reset of the CPU. By default does COLD reset, which resets CPU,
+DDR and peripherals, on some boards also resets external PMIC.
+
+-w
+ Do warm WARM, reset CPU but keep peripheral/DDR/PMIC active.
+
+
+Return value
+------------
+
+The return value $? is always set to 0 (true).
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+sbi command
+===========
+
+Synopsis
+--------
+
+::
+
+ sbi
+
+Description
+-----------
+
+The sbi command is used to display information about the SBI (Supervisor Binary
+Interface) implementation on RISC-V systems.
+
+The output may look like:
+
+::
+
+ => sbi
+ SBI 0.2
+ OpenSBI
+ Extensions:
+ sbi_set_timer
+ sbi_console_putchar
+ sbi_console_getchar
+ sbi_clear_ipi
+ sbi_send_ipi
+ sbi_remote_fence_i
+ sbi_remote_sfence_vma
+ sbi_remote_sfence_vma_asid
+ sbi_shutdown
+ SBI Base Functionality
+ Timer Extension
+ IPI Extension
+ RFENCE Extension
+ Hart State Management Extension
+
+The first line indicates the version of the RISC-V SBI specification.
+The second line indicates the implementation.
+The further lines enumerate the implemented extensions.
+
+Configuration
+-------------
+
+To use the sbi command you must specify CONFIG_CMD_SBI=y.
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+scp03 command
+=============
+
+Synopsis
+--------
+
+::
+
+ scp03 enable
+ scp03 provision
+
+Description
+-----------
+
+The *scp03* command calls into a Trusted Application executing in a
+Trusted Execution Environment to enable (if present) the Secure
+Channel Protocol 03 stablished between the processor and the secure
+element.
+
+This protocol encrypts all the communication between the processor and
+the secure element using a set of pre-defined keys. These keys can be
+rotated (provisioned) using the *provision* request.
+
+See also
+--------
+
+For some information on the internals implemented in the TEE, please
+check the GlobalPlatform documentation on `Secure Channel Protocol '03'`_
+
+.. _Secure Channel Protocol '03':
+ https://globalplatform.org/wp-content/uploads/2014/07/GPC_2.3_D_SCP03_v1.1.2_PublicRelease.pdf
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+setexpr command
+===============
+
+Synopsis
+--------
+
+::
+
+ setexpr[.b, .w, .l .s] <name> [*]<value> <op> [*]<value2>
+ setexpr[.b, .w, .l] <name> [*]<value>
+ setexpr <name> fmt <format> [value]...
+ setexpr <name> gsub r s [t]
+ setexpr <name> sub r s [t]
+
+Description
+-----------
+
+The setexpr command is used to set an environment variable to the result
+of an evaluation.
+
+setexpr[.b, .w, .l .s] <name> [*]<value> <op> [*]<value2>
+ Set environment variable <name> to the result of the evaluated
+ expression specified by <op>.
+
+setexpr[.b, .w, .l] name [*]value
+ Load <value> into environment variable <name>
+
+setexpr name fmt <format> value
+ Set environment variable <name> to the result of the C like
+ format string <format> evaluation of <value>.
+
+setexpr name gsub <r> <s> [<t>]
+ For each substring matching the regular expression <r> in the
+ string <t>, substitute the string <s>.
+ The result is assigned to <name>.
+ If <t> is not supplied, use the old value of <name>.
+
+setexpr name sub <r> <s> [<t>]
+ Just like gsub(), but replace only the first matching substring
+
+The setexpr command takes the following arguments:
+
+format
+ This parameter contains a C or Bash like format string.
+ The number of arguments is limited to 4.
+ The following format types are supported:
+
+ c
+ single character
+ d, i
+ decimal value
+ o
+ octal value
+ s
+ string
+ u
+ unsigned decimal value
+ x, X
+ hexadecimal value
+ '%'
+ no conversion, instead a % character will be written
+
+ Backslash escapes:
+
+ \" = double quote
+ \\ = backslash
+ \a = alert (bell)
+ \b = backspace
+ \c = produce no further output
+ \f = form feed
+ \n = new line
+ \r = carriage return
+ \t = horizontal tab
+ \v = vertical tab
+ \NNN = octal number (NNN is 0 to 3 digits)
+
+name
+ The name of the environment variable to be set
+
+op
+ '|'
+ name = value | value2
+ '&'
+ name = value & value2
+ '+'
+ name = value + value2
+ (This is the only operator supported for strings.
+ It acts as concatenation operator on strings)
+ '^'
+ name = value ^ value2
+ '-'
+ name = value - value2
+ '*'
+ name = value * value2
+ '/'
+ name = value / value2
+ '%'
+ name = value % value2
+
+r
+ Regular expression
+
+s
+ Substitution string
+
+t
+ string
+
+value
+ Can either be an integer value, a string.
+ If the pointer prefix '*' is given value is treated as memory address.
+
+value2
+ See value
+
+Example
+-------
+
+::
+
+ => setexpr foo fmt %d 0x100
+ => echo $foo
+ 256
+ =>
+
+ => setexpr foo fmt 0x%08x 63
+ => echo $foo
+ 0x00000063
+ =>
+
+ => setexpr foo fmt %%%o 8
+ => echo $foo
+ %10
+ =>
+
+Configuration
+-------------
+
+The setexpr gsub and sub operations are only available if CONFIG_REGEX=y.
+
+Return value
+------------
+
+The return value $? is set to 0 (true) if the operation was successful.
+
+If an error occurs, the return value $? is set to 1 (false).
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+sf command
+==========
+
+Synopis
+-------
+
+::
+
+ sf probe [[[<bus>:]<cs>] [<hz> [<mode>]]]
+ sf read <addr> <offset>|<partition> <len>
+ sf write <addr> <offset>|<partition> <len>
+ sf erase <offset>|<partition> <len>
+ sf update <addr> <offset>|<partition> <len>
+ sf protect lock|unlock <sector> <len>
+ sf test <offset>|<partition> <len>
+
+Description
+-----------
+
+The *sf* command is used to access SPI flash, supporting read/write/erase and
+a few other functions.
+
+Probe
+-----
+
+The flash must first be probed with *sf probe* before any of the other
+subcommands can be used. All of the parameters are optional:
+
+bus
+ SPI bus number containing the SPI-flash chip, e.g. 0. If you don't know
+ the number, you can use 'dm uclass' to see all the spi devices,
+ and check the value for 'seq' for each one (here 0 and 2)::
+
+ uclass 89: spi
+ 0 spi@0 @ 05484960, seq 0
+ 1 spi@1 @ 05484b40, seq 2
+
+cs
+ SPI chip-select to use for the chip. This is often 0 and can be omitted,
+ but in some cases multiple slaves are attached to a SPI controller,
+ selected by a chip-select line for each one.
+
+hz
+ Speed of the SPI bus in hertz. This normally defaults to 100000, i.e.
+ 100KHz, which is very slow. Note that if the device exists in the
+ device tree, there might be a speed provided there, in which case this
+ setting is ignored.
+
+mode
+ SPI mode to use:
+
+ ===== ================
+ Mode Meaning
+ ===== ================
+ 0 CPOL=0, CPHA=0
+ 1 CPOL=0, CPHA=1
+ 2 CPOL=1, CPHA=0
+ 3 CPOL=1, CPHA=1
+ ===== ================
+
+ Clock phase (CPHA) 0 means that data is transferred (sampled) on the
+ first clock edge; 1 means the second.
+
+ Clock polarity (CPOL) controls the idle state of the clock, 0 for low,
+ 1 for high.
+ The active state is the opposite of idle.
+
+ You may find this `SPI documentation`_ useful.
+
+Parameters for other subcommands (described below) are as follows:
+
+addr
+ Memory address to start transfer
+
+offset
+ Flash offset to start transfer
+
+partition
+ If the parameter is not numeric, it is assumed to be a partition
+ description in the format <dev_type><dev_num>,<part_num> which is not
+ covered here. This requires CONFIG_CMD_MTDPARTS.
+
+len
+ Number of bytes to transfer
+
+Read
+~~~~
+
+Use *sf read* to read from SPI flash to memory. The read will fail if an
+attempt is made to read past the end of the flash.
+
+
+Write
+~~~~~
+
+Use *sf write* to write from memory to SPI flash. The SPI flash should be
+erased first, since otherwise the result is undefined.
+
+The write will fail if an attempt is made to read past the end of the flash.
+
+
+Erase
+~~~~~
+
+Use *sf erase* to erase a region of SPI flash. The erase will fail if any part
+of the region to be erased is protected or lies past the end of the flash. It
+may also fail if the start offset or length are not aligned to an erase region
+(e.g. 256 bytes).
+
+
+Update
+~~~~~~
+
+Use *sf update* to automatically erase and update a region of SPI flash from
+memory. This works a sector at a time (typical 4KB or 64KB). For each
+sector it first checks if the sector already has the right data. If so it is
+skipped. If not, the sector is erased and the new data written. Note that if
+the length is not a multiple of the erase size, the space after the data in
+the last sector will be erased. If the offset does not start at the beginning
+of an erase block, the operation will fail.
+
+Speed statistics are shown including the number of bytes that were already
+correct.
+
+
+Protect
+~~~~~~~
+
+SPI-flash chips often have a protection feature where the chip is split up into
+regions which can be locked or unlocked. With *sf protect* it is possible to
+change these settings, if supported by the driver.
+
+lock|unlock
+ Selects whether to lock or unlock the sectors
+
+<sector>
+ Start sector number to lock/unlock. This may be the byte offset or some
+ other value, depending on the chip.
+
+<len>
+ Number of bytes to lock/unlock
+
+
+Test
+~~~~
+
+A convenient and fast *sf test* subcommand provides a way to check that SPI
+flash is working as expected. This works in four stages:
+
+ * erase - erases the entire region
+ * check - checks that the region is erased
+ * write - writes a test pattern to the region, consisting of the U-Boot code
+ * read - reads back the test pattern to check that it was written correctly
+
+Memory is allocated for two buffers, each <len> bytes in size. At typical
+size is 64KB to 1MB. The offset and size must be aligned to an erase boundary.
+
+Note that this test will fail if any part of the SPI flash is write-protected.
+
+
+Examples
+--------
+
+This first example uses sandbox::
+
+ => sf probe
+ SF: Detected m25p16 with page size 256 Bytes, erase size 64 KiB, total 2 MiB
+ => sf read 1000 1100 80000
+ device 0 offset 0x1100, size 0x80000
+ SF: 524288 bytes @ 0x1100 Read: OK
+ => md 1000
+ 00001000: edfe0dd0 f33a0000 78000000 84250000 ......:....x..%.
+ 00001010: 28000000 11000000 10000000 00000000 ...(............
+ 00001020: 6f050000 0c250000 00000000 00000000 ...o..%.........
+ 00001030: 00000000 00000000 00000000 00000000 ................
+ 00001040: 00000000 00000000 00000000 00000000 ................
+ 00001050: 00000000 00000000 00000000 00000000 ................
+ 00001060: 00000000 00000000 00000000 00000000 ................
+ 00001070: 00000000 00000000 01000000 00000000 ................
+ 00001080: 03000000 04000000 00000000 01000000 ................
+ 00001090: 03000000 04000000 0f000000 01000000 ................
+ 000010a0: 03000000 08000000 1b000000 646e6173 ............sand
+ 000010b0: 00786f62 03000000 08000000 21000000 box............!
+ 000010c0: 646e6173 00786f62 01000000 61696c61 sandbox.....alia
+ 000010d0: 00736573 03000000 07000000 2c000000 ses............,
+ 000010e0: 6332692f 00003040 03000000 07000000 /i2c@0..........
+ 000010f0: 31000000 6963702f 00003040 03000000 ...1/pci@0......
+ => sf erase 0 80000
+ SF: 524288 bytes @ 0x0 Erased: OK
+ => sf read 1000 1100 80000
+ device 0 offset 0x1100, size 0x80000
+ SF: 524288 bytes @ 0x1100 Read: OK
+ => md 1000
+ 00001000: ffffffff ffffffff ffffffff ffffffff ................
+ 00001010: ffffffff ffffffff ffffffff ffffffff ................
+ 00001020: ffffffff ffffffff ffffffff ffffffff ................
+ 00001030: ffffffff ffffffff ffffffff ffffffff ................
+ 00001040: ffffffff ffffffff ffffffff ffffffff ................
+ 00001050: ffffffff ffffffff ffffffff ffffffff ................
+ 00001060: ffffffff ffffffff ffffffff ffffffff ................
+ 00001070: ffffffff ffffffff ffffffff ffffffff ................
+ 00001080: ffffffff ffffffff ffffffff ffffffff ................
+ 00001090: ffffffff ffffffff ffffffff ffffffff ................
+ 000010a0: ffffffff ffffffff ffffffff ffffffff ................
+ 000010b0: ffffffff ffffffff ffffffff ffffffff ................
+ 000010c0: ffffffff ffffffff ffffffff ffffffff ................
+ 000010d0: ffffffff ffffffff ffffffff ffffffff ................
+ 000010e0: ffffffff ffffffff ffffffff ffffffff ................
+ 000010f0: ffffffff ffffffff ffffffff ffffffff ................
+
+This second example is running on coral, an x86 Chromebook::
+
+ => sf probe
+ SF: Detected w25q128fw with page size 256 Bytes, erase size 4 KiB, total 16 MiB
+ => sf erase 300000 80000
+ SF: 524288 bytes @ 0x300000 Erased: OK
+ => sf update 1110000 300000 80000
+ device 0 offset 0x300000, size 0x80000
+ 524288 bytes written, 0 bytes skipped in 0.457s, speed 1164578 B/s
+
+ # This does nothing as the flash is already updated
+ => sf update 1110000 300000 80000
+ device 0 offset 0x300000, size 0x80000
+ 0 bytes written, 524288 bytes skipped in 0.196s, speed 2684354 B/s
+ => sf test 00000 80000 # try a protected region
+ SPI flash test:
+ Erase failed (err = -5)
+ Test failed
+ => sf test 800000 80000
+ SPI flash test:
+ 0 erase: 18 ticks, 28444 KiB/s 227.552 Mbps
+ 1 check: 192 ticks, 2666 KiB/s 21.328 Mbps
+ 2 write: 227 ticks, 2255 KiB/s 18.040 Mbps
+ 3 read: 189 ticks, 2708 KiB/s 21.664 Mbps
+ Test passed
+ 0 erase: 18 ticks, 28444 KiB/s 227.552 Mbps
+ 1 check: 192 ticks, 2666 KiB/s 21.328 Mbps
+ 2 write: 227 ticks, 2255 KiB/s 18.040 Mbps
+ 3 read: 189 ticks, 2708 KiB/s 21.664 Mbps
+
+
+.. _SPI documentation:
+ https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+size command
+============
+
+Synopsis
+--------
+
+::
+
+ size <interface> <dev[:part]> <filename>
+
+Description
+-----------
+
+The size command determines the size of a file and sets the environment variable
+filesize to this value. If filename points to a directory, the value is set to
+zero.
+
+If the command fails, the filesize environment variable is not changed.
+
+dev
+ device number
+
+part
+ partition number, defaults to 1
+
+filename
+ path to file
+
+Configuration
+-------------
+
+The size command is only available if CONFIG_CMD_FS_GENERIC=y.
+
+Return value
+------------
+
+The return value $? is set to 0 (true) if the command succeded and to 1 (false)
+otherwise.
--- /dev/null
+true command
+============
+
+Synopsis
+--------
+
+::
+
+ true
+
+Description
+-----------
+
+The true command sets the return value $? to 0 (true).
+
+Example
+-------
+
+::
+
+ => true; echo $?
+ 0
+ =>
+
+Configuration
+-------------
+
+The true command is only available if CONFIG_HUSH_PARSER=y.
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+
+
+ums command
+===========
+
+Synopsis
+--------
+
+::
+
+ ums <dev> [<interface>] <devnum[:partnum]>
+
+Description
+-----------
+
+Use the USB Mass Storage class (also known as UMS) to make accessible an U-Boot
+block device (fully or with :ref:`U-Boot's partition syntax <partitions>`)
+to a USB host and to enable file transfers. U-Boot, the USB device, acts as a
+simple external hard drive plugged on the host USB port.
+
+This command "ums" stays in the USB's treatment loop until user enters Ctrl-C.
+
+dev
+ USB gadget device number
+
+interface
+ interface for accessing the block device (mmc, sata, scsi, usb, ....)
+ defaults is "mmc"
+
+devnum
+ device number for selected interface
+
+partnum
+ partition number or 0 to expose all partitions, defaults to 0
+
+Example
+-------
+
+::
+
+ => ums 0 mmc 0
+ => ums 0 usb 1:2
+
+Configuration
+-------------
+
+The ums command is only available if CONFIG_CMD_USB_MASS_STORAGE=y
+and depends on CONFIG_USB_USB_GADGET and CONFIG_BLK.
+
+Return value
+------------
+
+The return value $? is set to 0 (true) when the USB stack was successfully
+started and interrupted, with Ctrl-C or after USB cable issue (detection
+timeout or cable removal).
+
+If an error occurs, the return value $? is set to 1 (false).
--- /dev/null
+.. SPDX-License-Identifier: GPL-2.0+:
+
+wdt command
+============
+
+Synopsis
+--------
+
+::
+
+ wdt list
+ wdt dev [<name>]
+ wdt start <timeout_ms> [flags]
+ wdt stop
+ wdt reset
+ wdt expirer [flags]
+
+Description
+-----------
+
+The wdt command is used to control watchdog timers.
+
+The 'wdt list' command shows a list of all watchdog devices.
+
+The 'wdt dev' command called without argument shows the current watchdog device.
+The current device is set when passing the name of the device as argument.
+
+The 'wdt start' command starts the current watchdog timer.
+
+The 'wdt stop' command stops the current watchdog timer.
+
+The 'wdt reset' command resets the current watchdog timer without stopping it.
+
+The 'wdt expire' command let's the current watchdog timer expire immediately.
+This will lead to a reset.
+
+name
+ name of the watchdog device
+
+timeout_ms
+ timeout interval in milliseconds
+
+flags
+ unsigned long value passed to the driver. The usage is driver specific.
+ The value is ignored by most drivers.
+
+Example
+-------
+
+::
+
+ => wdt dev
+ No watchdog timer device set!
+ => wdt list
+ watchdog@1c20ca0 (sunxi_wdt)
+ => wdt dev watchdog@1c20ca0
+ => wdt dev
+ dev: watchdog@1c20ca0
+ => wdt start 3000
+ => wdt reset
+ => wdt stop
+ => wdt expire
+
+ U-Boot SPL 2022.04-rc3 (Mar 25 2022 - 13:48:33 +0000)
+
+ In the example above '(sunxi_wdt)' refers to the driver for the watchdog
+ device.
+
+Configuration
+-------------
+
+The command is only available if CONFIG_CMD_WDT=y.
+
+Return value
+------------
+
+The return value $? is 0 if the command succeeds, 1 upon failure.
+++ /dev/null
-conitrace command
-=================
-
-Synopsis
---------
-
-::
-
- conitrace
-
-Description
------------
-
-The conitrace command is used to test the correct function of the console input
-driver. It is especially valuable for checking the support for special keys like
-<F1> or <POS1>.
-
-To display escape sequences on a single line the output only advances to the
-next line after detecting a pause of a few milliseconds.
-
-The output is hexadecimal.
-
-Examples
---------
-
-Entering keys <B><SHIFT-B><CTRL-B><X>
-
-::
-
- => conitrace
- Waiting for your input
- To terminate type 'x'
- 62
- 42
- 02
- =>
-
-Entering keys <F1><POS1><DEL><BACKSPACE><X>
-
-::
-
- => conitrace
- Waiting for your input
- To terminate type 'x'
- 1b 4f 50
- 1b 5b 48
- 1b 5b 33 7e
- 7f
- =>
-
-Configuration
--------------
-
-The conitrace command is only available if CONFIG_CMD_CONITRACE=y.
+++ /dev/null
-echo command
-============
-
-Synopsis
---------
-
-::
-
- echo [-n] [args ...]
-
-Description
------------
-
-The echo command prints its arguments to the console separated by spaces.
-
--n
- Do not print a line feed after the last argument.
-
-args
- Arguments to be printed. The arguments are evaluated before being passed to
- the command.
-
-Examples
---------
-
-Strings are parsed before the arguments are passed to the echo command:
-
-::
-
- => echo "a" 'b' c
- a b c
- =>
-
-Observe how variables included in strings are handled:
-
-::
-
- => setenv var X; echo "a)" ${var} 'b)' '${var}' c) ${var}
- a) X b) ${var} c) X
- =>
-
-
--n suppresses the line feed:
-
-::
-
- => echo -n 1 2 3; echo a b c
- 1 2 3a b c
- => echo -n 1 2 3
- 1 2 3=>
-
-A more complex example:
-
-::
-
- => for i in a b c; do for j in 1 2 3; do echo -n "${i}${j}, "; done; echo; done;
- a1, a2, a3,
- b1, b2, b3,
- c1, c2, c3,
- =>
-
-Return value
-------------
-
-The return value $? is always set to 0 (true).
+++ /dev/null
-exception command
-=================
-
-Synopsis
---------
-
-::
-
- exception <type>
-
-Description
------------
-
-The exception command is used to test the handling of exceptions like undefined
-instructions, segmentation faults or alignment faults.
-
-type
- type of exception to be generated. The available types are architecture
- dependent. Use 'help exception' to determine which are available.
-
- **ARM:**
-
- breakpoint
- prefetch abort
-
- unaligned
- data abort
-
- undefined
- undefined instruction
-
- **RISC-V:**
-
- ebreak
- breakpoint exception
-
- unaligned
- load address misaligned
-
- undefined
- undefined instruction
-
- **Sandbox:**
-
- sigsegv
- illegal memory access
-
- undefined
- undefined instruction
-
- **x86:**
-
- undefined
- undefined instruction
-
-Examples
---------
-
-::
-
- => exception undefined
-
- Illegal instruction
- pc = 0x56076dd1a0f9, pc_reloc = 0x540f9
-
- resetting ...
+++ /dev/null
-exit command
-============
-
-Synopsis
---------
-
-::
-
- exit
-
-Description
------------
-
-The exit command terminates a script started via the run or source command.
-If scripts are nested, only the innermost script is left.
-
-::
-
- => setenv inner 'echo entry inner; exit; echo inner done'
- => setenv outer 'echo entry outer; run inner; echo outer done'
- => run outer
- entry outer
- entry inner
- outer done
- =>
-
-When executed outside a script a warning is written. Following commands are not
-executed.
-
-::
-
- => echo first; exit; echo last
- first
- exit not allowed from main input shell.
- =>
-
-Return value
-------------
-
-$? is always set to 0 (true).
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-.. Copyright 2021, Kory Maincent <kory.maincent@bootlin.com>
-
-U-Boot extension board usage (CONFIG_EXTENSION)
-===============================================
-
-Synopsis
---------
-
-::
-
- extension scan
- extension list
- extension apply <extension number|all>
-
-Description
------------
-
-The "extension" command proposes a generic U-Boot mechanism to detect
-extension boards connected to the HW platform, and apply the appropriate
-Device Tree overlays depending on the detected extension boards.
-
-The "extension" command comes with three sub-commands:
-
- - "extension scan" makes the generic code call the board-specific
- extension_board_scan() function to retrieve the list of detected
- extension boards.
-
- - "extension list" allows to list the detected extension boards.
-
- - "extension apply <number>|all" allows to apply the Device Tree
- overlay(s) corresponding to one, or all, extension boards
-
-The latter requires two environment variables to exist:
-
- - extension_overlay_addr: the RAM address where to load the Device
- Tree overlays
-
- - extension_overlay_cmd: the U-Boot command to load one overlay.
- Indeed, the location and mechanism to load DT overlays is very setup
- specific.
-
-In order to enable this mechanism, board-specific code must implement
-the extension_board_scan() function that fills in a linked list of
-"struct extension", each describing one extension board. In addition,
-the board-specific code must select the SUPPORT_EXTENSION_SCAN Kconfig
-boolean.
-
-Usage example
--------------
-
-1. Make sure your devicetree is loaded and set as the working fdt tree.
-
-::
-
- => run loadfdt
- => fdt addr $fdtaddr
-
-2. Prepare the environment variables
-
-::
-
- => setenv extension_overlay_addr 0x88080000
- => setenv extension_overlay_cmd 'load mmc 0:1 ${extension_overlay_addr} /boot/${extension_overlay_name}'
-
-3. Detect the plugged extension board
-
-::
-
- => extension scan
-
-4. List the plugged extension board information and the devicetree
- overlay name
-
-::
-
- => extension list
-
-5. Apply the appropriate devicetree overlay
-
-For apply the selected overlay:
-
-::
-
- => extension apply 0
-
-For apply all the overlays:
-
-::
-
- => extension apply all
-
-Simple extension_board_scan function example
---------------------------------------------
-
-.. code-block:: c
-
- int extension_board_scan(struct list_head *extension_list)
- {
- struct extension *extension;
-
- extension = calloc(1, sizeof(struct extension));
- snprintf(extension->overlay, sizeof(extension->overlay), "overlay.dtbo");
- snprintf(extension->name, sizeof(extension->name), "extension board");
- snprintf(extension->owner, sizeof(extension->owner), "sandbox");
- snprintf(extension->version, sizeof(extension->version), "1.1");
- snprintf(extension->other, sizeof(extension->other), "Extension board information");
- list_add_tail(&extension->list, extension_list);
-
- return 1;
- }
+++ /dev/null
-false command
-=============
-
-Synopsis
---------
-
-::
-
- false
-
-Description
------------
-
-The false command sets the return value $? to 1 (false).
-
-Example
--------
-
-::
-
- => false; echo $?
- 1
- =>
-
-Configuration
--------------
-
-The false command is only available if CONFIG_HUSH_PARSER=y.
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-fatinfo command
-===============
-
-Synopsis
---------
-
-::
-
- fatinfo <interface> <dev[:part]>
-
-Description
------------
-
-The fatinfo command displays information about a FAT partition.
-
-interface
- interface for accessing the block device (mmc, sata, scsi, usb, ....)
-
-dev
- device number
-
-part
- partition number, defaults to 1
-
-Example
--------
-
-Here is the output for a partition on a 32 GB SD-Card:
-
-::
-
- => fatinfo mmc 0:1
- Interface: MMC
- Device 0: Vendor: Man 00001b Snr 97560602 Rev: 13.8 Prod: EB1QT0
- Type: Removable Hard Disk
- Capacity: 30528.0 MB = 29.8 GB (62521344 x 512)
- Filesystem: FAT32 "MYDISK "
- =>
-
-Configuration
--------------
-
-The fatinfo command is only available if CONFIG_CMD_FAT=y.
-
-Return value
-------------
-
-The return value $? is set to 0 (true) if the partition is a FAT partition.
-Otherwise it is set to 1 (false).
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-fatload command
-===============
-
-Synopsis
---------
-
-::
-
- fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
-
-Description
------------
-
-The fatload command is used to read a file from a FAT filesystem into memory.
-You can always use the :doc:`load command <load>` instead.
-
-The number of transferred bytes is saved in the environment variable filesize.
-The load address is saved in the environment variable fileaddr.
-
-interface
- interface for accessing the block device (mmc, sata, scsi, usb, ....)
-
-dev
- device number
-
-part
- partition number, defaults to 0 (whole device)
-
-addr
- load address, defaults to environment variable loadaddr or if loadaddr is
- not set to configuration variable CONFIG_SYS_LOAD_ADDR
-
-filename
- path to file, defaults to environment variable bootfile
-
-bytes
- maximum number of bytes to load
-
-pos
- number of bytes to skip
-
-addr, bytes, pos are hexadecimal numbers.
-
-If either 'pos' or 'bytes' are not aligned according to the minimum alignment
-requirement for DMA transfer (ARCH_DMA_MINALIGN) additional buffering will be
-used, a misaligned buffer warning will be printed, and performance will suffer
-for the load.
-
-Example
--------
-
-::
-
- => fatload mmc 0:1 ${kernel_addr_r} snp.efi
- 149280 bytes read in 11 ms (12.9 MiB/s)
- =>
- => fatload mmc 0:1 ${kernel_addr_r} snp.efi 1000000
- 149280 bytes read in 9 ms (15.8 MiB/s)
- =>
- => fatload mmc 0:1 ${kernel_addr_r} snp.efi 1000000 100
- 149024 bytes read in 10 ms (14.2 MiB/s)
- =>
- => fatload mmc 0:1 ${kernel_addr_r} snp.efi 10
- 16 bytes read in 1 ms (15.6 KiB/s)
- =>
-
-Configuration
--------------
-
-The fatload command is only available if CONFIG_CMD_FAT=y.
-
-Return value
-------------
-
-The return value $? is set to 0 (true) if the file was successfully loaded
-even if the number of bytes is less then the specified length.
-
-If an error occurs, the return value $? is set to 1 (false).
+++ /dev/null
-for command
-===========
-
-Synopis
--------
-
-::
-
- for <variable> in <items>; do <commands>; done
-
-Description
------------
-
-The for command is used to loop over a list of values and execute a series of
-commands for each of these.
-
-The counter variable of the loop is a shell variable. Please, keep in mind that
-an environment variable takes precedence over a shell variable of the same name.
-
-variable
- name of the counter variable
-
-items
- space separated item list
-
-commands
- commands to execute
-
-Example
--------
-
-::
-
- => setenv c
- => for c in 1 2 3; do echo item ${c}; done
- item 1
- item 2
- item 3
- => echo ${c}
- 3
- => setenv c x
- => for c in 1 2 3; do echo item ${c}; done
- item x
- item x
- item x
- =>
-
-The first line ensures that there is no environment variable *c*. Hence in the
-first loop the shell variable *c* is printed.
-
-After defining an environment variable of name *c* it takes precedence over the
-shell variable and the environment variable is printed.
-
-Return value
-------------
-
-The return value $? after the done statement is the return value of the last
-statement executed in the loop.
-
-::
-
- => for i in true false; do ${i}; done; echo $?
- 1
- => for i in false true; do ${i}; done; echo $?
- 0
.. toctree::
:maxdepth: 1
- acpi
- addrmap
- askenv
- base
- bootefi
- booti
- bootmenu
- button
- x86/cbsysinfo
- conitrace
- echo
- exception
- extension
- exit
- false
- fatinfo
- fatload
- for
- load
- loady
- mbr
- md
- mmc
- pinmux
- pstore
- qfw
- reset
- sbi
- sf
- scp03
- setexpr
- size
- true
- ums
- wdt
+ cmd/acpi
+ cmd/addrmap
+ cmd/askenv
+ cmd/base
+ cmd/bootefi
+ cmd/booti
+ cmd/bootmenu
+ cmd/button
+ cmd/cbsysinfo
+ cmd/conitrace
+ cmd/echo
+ cmd/exception
+ cmd/extension
+ cmd/exit
+ cmd/false
+ cmd/fatinfo
+ cmd/fatload
+ cmd/for
+ cmd/load
+ cmd/loady
+ cmd/mbr
+ cmd/md
+ cmd/mmc
+ cmd/pinmux
+ cmd/pstore
+ cmd/qfw
+ cmd/reset
+ cmd/sbi
+ cmd/sf
+ cmd/scp03
+ cmd/setexpr
+ cmd/size
+ cmd/true
+ cmd/ums
+ cmd/wdt
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-load command
-============
-
-Synopsis
---------
-
-::
-
- load <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
-
-Description
------------
-
-The load command is used to read a file from a filesystem into memory.
-
-The number of transferred bytes is saved in the environment variable filesize.
-The load address is saved in the environment variable fileaddr.
-
-interface
- interface for accessing the block device (mmc, sata, scsi, usb, ....)
-
-dev
- device number
-
-part
- partition number, defaults to 0 (whole device)
-
-addr
- load address, defaults to environment variable loadaddr or if loadaddr is
- not set to configuration variable CONFIG_SYS_LOAD_ADDR
-
-filename
- path to file, defaults to environment variable bootfile
-
-bytes
- maximum number of bytes to load
-
-pos
- number of bytes to skip
-
-addr, bytes, pos are hexadecimal numbers.
-
-Example
--------
-
-::
-
- => load mmc 0:1 ${kernel_addr_r} snp.efi
- 149280 bytes read in 11 ms (12.9 MiB/s)
- =>
- => load mmc 0:1 ${kernel_addr_r} snp.efi 1000000
- 149280 bytes read in 9 ms (15.8 MiB/s)
- =>
- => load mmc 0:1 ${kernel_addr_r} snp.efi 1000000 100
- 149024 bytes read in 10 ms (14.2 MiB/s)
- =>
- => load mmc 0:1 ${kernel_addr_r} snp.efi 10
- 16 bytes read in 1 ms (15.6 KiB/s)
- =>
-
-Configuration
--------------
-
-The load command is only available if CONFIG_CMD_FS_GENERIC=y.
-
-Return value
-------------
-
-The return value $? is set to 0 (true) if the file was successfully loaded
-even if the number of bytes is less then the specified length.
-
-If an error occurs, the return value $? is set to 1 (false).
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-loady command
-=============
-
-Synopsis
---------
-
-::
-
- loady [addr [baud]]
-
-Description
------------
-
-The loady command is used to transfer a file to the device via the serial line
-using the YMODEM protocol.
-
-The number of transferred bytes is saved in environment variable filesize.
-
-addr
- load address, defaults to environment variable loadaddr or if loadaddr is
- not set to configuration variable CONFIG_SYS_LOAD_ADDR
-
-baud
- baud rate for the ymodem transmission. After the transmission the baud
- rate is reset to the original value.
-
-Example
--------
-
-In the example below the terminal emulation program picocom was used to
-transfer a file to the device.
-
-After entering the loady command the key sequence <CTRL-A><CTRL-S> is used to
-let picocom prompt for the file name. Picocom invokes the program sz for the
-file transfer.
-
-::
-
- => loady 80064000 115200
- ## Ready for binary (ymodem) download to 0x80064000 at 115200 bps...
- C
- *** file: BOOTRISCV64.EFI
- $ sz -b -vv BOOTRISCV64.EFI
- Sending: BOOTRISCV64.EFI
- Bytes Sent: 398976 BPS:7883
- Sending:
- Ymodem sectors/kbytes sent: 0/ 0k
- Transfer complete
-
- *** exit status: 0 ***
- /1(CAN) packets, 4 retries
- ## Total Size = 0x0006165f = 398943 Bytes
- => echo ${filesize}
- 6165f
- =>
-
-Configuration
--------------
-
-The command is only available if CONFIG_CMD_LOADB=y.
-
-Return value
-------------
-
-The return value $? is always 0 (true).
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-mbr command
-===========
-
-Synopsis
---------
-
-::
-
- mbr verify [interface] [device no] [partition list]
- mbr write [interface] [device no] [partition list]
-
-Description
------------
-
-The mbr command lets users create or verify the MBR (Master Boot Record)
-partition layout based on the provided text description. The partition
-layout is alternatively read from the 'mbr_parts' environment variable.
-This can be used in scripts to help system image flashing tools to ensure
-proper partition layout.
-
-The syntax of the text description of the partition list is similar to
-the one used by the 'gpt' command.
-
-Supported partition parameters are:
-
-* name (currently ignored)
-* start (partition start offset in bytes)
-* size (in bytes or '-' to expand it to the whole free area)
-* bootable (boolean flag)
-* id (MBR partition type)
-
-If one wants to create more than 4 partitions, an 'Extended' primary
-partition (with 0x05 ID) has to be explicitly provided as a one of the
-first 4 entries.
-
-Here is an example how to create a 6 partitions (3 on the 'extended
-volume'), some of the predefined sizes:
-
-::
-
- => setenv mbr_parts 'name=boot,start=4M,size=128M,bootable,id=0x0e;
- name=rootfs,size=3072M,id=0x83;
- name=system-data,size=512M,id=0x83;
- name=[ext],size=-,id=0x05;
- name=user,size=-,id=0x83;
- name=modules,size=100M,id=0x83;
- name=ramdisk,size=8M,id=0x83'
- => mbr write mmc 0
-
-To check if the layout on the MMC #0 storage device matches the provided
-text description one has to issue following command (assuming that
-mbr_parts environment variable is set):
-
-::
-
- => mbr verify mmc 0
-
-The verify sub-command is especially useful in the system update scripts:
-
-::
-
- => if mbr verify mmc 0; then
- echo MBR layout needs to be updated
- ...
- fi
-
-The 'mbr write' command returns 0 on success write or 1 on failure.
-
-The 'mbr verify' returns 0 if the layout matches the one on the storage
-device or 1 if not.
-
-Configuration
--------------
-
-To use the mbr command you must specify CONFIG_CMD_MBR=y.
-
-Return value
-------------
-
-The variable *$?* takes the following values
-
-+---+------------------------------+
-| 0 | mbr write was succesful |
-+---+------------------------------+
-| 1 | mbr write failed |
-+---+------------------------------+
-| 0 | mbr verify was succesful |
-+---+------------------------------+
-| 1 | mbr verify was not succesful |
-+---+------------------------------+
-|-1 | invalid arguments |
-+---+------------------------------+
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-md command
-==========
-
-Synopis
--------
-
-::
-
- md <address>[<data_size>] [<length>]
-
-Description
------------
-
-The md command is used to dump the contents of memory. It uses a standard
-format that includes the address, hex data and ASCII display. It supports
-various data sizes and uses the endianness of the target.
-
-The specified data_size and length become the defaults for future memory
-commands commands.
-
-address
- start address to display
-
-data_size
- size of each value to display (defaults to .l):
-
- ========= ===================
- data_size Output size
- ========= ===================
- .b byte
- .w word (16 bits)
- .l long (32 bits)
- .q quadword (64 bits)
- ========= ===================
-
-length
- number of values to dump. Defaults to 40 (0d64). Note that this is not
- the same as the number of bytes, unless .b is used.
-
-Note that the format of 'md.b' can be emulated from linux with::
-
- # This works but requires using sed to get the extra spaces
- # <addr> is the address, <f> is the filename
- xxd -o <addr> -g1 <f> |sed 's/ / /' >bad
-
- # This uses a single tool but the offset always starts at 0
- # <f> is the filename
- hexdump -v -e '"%08.8_ax: " 16/1 "%02x " " "' -e '16/1 "%_p" "\n" ' <f>
-
-
-Example
--------
-
-::
-
- => md 10000
- 00010000: 00010000 00000000 f0f30f00 00005596 .............U..
- 00010010: 10011010 00000000 10011010 00000000 ................
- 00010020: 10011050 00000000 b96d4cd8 00007fff P........Lm.....
- 00010030: 00000000 00000000 f0f30f18 00005596 .............U..
- 00010040: 10011040 00000000 10011040 00000000 @.......@.......
- 00010050: b96d4cd8 00007fff 10011020 00000000 .Lm..... .......
- 00010060: 00000003 000000c3 00000000 00000000 ................
- 00010070: 00000000 00000000 f0e892f3 00005596 .............U..
- 00010080: 00000000 000000a1 00000000 00000000 ................
- 00010090: 00000000 00000000 f0e38aa6 00005596 .............U..
- 000100a0: 00000000 000000a6 00000022 00000000 ........".......
- 000100b0: 00000001 00000000 f0e38aa1 00005596 .............U..
- 000100c0: 00000000 000000be 00000000 00000000 ................
- 000100d0: 00000000 00000000 00000000 00000000 ................
- 000100e0: 00000000 00000000 00000000 00000000 ................
- 000100f0: 00000000 00000000 00000000 00000000 ................
- => md.b 10000
- 00010000: 00 00 01 00 00 00 00 00 00 0f f3 f0 96 55 00 00 .............U..
- 00010010: 10 10 01 10 00 00 00 00 10 10 01 10 00 00 00 00 ................
- 00010020: 50 10 01 10 00 00 00 00 d8 4c 6d b9 ff 7f 00 00 P........Lm.....
- 00010030: 00 00 00 00 00 00 00 00 18 0f f3 f0 96 55 00 00 .............U..
- => md.b 10000 10
- 00010000: 00 00 01 00 00 00 00 00 00 0f f3 f0 96 55 00 00 .............U..
- =>
- 00010010: 10 10 01 10 00 00 00 00 10 10 01 10 00 00 00 00 ................
- =>
- 00010020: 50 10 01 10 00 00 00 00 d8 4c 6d b9 ff 7f 00 00 P........Lm.....
- =>
- => md.q 10000
- 00010000: 0000000000010000 00005596f0f30f00 .............U..
- 00010010: 0000000010011010 0000000010011010 ................
- 00010020: 0000000010011050 00007fffb96d4cd8 P........Lm.....
- 00010030: 0000000000000000 00005596f0f30f18 .............U..
- 00010040: 0000000010011040 0000000010011040 @.......@.......
- 00010050: 00007fffb96d4cd8 0000000010011020 .Lm..... .......
- 00010060: 000000c300000003 0000000000000000 ................
- 00010070: 0000000000000000 00005596f0e892f3 .............U..
-
-The empty commands cause a 'repeat', so that md shows the next available data
-in the same format as before.
-
-
-Return value
-------------
-
-The return value $? is always 0 (true).
-
-
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-mmc command
-============
-
-Synopsis
---------
-
-::
-
- mmc info
- mmc read addr blk# cnt
- mmc write addr blk# cnt
- mmc erase blk# cnt
- mmc rescan [mode]
- mmc part
- mmc dev [dev] [part] [mode]
- mmc list
- mmc wp
- mmc bootbus <dev> <boot_bus_width> <reset_boot_bus_width> <boot_mode>
- mmc bootpart-resize <dev> <dev part size MB> <RPMB part size MB>
- mmc partconf <dev> [[varname] | [<boot_ack> <boot_partition> <partition_access>]]
- mmc rst-function <dev> <value>
-
-Description
------------
-
-The mmc command is used to control MMC(eMMC/SD) device.
-
-The 'mmc info' command displays information (Manufacturer ID, OEM, Name, Bus Speed, Mode, ...) of MMC device.
-
-The 'mmc read' command reads raw data to memory address from MMC device with block offset and count.
-
-The 'mmc write' command writes raw data to MMC device from memory address with block offset and count.
-
- addr
- memory address
- blk#
- start block offset
- cnt
- block count
-
-The 'mmc erase' command erases *cnt* blocks on the MMC device starting at block *blk#*.
-
- blk#
- start block offset
- cnt
- block count
-
-The 'mmc rescan' command scans the available MMC device.
-
- mode
- speed mode to set.
- CONFIG_MMC_SPEED_MODE_SET should be enabled. The requested speed mode is
- passed as a decimal number according to the following table:
-
- ========== ==========================
- Speed mode Description
- ========== ==========================
- 0 MMC legacy
- 1 MMC High Speed (26MHz)
- 2 SD High Speed (50MHz)
- 3 MMC High Speed (52MHz)
- 4 MMC DDR52 (52MHz)
- 5 UHS SDR12 (25MHz)
- 6 UHS SDR25 (50MHz)
- 7 UHS SDR50 (100MHz)
- 8 UHS DDR50 (50MHz)
- 9 UHS SDR104 (208MHz)
- 10 HS200 (200MHz)
- 11 HS400 (200MHz)
- 12 HS400ES (200MHz)
- ========== ==========================
-
- A speed mode can be set only if it has already been enabled in the device tree
-
-The 'mmc part' command displays the list available partition on current mmc device.
-
-The 'mmc dev' command shows or set current mmc device.
-
- dev
- device number to change
- part
- partition number to change
-
- mode
- speed mode to set.
- CONFIG_MMC_SPEED_MODE_SET should be enabled. The requested speed mode is
- passed as a decimal number according to the following table:
-
- ========== ==========================
- Speed mode Description
- ========== ==========================
- 0 MMC legacy
- 1 MMC High Speed (26MHz)
- 2 SD High Speed (50MHz)
- 3 MMC High Speed (52MHz)
- 4 MMC DDR52 (52MHz)
- 5 UHS SDR12 (25MHz)
- 6 UHS SDR25 (50MHz)
- 7 UHS SDR50 (100MHz)
- 8 UHS DDR50 (50MHz)
- 9 UHS SDR104 (208MHz)
- 10 HS200 (200MHz)
- 11 HS400 (200MHz)
- 12 HS400ES (200MHz)
- ========== ==========================
-
- A speed mode can be set only if it has already been enabled in the device tree
-
-The 'mmc list' command displays the list available devices.
-
-The 'mmc wp' command enables "power on write protect" function for boot partitions.
-
-The 'mmc bootbus' command sets the BOOT_BUS_WIDTH field. (*Refer to eMMC specification*)
-
- boot_bus_width
- 0x0
- x1 (sdr) or x4(ddr) buswidth in boot operation mode (default)
- 0x1
- x4 (sdr/ddr) buswidth in boot operation mode
- 0x2
- x8 (sdr/ddr) buswidth in boot operation mode
- 0x3
- Reserved
-
- reset_boot_bus_width
- 0x0
- Reset buswidth to x1, Single data reate and backward compatible timing after boot operation (default)
- 0x1
- Retain BOOT_BUS_WIDTH and BOOT_MODE value after boot operation. This is relevant to Push-pull mode operation only
-
- boot_mode
- 0x0
- Use single data rate + backward compatible timing in boot operation (default)
- 0x1
- Use single data rate + High Speed timing in boot operation mode
- 0x2
- Use dual data rate in boot operation
- 0x3
- Reserved
-
-The 'mmc partconf' command shows or changes PARTITION_CONFIG field.
-
- varname
- When showing the PARTITION_CONFIG, an optional environment variable to store the current boot_partition value into.
- boot_ack
- boot acknowledge value
- boot_partition
- boot partition to enable for boot
- 0x0
- Device not boot enabled(default)
- 0x1
- Boot partition1 enabled for boot
- 0x2
- Boot partition2 enabled for boot
- 0x7
- User area enabled for boot
- others
- Reserved
- partition_access
- partitions to access
-
-The 'mmc bootpart-resize' command changes sizes of boot and RPMB partitions.
-
- dev
- device number
- boot part size MB
- target size of boot partition
- RPMB part size MB
- target size of RPMB partition
-
-The 'mmc rst-function' command changes the RST_n_FUNCTION field.
-**WARNING** : This is a write-once field. (*Refer to eMMC specification*)
-
- value
- 0x0
- RST_n signal is temporarily disabled (default)
- 0x1
- RST_n signal is permanently enabled
- 0x2
- RST_n signal is permanently disabled
- 0x3
- Reserved
-
-
-Examples
---------
-
-The 'mmc info' command displays device's capabilities:
-::
-
- => mmc info
- Device: EXYNOS DWMMC
- Manufacturer ID: 45
- OEM: 100
- Name: SDW16
- Bus Speed: 52000000
- Mode: MMC DDR52 (52MHz)
- Rd Block Len: 512
- MMC version 5.0
- High Capacity: Yes
- Capacity: 14.7 GiB
- Bus Width: 8-bit DDR
- Erase Group Size: 512 KiB
- HC WP Group Size: 8 MiB
- User Capacity: 14.7 GiB WRREL
- Boot Capacity: 4 MiB ENH
- RPMB Capacity: 4 MiB ENH
- Boot area 0 is not write protected
- Boot area 1 is not write protected
-
-The raw data can be read/written via 'mmc read/write' command:
-::
-
- => mmc read 0x40000000 0x5000 0x100
- MMC read: dev # 0, block # 20480, count 256 ... 256 blocks read: OK
-
- => mmc write 0x40000000 0x5000 0x10
- MMC write: dev # 0, block # 20480, count 256 ... 256 blocks written: OK
-
-The partition list can be shown via 'mmc part' command:
-::
-
- => mmc part
- Partition Map for MMC device 0 -- Partition Type: DOS
-
- Part Start Sector Num Sectors UUID Type
- 1 8192 131072 dff8751a-01 0e Boot
- 2 139264 6291456 dff8751a-02 83
- 3 6430720 1048576 dff8751a-03 83
- 4 7479296 23298048 dff8751a-04 05 Extd
- 5 7481344 307200 dff8751a-05 83
- 6 7790592 65536 dff8751a-06 83
- 7 7858176 16384 dff8751a-07 83
- 8 7876608 22900736 dff8751a-08 83
-
-The current device can be shown or set via 'mmc dev' command:
-::
-
- => mmc dev
- switch to partitions #0, OK
- mmc0(part0) is current device
- => mmc dev 2 0
- switch to partitions #0, OK
- mmc2 is current device
- => mmc dev 0 1 4
- switch to partitions #1, OK
- mmc0(part 1) is current device
-
-The list of available devices can be shown via 'mmc list' command:
-::
-
- => mmc list
- mmc list
- EXYNOS DWMMC: 0 (eMMC)
- EXYNOS DWMMC: 2 (SD)
-
-Configuration
--------------
-
-The mmc command is only available if CONFIG_CMD_MMC=y.
-Some commands need to enable more configuration.
-
-write, erase
- CONFIG_MMC_WRITE
-bootbus, bootpart-resize, partconf, rst-function
- CONFIG_SUPPORT_EMMC_BOOT=y
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-pinmux command
-==============
-
-Synopsis
---------
-
-::
-
- pinmux list
- pinmux dev [pincontroller-name]
- pinmux status [-a | pin-name]
-
-Description
------------
-
-The pinmux command is used to show the pin-controller muxing.
-
-The 'pinmux list' command diplays the available pin-controller.
-
-The 'pinmux dev' command selects the pin-controller for next commands.
-
- pincontroller-name
- name of the pin-controller to select
-
-The 'pinmux status' command displays the pin muxing information.
-
- \-a
- display pin muxing of all pin-controllers.
- pin-name
- name of the pin to display
-
-Example
--------
-
-::
-
- => pinmux list
- | Device | Driver | Parent
- | pinctrl-gpio | sandbox_pinctrl_gpio | root_driver
- | pinctrl | sandbox_pinctrl | root_driver
- =>
- => pinmux dev pinctrl
- dev: pinctrl
- =>
- => pinmux status
- P0 : UART TX.
- P1 : UART RX.
- P2 : I2S SCK.
- P3 : I2S SD.
- P4 : I2S WS.
- P5 : GPIO0 bias-pull-up input-disable.
- P6 : GPIO1 drive-open-drain.
- P7 : GPIO2 bias-pull-down input-enable.
- P8 : GPIO3 bias-disable.
- =>
- => pinmux status P0
- P0 : UART TX.
- =>
- => pinmux status -a
- --------------------------
- pinctrl-gpio:
- a0 : gpio input .
- a1 : gpio input .
- a2 : gpio input .
- a3 : gpio input .
- a4 : gpio input .
- a5 : gpio output .
- a6 : gpio output .
- a7 : gpio input .
- a8 : gpio input .
- a9 : gpio input .
- --------------------------
- pinctrl:
- P0 : UART TX.
- P1 : UART RX.
- P2 : I2S SCK.
- P3 : I2S SD.
- P4 : I2S WS.
- P5 : GPIO0 bias-pull-up input-disable.
- P6 : GPIO1 drive-open-drain.
- P7 : GPIO2 bias-pull-down input-enable.
- P8 : GPIO3 bias-disable.
-
-Configuration
--------------
-
-The pinmux command is only available if CONFIG_CMD_PINMUX=y.
-
-Return value
-------------
-
-The return value $? is set to 0 (true) if the command succeded and to 1 (false)
-otherwise.
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-pstore command
-==============
-
-Synopsis
---------
-
-::
-
- pstore set <addr> <len> [record-size] [console-size] [ftrace-size] [pmsg_size] [ecc-size]
- pstore display [record-type] [nb]
- pstore save <interface> <dev[:part]> <directory-path>
-
-Design
-------
-
-Linux PStore and Ramoops modules (Linux config options PSTORE and PSTORE_RAM)
-allow to use memory to pass data from the dying breath of a crashing kernel to
-its successor. This command allows to read those records from U-Boot command
-line.
-
-Ramoops is an oops/panic logger that writes its logs to RAM before the system
-crashes. It works by logging oopses and panics in a circular buffer. Ramoops
-needs a system with persistent RAM so that the content of that area can survive
-after a restart.
-
-Ramoops uses a predefined memory area to store the dump.
-
-Ramoops parameters can be passed as kernel parameters or through Device Tree,
-i.e.::
-
- ramoops.mem_address=0x30000000 ramoops.mem_size=0x100000 ramoops.record_size=0x2000 ramoops.console_size=0x2000 memmap=0x100000$0x30000000
-
-The same values should be set in U-Boot to be able to retrieve the records.
-This values can be set at build time in U-Boot configuration file, or at runtime.
-U-Boot automatically patches the Device Tree to pass the Ramoops parameters to
-the kernel.
-
-The PStore configuration parameters are:
-
-======================= ==========
- Name Default
-======================= ==========
-CMD_PSTORE_MEM_ADDR
-CMD_PSTORE_MEM_SIZE 0x10000
-CMD_PSTORE_RECORD_SIZE 0x1000
-CMD_PSTORE_CONSOLE_SIZE 0x1000
-CMD_PSTORE_FTRACE_SIZE 0x1000
-CMD_PSTORE_PMSG_SIZE 0x1000
-CMD_PSTORE_ECC_SIZE 0
-======================= ==========
-
-Records sizes should be a power of 2.
-The memory size and the record/console size must be non-zero.
-
-Multiple 'dump' records can be stored in the memory reserved for PStore.
-The memory size has to be larger than the sum of the record sizes, i.e.::
-
- MEM_SIZE >= RECORD_SIZE * n + CONSOLE_SIZE + FTRACE_SIZE + PMSG_SIZE
-
-Usage
------
-
-Generate kernel crash
-~~~~~~~~~~~~~~~~~~~~~
-
-For test purpose, you can generate a kernel crash by setting reboot timeout to
-10 seconds and trigger a panic
-
-.. code-block:: console
-
- $ sudo sh -c "echo 1 > /proc/sys/kernel/sysrq"
- $ sudo sh -c "echo 10 > /proc/sys/kernel/panic"
- $ sudo sh -c "echo c > /proc/sysrq-trigger"
-
-Retrieve logs in U-Boot
-~~~~~~~~~~~~~~~~~~~~~~~
-
-First of all, unless PStore parameters as been set during U-Boot configuration
-and match kernel ramoops parameters, it needs to be set using 'pstore set', e.g.::
-
- => pstore set 0x30000000 0x100000 0x2000 0x2000
-
-Then all available dumps can be displayed
-using::
-
- => pstore display
-
-Or saved to an existing directory in an Ext2 or Ext4 partition, e.g. on root
-directory of 1st partition of the 2nd MMC::
-
- => pstore save mmc 1:1 /
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-qfw command
-===========
-
-Synopsis
---------
-
-::
-
- qfw list
- qfw cpus
- qfw load [kernel_addr [initrd_addr]]
-
-Description
------------
-
-The *qfw* command is used to retrieve information form the QEMU firmware.
-
-The *qfw list* sub-command displays the QEMU firmware files.
-
-The *qfw cpus* sub-command displays the available CPUs.
-
-The *qfw load* command is used to load a kernel and an initial RAM disk.
-
-kernel_addr
- address to which the file specified by the -kernel parameter of QEMU shall
- be loaded. Defaults to environment variable *loadaddr* and further to
- the value of *CONFIG_SYS_LOAD_ADDR*.
-
-initrd_addr
- address to which the file specified by the -initrd parameter of QEMU shall
- be loaded. Defaults to environment variable *ramdiskaddr* and further to
- the value of *CONFIG_RAMDISK_ADDR*.
-
-Examples
---------
-
-QEMU firmware files are listed via the *qfw list* command:
-
-::
-
- => qfw list
- etc/boot-fail-wait
- etc/smbios/smbios-tables
- etc/smbios/smbios-anchor
- etc/e820
- genroms/kvmvapic.bin
- genroms/linuxboot.bin
- etc/system-states
- etc/acpi/tables
- etc/table-loader
- etc/tpm/log
- etc/acpi/rsdp
- bootorder
-
-The available CPUs can be shown via the *qfw cpus* command:
-
-::
-
- => qfw cpu
- 2 cpu(s) online
-
-The *-kernel* and *-initrd* parameters allow to specify a kernel and an
-initial RAM disk for QEMU:
-
-.. code-block:: bash
-
- $ qemu-system-x86_64 -machine pc-i440fx-2.5 -bios u-boot.rom -m 1G \
- -nographic -kernel vmlinuz -initrd initrd
-
-Now the kernel and the initial RAM disk can be loaded to the U-Boot memory via
-the *qfw load* command and booted thereafter.
-
-::
-
- => qfw load ${kernel_addr_r} ${ramdisk_addr_r}
- loading kernel to address 0000000001000000 size 5048f0 initrd 0000000004000000 size 3c94891
- => zboot 1000000 5048f0 4000000 3c94891
- Valid Boot Flag
- Magic signature found
- Linux kernel version 4.19.0-14-amd64 (debian-kernel@lists.debian.org) #1 SMP Debian 4.19.171-2 (2021-01-30)
- Building boot_params at 0x00090000
- Loading bzImage at address 100000 (5260160 bytes)
-
-Configuration
--------------
-
-The qfw command is only available if CONFIG_CMD_QFW=y.
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-reset command
-=============
-
-Synopsis
---------
-
-::
-
- reset [-w]
-
-Description
------------
-
-Perform reset of the CPU. By default does COLD reset, which resets CPU,
-DDR and peripherals, on some boards also resets external PMIC.
-
--w
- Do warm WARM, reset CPU but keep peripheral/DDR/PMIC active.
-
-
-Return value
-------------
-
-The return value $? is always set to 0 (true).
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-sbi command
-===========
-
-Synopsis
---------
-
-::
-
- sbi
-
-Description
------------
-
-The sbi command is used to display information about the SBI (Supervisor Binary
-Interface) implementation on RISC-V systems.
-
-The output may look like:
-
-::
-
- => sbi
- SBI 0.2
- OpenSBI
- Extensions:
- sbi_set_timer
- sbi_console_putchar
- sbi_console_getchar
- sbi_clear_ipi
- sbi_send_ipi
- sbi_remote_fence_i
- sbi_remote_sfence_vma
- sbi_remote_sfence_vma_asid
- sbi_shutdown
- SBI Base Functionality
- Timer Extension
- IPI Extension
- RFENCE Extension
- Hart State Management Extension
-
-The first line indicates the version of the RISC-V SBI specification.
-The second line indicates the implementation.
-The further lines enumerate the implemented extensions.
-
-Configuration
--------------
-
-To use the sbi command you must specify CONFIG_CMD_SBI=y.
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-scp03 command
-=============
-
-Synopsis
---------
-
-::
-
- scp03 enable
- scp03 provision
-
-Description
------------
-
-The *scp03* command calls into a Trusted Application executing in a
-Trusted Execution Environment to enable (if present) the Secure
-Channel Protocol 03 stablished between the processor and the secure
-element.
-
-This protocol encrypts all the communication between the processor and
-the secure element using a set of pre-defined keys. These keys can be
-rotated (provisioned) using the *provision* request.
-
-See also
---------
-
-For some information on the internals implemented in the TEE, please
-check the GlobalPlatform documentation on `Secure Channel Protocol '03'`_
-
-.. _Secure Channel Protocol '03':
- https://globalplatform.org/wp-content/uploads/2014/07/GPC_2.3_D_SCP03_v1.1.2_PublicRelease.pdf
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-setexpr command
-===============
-
-Synopsis
---------
-
-::
-
- setexpr[.b, .w, .l .s] <name> [*]<value> <op> [*]<value2>
- setexpr[.b, .w, .l] <name> [*]<value>
- setexpr <name> fmt <format> [value]...
- setexpr <name> gsub r s [t]
- setexpr <name> sub r s [t]
-
-Description
------------
-
-The setexpr command is used to set an environment variable to the result
-of an evaluation.
-
-setexpr[.b, .w, .l .s] <name> [*]<value> <op> [*]<value2>
- Set environment variable <name> to the result of the evaluated
- expression specified by <op>.
-
-setexpr[.b, .w, .l] name [*]value
- Load <value> into environment variable <name>
-
-setexpr name fmt <format> value
- Set environment variable <name> to the result of the C like
- format string <format> evaluation of <value>.
-
-setexpr name gsub <r> <s> [<t>]
- For each substring matching the regular expression <r> in the
- string <t>, substitute the string <s>.
- The result is assigned to <name>.
- If <t> is not supplied, use the old value of <name>.
-
-setexpr name sub <r> <s> [<t>]
- Just like gsub(), but replace only the first matching substring
-
-The setexpr command takes the following arguments:
-
-format
- This parameter contains a C or Bash like format string.
- The number of arguments is limited to 4.
- The following format types are supported:
-
- c
- single character
- d, i
- decimal value
- o
- octal value
- s
- string
- u
- unsigned decimal value
- x, X
- hexadecimal value
- '%'
- no conversion, instead a % character will be written
-
- Backslash escapes:
-
- \" = double quote
- \\ = backslash
- \a = alert (bell)
- \b = backspace
- \c = produce no further output
- \f = form feed
- \n = new line
- \r = carriage return
- \t = horizontal tab
- \v = vertical tab
- \NNN = octal number (NNN is 0 to 3 digits)
-
-name
- The name of the environment variable to be set
-
-op
- '|'
- name = value | value2
- '&'
- name = value & value2
- '+'
- name = value + value2
- (This is the only operator supported for strings.
- It acts as concatenation operator on strings)
- '^'
- name = value ^ value2
- '-'
- name = value - value2
- '*'
- name = value * value2
- '/'
- name = value / value2
- '%'
- name = value % value2
-
-r
- Regular expression
-
-s
- Substitution string
-
-t
- string
-
-value
- Can either be an integer value, a string.
- If the pointer prefix '*' is given value is treated as memory address.
-
-value2
- See value
-
-Example
--------
-
-::
-
- => setexpr foo fmt %d 0x100
- => echo $foo
- 256
- =>
-
- => setexpr foo fmt 0x%08x 63
- => echo $foo
- 0x00000063
- =>
-
- => setexpr foo fmt %%%o 8
- => echo $foo
- %10
- =>
-
-Configuration
--------------
-
-The setexpr gsub and sub operations are only available if CONFIG_REGEX=y.
-
-Return value
-------------
-
-The return value $? is set to 0 (true) if the operation was successful.
-
-If an error occurs, the return value $? is set to 1 (false).
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-sf command
-==========
-
-Synopis
--------
-
-::
-
- sf probe [[[<bus>:]<cs>] [<hz> [<mode>]]]
- sf read <addr> <offset>|<partition> <len>
- sf write <addr> <offset>|<partition> <len>
- sf erase <offset>|<partition> <len>
- sf update <addr> <offset>|<partition> <len>
- sf protect lock|unlock <sector> <len>
- sf test <offset>|<partition> <len>
-
-Description
------------
-
-The *sf* command is used to access SPI flash, supporting read/write/erase and
-a few other functions.
-
-Probe
------
-
-The flash must first be probed with *sf probe* before any of the other
-subcommands can be used. All of the parameters are optional:
-
-bus
- SPI bus number containing the SPI-flash chip, e.g. 0. If you don't know
- the number, you can use 'dm uclass' to see all the spi devices,
- and check the value for 'seq' for each one (here 0 and 2)::
-
- uclass 89: spi
- 0 spi@0 @ 05484960, seq 0
- 1 spi@1 @ 05484b40, seq 2
-
-cs
- SPI chip-select to use for the chip. This is often 0 and can be omitted,
- but in some cases multiple slaves are attached to a SPI controller,
- selected by a chip-select line for each one.
-
-hz
- Speed of the SPI bus in hertz. This normally defaults to 100000, i.e.
- 100KHz, which is very slow. Note that if the device exists in the
- device tree, there might be a speed provided there, in which case this
- setting is ignored.
-
-mode
- SPI mode to use:
-
- ===== ================
- Mode Meaning
- ===== ================
- 0 CPOL=0, CPHA=0
- 1 CPOL=0, CPHA=1
- 2 CPOL=1, CPHA=0
- 3 CPOL=1, CPHA=1
- ===== ================
-
- Clock phase (CPHA) 0 means that data is transferred (sampled) on the
- first clock edge; 1 means the second.
-
- Clock polarity (CPOL) controls the idle state of the clock, 0 for low,
- 1 for high.
- The active state is the opposite of idle.
-
- You may find this `SPI documentation`_ useful.
-
-Parameters for other subcommands (described below) are as follows:
-
-addr
- Memory address to start transfer
-
-offset
- Flash offset to start transfer
-
-partition
- If the parameter is not numeric, it is assumed to be a partition
- description in the format <dev_type><dev_num>,<part_num> which is not
- covered here. This requires CONFIG_CMD_MTDPARTS.
-
-len
- Number of bytes to transfer
-
-Read
-~~~~
-
-Use *sf read* to read from SPI flash to memory. The read will fail if an
-attempt is made to read past the end of the flash.
-
-
-Write
-~~~~~
-
-Use *sf write* to write from memory to SPI flash. The SPI flash should be
-erased first, since otherwise the result is undefined.
-
-The write will fail if an attempt is made to read past the end of the flash.
-
-
-Erase
-~~~~~
-
-Use *sf erase* to erase a region of SPI flash. The erase will fail if any part
-of the region to be erased is protected or lies past the end of the flash. It
-may also fail if the start offset or length are not aligned to an erase region
-(e.g. 256 bytes).
-
-
-Update
-~~~~~~
-
-Use *sf update* to automatically erase and update a region of SPI flash from
-memory. This works a sector at a time (typical 4KB or 64KB). For each
-sector it first checks if the sector already has the right data. If so it is
-skipped. If not, the sector is erased and the new data written. Note that if
-the length is not a multiple of the erase size, the space after the data in
-the last sector will be erased. If the offset does not start at the beginning
-of an erase block, the operation will fail.
-
-Speed statistics are shown including the number of bytes that were already
-correct.
-
-
-Protect
-~~~~~~~
-
-SPI-flash chips often have a protection feature where the chip is split up into
-regions which can be locked or unlocked. With *sf protect* it is possible to
-change these settings, if supported by the driver.
-
-lock|unlock
- Selects whether to lock or unlock the sectors
-
-<sector>
- Start sector number to lock/unlock. This may be the byte offset or some
- other value, depending on the chip.
-
-<len>
- Number of bytes to lock/unlock
-
-
-Test
-~~~~
-
-A convenient and fast *sf test* subcommand provides a way to check that SPI
-flash is working as expected. This works in four stages:
-
- * erase - erases the entire region
- * check - checks that the region is erased
- * write - writes a test pattern to the region, consisting of the U-Boot code
- * read - reads back the test pattern to check that it was written correctly
-
-Memory is allocated for two buffers, each <len> bytes in size. At typical
-size is 64KB to 1MB. The offset and size must be aligned to an erase boundary.
-
-Note that this test will fail if any part of the SPI flash is write-protected.
-
-
-Examples
---------
-
-This first example uses sandbox::
-
- => sf probe
- SF: Detected m25p16 with page size 256 Bytes, erase size 64 KiB, total 2 MiB
- => sf read 1000 1100 80000
- device 0 offset 0x1100, size 0x80000
- SF: 524288 bytes @ 0x1100 Read: OK
- => md 1000
- 00001000: edfe0dd0 f33a0000 78000000 84250000 ......:....x..%.
- 00001010: 28000000 11000000 10000000 00000000 ...(............
- 00001020: 6f050000 0c250000 00000000 00000000 ...o..%.........
- 00001030: 00000000 00000000 00000000 00000000 ................
- 00001040: 00000000 00000000 00000000 00000000 ................
- 00001050: 00000000 00000000 00000000 00000000 ................
- 00001060: 00000000 00000000 00000000 00000000 ................
- 00001070: 00000000 00000000 01000000 00000000 ................
- 00001080: 03000000 04000000 00000000 01000000 ................
- 00001090: 03000000 04000000 0f000000 01000000 ................
- 000010a0: 03000000 08000000 1b000000 646e6173 ............sand
- 000010b0: 00786f62 03000000 08000000 21000000 box............!
- 000010c0: 646e6173 00786f62 01000000 61696c61 sandbox.....alia
- 000010d0: 00736573 03000000 07000000 2c000000 ses............,
- 000010e0: 6332692f 00003040 03000000 07000000 /i2c@0..........
- 000010f0: 31000000 6963702f 00003040 03000000 ...1/pci@0......
- => sf erase 0 80000
- SF: 524288 bytes @ 0x0 Erased: OK
- => sf read 1000 1100 80000
- device 0 offset 0x1100, size 0x80000
- SF: 524288 bytes @ 0x1100 Read: OK
- => md 1000
- 00001000: ffffffff ffffffff ffffffff ffffffff ................
- 00001010: ffffffff ffffffff ffffffff ffffffff ................
- 00001020: ffffffff ffffffff ffffffff ffffffff ................
- 00001030: ffffffff ffffffff ffffffff ffffffff ................
- 00001040: ffffffff ffffffff ffffffff ffffffff ................
- 00001050: ffffffff ffffffff ffffffff ffffffff ................
- 00001060: ffffffff ffffffff ffffffff ffffffff ................
- 00001070: ffffffff ffffffff ffffffff ffffffff ................
- 00001080: ffffffff ffffffff ffffffff ffffffff ................
- 00001090: ffffffff ffffffff ffffffff ffffffff ................
- 000010a0: ffffffff ffffffff ffffffff ffffffff ................
- 000010b0: ffffffff ffffffff ffffffff ffffffff ................
- 000010c0: ffffffff ffffffff ffffffff ffffffff ................
- 000010d0: ffffffff ffffffff ffffffff ffffffff ................
- 000010e0: ffffffff ffffffff ffffffff ffffffff ................
- 000010f0: ffffffff ffffffff ffffffff ffffffff ................
-
-This second example is running on coral, an x86 Chromebook::
-
- => sf probe
- SF: Detected w25q128fw with page size 256 Bytes, erase size 4 KiB, total 16 MiB
- => sf erase 300000 80000
- SF: 524288 bytes @ 0x300000 Erased: OK
- => sf update 1110000 300000 80000
- device 0 offset 0x300000, size 0x80000
- 524288 bytes written, 0 bytes skipped in 0.457s, speed 1164578 B/s
-
- # This does nothing as the flash is already updated
- => sf update 1110000 300000 80000
- device 0 offset 0x300000, size 0x80000
- 0 bytes written, 524288 bytes skipped in 0.196s, speed 2684354 B/s
- => sf test 00000 80000 # try a protected region
- SPI flash test:
- Erase failed (err = -5)
- Test failed
- => sf test 800000 80000
- SPI flash test:
- 0 erase: 18 ticks, 28444 KiB/s 227.552 Mbps
- 1 check: 192 ticks, 2666 KiB/s 21.328 Mbps
- 2 write: 227 ticks, 2255 KiB/s 18.040 Mbps
- 3 read: 189 ticks, 2708 KiB/s 21.664 Mbps
- Test passed
- 0 erase: 18 ticks, 28444 KiB/s 227.552 Mbps
- 1 check: 192 ticks, 2666 KiB/s 21.328 Mbps
- 2 write: 227 ticks, 2255 KiB/s 18.040 Mbps
- 3 read: 189 ticks, 2708 KiB/s 21.664 Mbps
-
-
-.. _SPI documentation:
- https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-size command
-============
-
-Synopsis
---------
-
-::
-
- size <interface> <dev[:part]> <filename>
-
-Description
------------
-
-The size command determines the size of a file and sets the environment variable
-filesize to this value. If filename points to a directory, the value is set to
-zero.
-
-If the command fails, the filesize environment variable is not changed.
-
-dev
- device number
-
-part
- partition number, defaults to 1
-
-filename
- path to file
-
-Configuration
--------------
-
-The size command is only available if CONFIG_CMD_FS_GENERIC=y.
-
-Return value
-------------
-
-The return value $? is set to 0 (true) if the command succeded and to 1 (false)
-otherwise.
+++ /dev/null
-true command
-============
-
-Synopsis
---------
-
-::
-
- true
-
-Description
------------
-
-The true command sets the return value $? to 0 (true).
-
-Example
--------
-
-::
-
- => true; echo $?
- 0
- =>
-
-Configuration
--------------
-
-The true command is only available if CONFIG_HUSH_PARSER=y.
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-ums command
-===========
-
-Synopsis
---------
-
-::
-
- ums <dev> [<interface>] <devnum[:partnum]>
-
-Description
------------
-
-Use the USB Mass Storage class (also known as UMS) to make accessible an U-Boot
-block device (fully or with :ref:`U-Boot's partition syntax <partitions>`)
-to a USB host and to enable file transfers. U-Boot, the USB device, acts as a
-simple external hard drive plugged on the host USB port.
-
-This command "ums" stays in the USB's treatment loop until user enters Ctrl-C.
-
-dev
- USB gadget device number
-
-interface
- interface for accessing the block device (mmc, sata, scsi, usb, ....)
- defaults is "mmc"
-
-devnum
- device number for selected interface
-
-partnum
- partition number or 0 to expose all partitions, defaults to 0
-
-Example
--------
-
-::
-
- => ums 0 mmc 0
- => ums 0 usb 1:2
-
-Configuration
--------------
-
-The ums command is only available if CONFIG_CMD_USB_MASS_STORAGE=y
-and depends on CONFIG_USB_USB_GADGET and CONFIG_BLK.
-
-Return value
-------------
-
-The return value $? is set to 0 (true) when the USB stack was successfully
-started and interrupted, with Ctrl-C or after USB cable issue (detection
-timeout or cable removal).
-
-If an error occurs, the return value $? is set to 1 (false).
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+:
-
-wdt command
-============
-
-Synopsis
---------
-
-::
-
- wdt list
- wdt dev [<name>]
- wdt start <timeout_ms> [flags]
- wdt stop
- wdt reset
- wdt expirer [flags]
-
-Description
------------
-
-The wdt command is used to control watchdog timers.
-
-The 'wdt list' command shows a list of all watchdog devices.
-
-The 'wdt dev' command called without argument shows the current watchdog device.
-The current device is set when passing the name of the device as argument.
-
-The 'wdt start' command starts the current watchdog timer.
-
-The 'wdt stop' command stops the current watchdog timer.
-
-The 'wdt reset' command resets the current watchdog timer without stopping it.
-
-The 'wdt expire' command let's the current watchdog timer expire immediately.
-This will lead to a reset.
-
-name
- name of the watchdog device
-
-timeout_ms
- timeout interval in milliseconds
-
-flags
- unsigned long value passed to the driver. The usage is driver specific.
- The value is ignored by most drivers.
-
-Example
--------
-
-::
-
- => wdt dev
- No watchdog timer device set!
- => wdt list
- watchdog@1c20ca0 (sunxi_wdt)
- => wdt dev watchdog@1c20ca0
- => wdt dev
- dev: watchdog@1c20ca0
- => wdt start 3000
- => wdt reset
- => wdt stop
- => wdt expire
-
- U-Boot SPL 2022.04-rc3 (Mar 25 2022 - 13:48:33 +0000)
-
- In the example above '(sunxi_wdt)' refers to the driver for the watchdog
- device.
-
-Configuration
--------------
-
-The command is only available if CONFIG_CMD_WDT=y.
-
-Return value
-------------
-
-The return value $? is 0 if the command succeeds, 1 upon failure.
+++ /dev/null
-.. SPDX-License-Identifier: GPL-2.0+
-
-cbsysinfo
-=========
-
-Synopis
--------
-
-::
-
- cbsysinfo
-
-
-Description
------------
-
-This displays information obtained from the coreboot sysinfo table. It is only
-useful when booting U-Boot from coreboot.
-
-Example
--------
-
-::
-
- => cbsysinfo