diff options
Diffstat (limited to 'doc')
73 files changed, 5985 insertions, 1765 deletions
diff --git a/doc/README.bootcount b/doc/README.bootcount deleted file mode 100644 index f6c5f82f985..00000000000 --- a/doc/README.bootcount +++ /dev/null @@ -1,53 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0+ - -Boot Count Limit -================ - -This is enabled by CONFIG_BOOTCOUNT_LIMIT. - -This allows to detect multiple failed attempts to boot Linux. - -After a power-on reset, the "bootcount" variable will be initialized to 1, and -each reboot will increment the value by 1. - -If, after a reboot, the new value of "bootcount" exceeds the value of -"bootlimit", then instead of the standard boot action (executing the contents of -"bootcmd"), an alternate boot action will be performed, and the contents of -"altbootcmd" will be executed. - -If the variable "bootlimit" is not defined in the environment, the Boot Count -Limit feature is disabled. If it is enabled, but "altbootcmd" is not defined, -then U-Boot will drop into interactive mode and remain there. - -It is the responsibility of some application code (typically a Linux -application) to reset the variable "bootcount" to 0 when the system booted -successfully, thus allowing for more boot cycles. - -CONFIG_BOOTCOUNT_EXT --------------------- - -This adds support for maintaining boot count in a file on an EXT filesystem. -The file to use is defined by: - -CONFIG_SYS_BOOTCOUNT_EXT_INTERFACE -CONFIG_SYS_BOOTCOUNT_EXT_DEVPART -CONFIG_SYS_BOOTCOUNT_EXT_NAME - -The format of the file is: - -==== ================= -type entry -==== ================= -u8 magic -u8 version -u8 bootcount -u8 upgrade_available -==== ================= - -To prevent unattended usage of "altbootcmd", the "upgrade_available" variable is -used. -If "upgrade_available" is 0, "bootcount" is not saved. -If "upgrade_available" is 1, "bootcount" is saved. -So a userspace application should take care of setting the "upgrade_available" -and "bootcount" variables to 0, if the system boots successfully. -This also avoids writing the "bootcount" information on all reboots. diff --git a/doc/api/bootcount.rst b/doc/api/bootcount.rst new file mode 100644 index 00000000000..968c679c3c6 --- /dev/null +++ b/doc/api/bootcount.rst @@ -0,0 +1,58 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +Boot Count Limit +================ + +This is enabled by CONFIG_BOOTCOUNT_LIMIT. + +This allows to detect multiple failed attempts to boot Linux. + +After a power-on reset, the ``bootcount`` variable will be initialized to 1, and +each reboot will increment the value by 1. + +If, after a reboot, the new value of ``bootcount`` exceeds the value of +``bootlimit``, then instead of the standard boot action (executing the contents +of ``bootcmd``), an alternate boot action will be performed, and the contents of +``altbootcmd`` will be executed. + +If the variable ``bootlimit`` is not defined in the environment, the Boot Count +Limit feature is disabled. If it is enabled, but ``altbootcmd`` is not defined, +then U-Boot will drop into interactive mode and remain there. + +It is the responsibility of some application code (typically a Linux +application) to reset the variable ``bootcount`` to 0 when the system booted +successfully, thus allowing for more boot cycles. + +CONFIG_BOOTCOUNT_FS +-------------------- + +This adds support for maintaining boot count in a file on a filesystem. +Tested filesystems are FAT and EXT. The file to use is defined by: + +CONFIG_SYS_BOOTCOUNT_FS_INTERFACE +CONFIG_SYS_BOOTCOUNT_FS_DEVPART +CONFIG_SYS_BOOTCOUNT_FS_NAME + +The format of the file is: + +.. list-table:: + :header-rows: 1 + + * - type + - entry + * - u8 + - magic + * - u8 + - version + * - u8 + - bootcount + * - u8 + - upgrade_available + +To prevent unintended usage of ``altbootcmd``, the ``upgrade_available`` +variable is used. +If ``upgrade_available`` is 0, ``bootcount`` is not saved. +If ``upgrade_available`` is 1, ``bootcount`` is saved. +So a userspace application should take care of setting the ``upgrade_available`` +and ``bootcount`` variables to 0, if the system boots successfully. +This also avoids writing the ``bootcount`` information on all reboots. diff --git a/doc/api/index.rst b/doc/api/index.rst index 51b2013af36..ec0b8adb2cf 100644 --- a/doc/api/index.rst +++ b/doc/api/index.rst @@ -6,6 +6,7 @@ U-Boot API documentation .. toctree:: :maxdepth: 2 + bootcount clk dfu dm diff --git a/doc/arch/arm64.rst b/doc/arch/arm64.rst index 7c0713504c4..19662be6fc6 100644 --- a/doc/arch/arm64.rst +++ b/doc/arch/arm64.rst @@ -48,6 +48,55 @@ Notes 6. CONFIG_ARM64 instead of CONFIG_ARMV8 is used to distinguish aarch64 and aarch32 specific codes. +MMU +--- + +U-Boot uses a simple page table for MMU setup. It uses the smallest number of bits +possible for the virtual address based on the maximum memory address (see the logic +in ``get_tcr()``). If this is less than 39 bits, the MMU will use only 3 levels for +address translation. + +As with all platforms, U-Boot on ARM64 uses a 1:1 mapping of virtual to physical addresses. +In general, the memory map is expected to remain static once the MMU is enabled. + +Software pagetable walker +^^^^^^^^^^^^^^^^^^^^^^^^^ + +It is possible to debug the pagetable generated by U-Boot with the built in +``dump_pagetable()`` and ``walk_pagetable()`` functions (the former being a simple +wrapper for the latter). For example the following can be added to ``setup_all_pgtables()`` +after the first call to ``setup_pgtables()``: + +.. code-block:: c + + dump_pagetable(gd->arch.tlb_addr, get_tcr(NULL, NULL)); + +.. kernel-doc:: arch/arm/cpu/armv8/cache_v8.c + :identifiers: __pagetable_walk pagetable_print_entry + +The pagetable walker can be used as follows: + +.. kernel-doc:: arch/arm/include/asm/armv8/mmu.h + :identifiers: pte_walker_cb_t walk_pagetable dump_pagetable + +This will result in a print like the following: + +.. code-block:: text + + Walking pagetable at 000000017df90000, va_bits: 36. Using 3 levels + [0x17df91000] | Table | | + [0x17df92000] | Table | | + [0x000001000 - 0x000200000] | Pages | Device-nGnRnE | Non-shareable + [0x000200000 - 0x040000000] | Block | Device-nGnRnE | Non-shareable + [0x040000000 - 0x080000000] | Block | Device-nGnRnE | Non-shareable + [0x080000000 - 0x140000000] | Block | Normal | Inner-shareable + [0x17df93000] | Table | | + [0x140000000 - 0x17de00000] | Block | Normal | Inner-shareable + [0x17df94000] | Table | | + [0x17de00000 - 0x17dfa0000] | Pages | Normal | Inner-shareable + +For more information, please refer to the additional function documentation in +``arch/arm/include/asm/armv8/mmu.h``. Contributors ------------ diff --git a/doc/board/asus/index.rst b/doc/board/asus/index.rst index 87e535fe34f..2b103287905 100644 --- a/doc/board/asus/index.rst +++ b/doc/board/asus/index.rst @@ -7,4 +7,5 @@ ASUS :maxdepth: 2 grouper_common + transformer_t20 transformer_t30 diff --git a/doc/board/asus/transformer_t20.rst b/doc/board/asus/transformer_t20.rst new file mode 100644 index 00000000000..d4bc12d1619 --- /dev/null +++ b/doc/board/asus/transformer_t20.rst @@ -0,0 +1,129 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +U-Boot for the ASUS Eee Pad Transformer device family +===================================================== + +``DISCLAMER!`` Moving your ASUS Eee Pad Transformer/Slider to use U-Boot +assumes replacement of the vendor ASUS bootloader. Vendor Android firmwares +will no longer be able to run on the device. This replacement IS reversible. + +Quick Start +----------- + +- Build U-Boot +- Process U-Boot +- Flashing U-Boot into the eMMC +- Boot +- Self Upgrading + +Build U-Boot +------------ + +Device support is implemented by applying config fragment to a generic board +defconfig. Valid fragments are ``tf101.config``, ``tf101g.config`` and +``sl101.config``. + +.. code-block:: bash + + $ export CROSS_COMPILE=arm-linux-gnueabi- + $ make transformer_t20_defconfig tf101.config # For TF101 + $ make + +After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` +image, ready for further processing. + +Process U-Boot +-------------- + +``DISCLAMER!`` All questions related to the re-crypt work should be asked +in re-crypt repo issues. NOT HERE! + +re-crypt is a tool that processes the ``u-boot-dtb-tegra.bin`` binary into form +usable by device. This process is required only on the first installation or +to recover the device in case of a failed update. + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Processing for the NV3P protocol +******************************** + +.. code-block:: bash + + $ git clone https://gitlab.com/grate-driver/re-crypt.git + $ cd re-crypt # place your u-boot-dtb-tegra.bin here + $ ./re-crypt.py --dev tf101 + +The script will produce a ``repart-block.bin`` ready to flash. + +Processing for pre-loaded U-Boot +******************************** + +The procedure is the same, but the ``--split`` argument is used with the +``re-crypt.py``. The script will produce ``bct.img`` and ``ebt.img`` ready +to flash. + +Flashing U-Boot into the eMMC +----------------------------- + +``DISCLAMER!`` All questions related to NvFlash should be asked in the proper +place. NOT HERE! Flashing U-Boot will erase all eMMC, so make a backup before! + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Flashing with the NV3P protocol +******************************* + +Nv3p is a custom Nvidia protocol used to recover bricked devices. Devices can +enter it either by using ``wheelie`` with the correct ``blob.bin`` file or by +pre-loading vendor bootloader with the Fusée Gelée. + +With nv3p, ``repart-block.bin`` is used. It contains BCT and a bootloader in +encrypted state in form, which can just be written RAW at the start of eMMC. + +.. code-block:: bash + + $ wheelie --blob blob.bin + $ nvflash --resume --rawdevicewrite 0 1024 repart-block.bin + +When flashing is done, reboot the device. + +Flashing with a pre-loaded U-Boot +********************************* + +U-Boot pre-loaded into RAM acts the same as when it was booted "cold". Currently +U-Boot supports bootmenu entry fastboot, which allows to write a processed copy +of U-Boot permanently into eMMC. + +While pre-loading U-Boot, hold the ``volume down`` button which will trigger +the bootmenu. There, select ``fastboot`` using the volume and power buttons. +After, on host PC, do: + +.. code-block:: bash + + $ fastboot flash 0.1 bct.img + $ fastboot flash 0.2 ebt.img + $ fastboot reboot + +Device will reboot. + +Boot +---- + +To boot Linux, U-Boot will look for an ``extlinux.conf`` on MicroSD and then on +eMMC. Additionally, if the Volume Down button is pressed while booting, the +device will enter bootmenu. Bootmenu contains entries to mount MicroSD and eMMC +as mass storage, fastboot, reboot, reboot RCM, poweroff, enter U-Boot console +and update bootloader (check the next chapter). + +Flashing ``repart-block.bin`` eliminates vendor restrictions on eMMC and allows +the user to use/partition it in any way the user desires. + +Self Upgrading +-------------- + +Place your ``u-boot-dtb-tegra.bin`` on the first partition of the MicroSD card +and insert it into the tablet. Enter bootmenu, choose update the bootloader +option with the Power button and U-Boot should update itself. Once the process +is completed, U-Boot will ask to press any button to reboot. diff --git a/doc/board/beagle/am62x_beagleplay.rst b/doc/board/beagle/am62x_beagleplay.rst index 7784e62b0b7..01f04beb55a 100644 --- a/doc/board/beagle/am62x_beagleplay.rst +++ b/doc/board/beagle/am62x_beagleplay.rst @@ -71,11 +71,10 @@ Set the variables corresponding to this platform: Target Images ------------- -Copy the below images to an SD card and boot: +Copy these images to an SD card and boot: -* tiboot3-am62x-gp-evm.bin from R5 build as tiboot3.bin -* tispl.bin_unsigned from Cortex-A build as tispl.bin -* u-boot.img_unsigned from Cortex-A build as u-boot.img +* tiboot3.bin from Cortex-R5 build. +* tispl.bin and u-boot.img from Cortex-A build Image formats ------------- @@ -268,7 +267,19 @@ for details. - USB Device Firmware Upgrade (DFU) mode To switch to SD card boot mode, hold the USR button while powering on -with Type-C power supply, then release when power LED lights up. +with a USB type C power supply, then release when power LED lights up. + +DFU based boot +-------------- + +To boot the board over DFU, ensure there is no SD card inserted with a +bootloader. Hold the USR switch while plugging into the type C to boot into DFU +mode. After power-on the build artifacts needs to be uploaded one by one with a +tool like dfu-util. + +.. include:: ../ti/am62x_sk.rst + :start-after: .. am62x_evm_rst_include_start_dfu_boot + :end-before: .. am62x_evm_rst_include_end_dfu_boot Debugging U-Boot ---------------- diff --git a/doc/board/emulation/index.rst b/doc/board/emulation/index.rst index d3d6b8f3d86..98a0b26ad24 100644 --- a/doc/board/emulation/index.rst +++ b/doc/board/emulation/index.rst @@ -14,3 +14,4 @@ Emulation qemu-ppce500 qemu-riscv qemu-x86 + qemu-xtensa diff --git a/doc/board/emulation/qemu-xtensa.rst b/doc/board/emulation/qemu-xtensa.rst new file mode 100644 index 00000000000..fff23c1a9b0 --- /dev/null +++ b/doc/board/emulation/qemu-xtensa.rst @@ -0,0 +1,33 @@ +.. SPDX-License-Identifier: GPL-2.0+ +.. Copyright (C) 2024 Jiaxun Yang <jiaxun.yang@flygoat.com> + +QEMU Xtensa +=========== + +QEMU for Xtensa supports a special 'virt' machine designed for emulation and +virtualization purposes. This document describes how to run U-Boot under it. + +The QEMU virt machine models a generic Xtensa virtual machine with PCI Bus +and Xtensa ISS simcall semihosting support. It supports many different Xtensa +CPU configuration. Currently, only dc233c variant is tested against U-Boot. + +Building U-Boot +--------------- +Set the CROSS_COMPILE environment variable as usual, and run: + + make qemu-xtensa-dc233c_defconfig + make + +Note that Xtensa's toolchain is bounded to CPU configuration, you must use +the toolchain built for exactly the same CPU configuration as you selected +in U-Boot. + +Running U-Boot +-------------- +The minimal QEMU command line to get U-Boot up and running is: + + qemu-system-xtensa -nographic -machine virt -cpu dc233c -semihosting -kernel ./u-boot.elf + +You many change cpu option to match your U-Boot CPU type configuration. +semihosting option is mandatory because this is the only way to interact +with U-Boot in command line. diff --git a/doc/board/index.rst b/doc/board/index.rst index 2340eeb0777..417c128c7af 100644 --- a/doc/board/index.rst +++ b/doc/board/index.rst @@ -31,9 +31,11 @@ Board-specific doc htc/index intel/index kontron/index + lenovo/index lg/index mediatek/index microchip/index + microsoft/index nxp/index openpiton/index phytec/index @@ -58,5 +60,6 @@ Board-specific doc ti/index toradex/index variscite/index + wexler/index xen/index xilinx/index diff --git a/doc/board/lenovo/ideapad-yoga-11.rst b/doc/board/lenovo/ideapad-yoga-11.rst new file mode 100644 index 00000000000..94bf171b35f --- /dev/null +++ b/doc/board/lenovo/ideapad-yoga-11.rst @@ -0,0 +1,41 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +U-Boot for the Lenovo Ideapad Yoga 11 tablet +============================================ + +Quick Start +----------- + +- Build U-Boot +- Boot + +Build U-Boot +------------ + +.. code-block:: bash + + $ export CROSS_COMPILE=arm-linux-gnueabi- + $ make ideapad-yoga-11_defconfig + $ make + +After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` +image, ready for loading. + +Boot +---- + +Currently, U-Boot can be preloaded into RAM via the Fusée Gelée. To enter +RCM protocol use ``power`` and ``volume up`` key combination from powered +off device. The host PC should recognize an APX device. + +Built U-Boot ``u-boot-dtb-tegra.bin`` can be loaded from fusee-tools +directory with + +.. code-block:: bash + + $ ./run_bootloader.sh -s T30 -t ./bct/ideapad-yoga-11.bct + +To boot Linux, U-Boot will look for an ``extlinux.conf`` on MicroSD and then on +eMMC. Additionally, if the Volume Down button is pressed while loading, the +device will enter bootmenu. Bootmenu contains entries to mount MicroSD and eMMC +as mass storage, fastboot, reboot, reboot RCM, poweroffand enter U-Boot console. diff --git a/doc/board/lenovo/index.rst b/doc/board/lenovo/index.rst new file mode 100644 index 00000000000..2ce457ab045 --- /dev/null +++ b/doc/board/lenovo/index.rst @@ -0,0 +1,9 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +Lenovo +========= + +.. toctree:: + :maxdepth: 2 + + ideapad-yoga-11 diff --git a/doc/board/microsoft/index.rst b/doc/board/microsoft/index.rst new file mode 100644 index 00000000000..107f3527852 --- /dev/null +++ b/doc/board/microsoft/index.rst @@ -0,0 +1,9 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +Microsoft +========= + +.. toctree:: + :maxdepth: 2 + + surface-rt diff --git a/doc/board/microsoft/surface-rt.rst b/doc/board/microsoft/surface-rt.rst new file mode 100644 index 00000000000..b5645e79340 --- /dev/null +++ b/doc/board/microsoft/surface-rt.rst @@ -0,0 +1,41 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +U-Boot for the Microsoft Surface RT tablet +========================================== + +Quick Start +----------- + +- Build U-Boot +- Boot + +Build U-Boot +------------ + +.. code-block:: bash + + $ export CROSS_COMPILE=arm-linux-gnueabi- + $ make surface-rt_defconfig + $ make + +After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` +image, ready for loading. + +Boot +---- + +Currently, U-Boot can be preloaded into RAM via the Fusée Gelée. To enter +RCM protocol use ``power`` and ``volume up`` key combination from powered +off device. The host PC should recognize an APX device. + +Built U-Boot ``u-boot-dtb-tegra.bin`` can be loaded from fusee-tools +directory with + +.. code-block:: bash + + $ ./run_bootloader.sh -s T30 -t ./bct/surface-rt.bct + +To boot Linux, U-Boot will look for an ``extlinux.conf`` on MicroSD and then on +eMMC. Additionally, if the Volume Down button is pressed while loading, the +device will enter bootmenu. Bootmenu contains entries to mount MicroSD and eMMC +as mass storage, fastboot, reboot, reboot RCM, poweroffand enter U-Boot console. diff --git a/doc/board/phytec/phycore-am62x.rst b/doc/board/phytec/phycore-am62x.rst index 681ac536125..a7ce2c58825 100644 --- a/doc/board/phytec/phycore-am62x.rst +++ b/doc/board/phytec/phycore-am62x.rst @@ -110,14 +110,31 @@ tiboot3.bin, tispl.bin and u-boot.img are stored on the uSD card. .. code-block:: bash - sf probe + mtd list fatload mmc 1 ${loadaddr} tiboot3.bin - sf update $loadaddr 0x0 $filesize + mtd write ospi.tiboot3 ${loadaddr} 0 ${filesize} fatload mmc 1 ${loadaddr} tispl.bin - sf update $loadaddr 0x80000 $filesize + mtd write ospi.tispl ${loadaddr} 0 ${filesize} fatload mmc 1 ${loadaddr} u-boot.img - sf update $loadaddr 0x280000 $filesize + mtd write ospi.u-boot ${loadaddr} 0 ${filesize} +UART based boot +--------------- + +To boot the board via UART, set the switches to UART mode and connect to the +micro USB port labeled as "Debug UART". After power-on the build artifacts +needs to be uploaded one by one with a tool like sz. + +Example bash script sequence for running on a Linux host PC feeding all boot +artifacts needed to the device. Assuming the host uses /dev/ttyUSB0 as +the main domain serial port: + +.. prompt:: bash $ + + stty -F /dev/ttyUSB0 115200 + sb --xmodem tiboot3.bin > /dev/ttyUSB0 < /dev/ttyUSB0 + sb --ymodem tispl.bin > /dev/ttyUSB0 < /dev/ttyUSB0 + sb --ymodem u-boot.img > /dev/ttyUSB0 < /dev/ttyUSB0 Boot Modes ---------- @@ -151,6 +168,10 @@ Boot switches should be changed with power off. - 11011100 - 00000000 + * - USB DFU + - 11001010 + - 00100000 + Further Information ------------------- diff --git a/doc/board/phytec/phycore-am64x.rst b/doc/board/phytec/phycore-am64x.rst index ad9f47d9dfd..68d78ad7c25 100644 --- a/doc/board/phytec/phycore-am64x.rst +++ b/doc/board/phytec/phycore-am64x.rst @@ -111,14 +111,33 @@ tiboot3.bin, tispl.bin and u-boot.img are stored on the uSD card. .. code-block:: bash - sf probe + mtd list fatload mmc 1 ${loadaddr} tiboot3.bin - sf update $loadaddr 0x0 $filesize + mtd write ospi.tiboot3 ${loadaddr} 0 ${filesize} fatload mmc 1 ${loadaddr} tispl.bin - sf update $loadaddr 0x80000 $filesize + mtd write ospi.tispl ${loadaddr} 0 ${filesize} fatload mmc 1 ${loadaddr} u-boot.img - sf update $loadaddr 0x280000 $filesize + mtd write ospi.u-boot ${loadaddr} 0 ${filesize} +UART based boot +--------------- + +To boot the board via UART, set the switches to UART mode and connect to the +micro USB port labeled as "Debug UART". After power-on the build artifacts +needs to be uploaded one by one with a tool like sz. + +Example bash script sequence for running on a Linux host PC feeding all boot +artifacts needed to the device. Assuming the host uses /dev/ttyUSB0 as +the main domain serial port: + +.. prompt:: bash $ + + stty -F /dev/ttyUSB0 115200 + sb --xmodem tiboot3.bin > /dev/ttyUSB0 < /dev/ttyUSB0 + # Resend tiboot3.bin a 2nd time due to ErrataID:i2331 + sb --xmodem tiboot3.bin > /dev/ttyUSB0 < /dev/ttyUSB0 + sb --ymodem tispl.bin > /dev/ttyUSB0 < /dev/ttyUSB0 + sb --ymodem u-boot.img > /dev/ttyUSB0 < /dev/ttyUSB0 Boot Modes ---------- diff --git a/doc/board/rockchip/rockchip.rst b/doc/board/rockchip/rockchip.rst index cfbf641f494..bedc52e03e2 100644 --- a/doc/board/rockchip/rockchip.rst +++ b/doc/board/rockchip/rockchip.rst @@ -72,7 +72,6 @@ List of mainline supported Rockchip boards: - GeekBox (geekbox) - PX5 EVB (evb-px5) - Rockchip Sheep (sheep-rk3368) - - Theobroma Systems RK3368-uQ7 SoM - Lion (lion-rk3368) * rk3399 - 96boards RK3399 Ficus (ficus-rk3399) - 96boards Rock960 (rock960-rk3399) @@ -119,10 +118,13 @@ List of mainline supported Rockchip boards: - Radxa ROCK 3 Model A (rock-3a-rk3568) * rk3588 + - ArmSoM Sige7 (sige7-rk3588) - Rockchip EVB (evb-rk3588) - Edgeble Neural Compute Module 6A SoM - Neu6a (neu6a-io-rk3588) - Edgeble Neural Compute Module 6B SoM - Neu6b (neu6b-io-rk3588) - FriendlyElec NanoPC-T6 (nanopc-t6-rk3588) + - FriendlyElec NanoPi R6C (nanopi-r6c-rk3588s) + - FriendlyElec NanoPi R6S (nanopi-r6s-rk3588s) - Generic RK3588S/RK3588 (generic-rk3588) - Indiedroid Nova (nova-rk3588s) - Pine64 QuartzPro64 (quartzpro64-rk3588) @@ -130,6 +132,7 @@ List of mainline supported Rockchip boards: - Radxa ROCK 5B (rock5b-rk3588) - Rockchip Toybrick TB-RK3588X (toybrick-rk3588) - Theobroma Systems RK3588-SBC Jaguar (jaguar-rk3588) + - Theobroma Systems SOM-RK3588-Q7 - Tiger (tiger-rk3588) - Turing Machines RK1 (turing-rk1-rk3588) - Xunlong Orange Pi 5 (orangepi-5-rk3588s) - Xunlong Orange Pi 5 Plus (orangepi-5-plus-rk3588) diff --git a/doc/board/socionext/developerbox.rst b/doc/board/socionext/developerbox.rst index 46712c379b6..863761c6e27 100644 --- a/doc/board/socionext/developerbox.rst +++ b/doc/board/socionext/developerbox.rst @@ -116,6 +116,7 @@ configs/synquacer_developerbox_defconfig enables default FWU configuration :: CONFIG_FWU_NUM_BANKS=2 CONFIG_FWU_NUM_IMAGES_PER_BANK=1 CONFIG_CMD_FWU_METADATA=y + CONFIG_FWU_MDATA_V2=y And build it:: @@ -129,7 +130,9 @@ And build it:: By default, the CONFIG_FWU_NUM_BANKS and CONFIG_FWU_NUM_IMAGES_PER_BANKS are set to 2 and 1 respectively. This uses FIP (Firmware Image Package) type image which contains TF-A, U-Boot and OP-TEE (the OP-TEE is optional). -You can use fiptool to compose the FIP image from those firmware images. +You can use fiptool to compose the FIP image from those firmware +images. There are two versions of the FWU metadata, of which the +platform enables version 2 by default. Rebuild SCP firmware -------------------- @@ -194,7 +197,7 @@ following UUIDs. These UUIDs are used for making a FWU metadata image. -u-boot$ ./tools/mkfwumdata -i 1 -b 2 \ +u-boot$ ./tools/mkfwumdata -v 2 -i 1 -b 2 \ 17e86d77-41f9-4fd7-87ec-a55df9842de5,10c36d7d-ca52-b843-b7b9-f9d6c501d108,5a66a702-99fd-4fef-a392-c26e261a2828,a8f868a1-6e5c-4757-878d-ce63375ef2c0 \ ../devbox-fwu-mdata.img diff --git a/doc/board/starfive/milk-v_mars_cm.rst b/doc/board/starfive/milk-v_mars_cm.rst index b31de6043bb..52d4e5e9098 100644 --- a/doc/board/starfive/milk-v_mars_cm.rst +++ b/doc/board/starfive/milk-v_mars_cm.rst @@ -89,7 +89,7 @@ provide a default value. The variable *$fdtfile* is used in the boot process to automatically load a device-tree provided by the operating system. For details of the boot -process refer to the :doc:`U-Boot Standard Boot <../../../develop/bootstd>` +process refer to the :doc:`/develop/bootstd/index` description. Boot source selection diff --git a/doc/board/theobroma-systems/index.rst b/doc/board/theobroma-systems/index.rst index b4da2616c37..73e07f7ebfa 100644 --- a/doc/board/theobroma-systems/index.rst +++ b/doc/board/theobroma-systems/index.rst @@ -9,3 +9,4 @@ Theobroma Systems jaguar_rk3588 puma_rk3399 ringneck_px30 + tiger_rk3588 diff --git a/doc/board/theobroma-systems/tiger_rk3588.rst b/doc/board/theobroma-systems/tiger_rk3588.rst new file mode 100644 index 00000000000..a73eec7fb9b --- /dev/null +++ b/doc/board/theobroma-systems/tiger_rk3588.rst @@ -0,0 +1,102 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +SOM-RK3588-Q7 Tiger +=================== + +The RK3588-Q7 SoM is a Qseven-compatible (70mm x 70mm, MXM-230 +connector) system-on-module from Theobroma Systems, featuring the +Rockchip RK3588. + +It provides the following feature set: + * up to 16GB LPDDR4x + * on-module eMMC + * SD card (on a baseboard) via edge connector + * Gigabit Ethernet with on-module GbE PHY + * HDMI/eDP + * MIPI-DSI + * 4x MIPI-CSI (3x on FPC connectors, 1x over Q7) + * HDMI input over FPC connector + * CAN + * USB + - 1x USB 3.0 dual-role (direct connection) + - 2x USB 3.0 host + 1x USB 2.0 host + * PCIe + - 1x PCIe 2.1 Gen3, 4 lanes + - 2xSATA / 2x PCIe 2.1 Gen1, 2 lanes + * on-module ATtiny816 companion controller, implementing: + - low-power RTC functionality (ISL1208 emulation) + - fan controller (AMC6821 emulation) + * on-module Secure Element with Global Platform 2.2.1 compliant + JavaCard environment + +Here is the step-by-step to boot to U-Boot on SOM-RK3588-Q7 Tiger from Theobroma +Systems. + +Get the TF-A and DDR init (TPL) binaries +---------------------------------------- + +.. prompt:: bash + + git clone https://github.com/rockchip-linux/rkbin + cd rkbin + export RKBIN=$(pwd) + export BL31=$RKBIN/bin/rk35/rk3588_bl31_v1.38.elf + export ROCKCHIP_TPL=$RKBIN/bin/rk35/rk3588_ddr_lp4_2112MHz_lp5_2736MHz_v1.11.bin + sed -i 's/^uart baudrate=.*$/uart baudrate=115200/' tools/ddrbin_param.txt + sed -i 's/^uart iomux=.*$/uart iomux=2/' tools/ddrbin_param.txt + ./tools/ddrbin_tool tools/ddrbin_param.txt "$ROCKCHIP_TPL" + ./tools/boot_merger RKBOOT/RK3588MINIALL.ini + export RKDB=$RKBIN/rk3588_spl_loader_v1.11.112.bin + +This will setup all required external dependencies for compiling U-Boot. This will +be updated in the future once upstream Trusted-Firmware-A supports RK3588 or U-Boot +gains support for open-source DRAM initialization in TPL. + +Build U-Boot +------------ + +.. prompt:: bash + + cd ../u-boot + make CROSS_COMPILE=aarch64-linux-gnu- tiger-rk3588_defconfig all + +This will build ``u-boot-rockchip.bin`` which can be written to an MMC device +(eMMC or SD card). + +Flash the image +--------------- + +Copy ``u-boot-rockchip.bin`` to offset 32k for SD/eMMC. + +SD-Card +~~~~~~~ + +.. prompt:: bash + + dd if=u-boot-rockchip.bin of=/dev/sdX seek=64 + +.. note:: + + Replace ``/dev/sdX`` to match your SD card kernel device. + +eMMC +~~~~ + +``rkdeveloptool`` allows to flash the on-board eMMC via the USB OTG interface +with help of the Rockchip loader binary. + +To enter the USB flashing mode on Haikou baseboard, remove any SD card, insert a +micro-USB cable in the ``Q7 USB P1`` connector (P8), move ``SW5`` switch into +``BIOS Disable`` mode, power cycle or reset the board and move ``SW5`` switch +back to ``Normal Boot`` mode. A new USB device should have appeared on your PC +(check with ``lsusb -d 2207:350b``). + +To flash U-Boot on the eMMC with ``rkdeveloptool``: + +.. prompt:: bash + + git clone https://github.com/rockchip-linux/rkdeveloptool + cd rkdeveloptool + autoreconf -i && CPPFLAGS=-Wno-format-truncation ./configure && make + ./rkdeveloptool db "$RKDB" + ./rkdeveloptool wl 64 ../u-boot-rockchip.bin diff --git a/doc/board/ti/am62px_sk.rst b/doc/board/ti/am62px_sk.rst index 1f2982c36f9..c80b5068117 100644 --- a/doc/board/ti/am62px_sk.rst +++ b/doc/board/ti/am62px_sk.rst @@ -156,6 +156,30 @@ Image formats: .. image:: img/dm_tispl.bin.svg :alt: tispl.bin image format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI: + +Below commands can be used to download tiboot3.bin, tispl.bin, and u-boot.img, +over tftp and then flash those to OSPI at their respective addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x80000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x280000 $filesize + +Flash layout for OSPI: + +.. image:: img/ospi_sysfw2.svg + :alt: OSPI flash partition layout + A53 SPL DDR Memory Layout ------------------------- diff --git a/doc/board/ti/am62x_sk.rst b/doc/board/ti/am62x_sk.rst index b12dc85f06b..2a25e84f6c9 100644 --- a/doc/board/ti/am62x_sk.rst +++ b/doc/board/ti/am62x_sk.rst @@ -109,6 +109,20 @@ Set the variables corresponding to this platform: :start-after: .. k3_rst_include_start_build_steps_spl_r5 :end-before: .. k3_rst_include_end_build_steps_spl_r5 +* 3.1.1 Alternative build of R5 for DFU boot: + +As the SPL size can get too big when building with support for booting both +from local storage *and* DFU an extra config fragment should be used to enable +DFU support (and disable storage support) + +.. prompt:: bash $ + + export UBOOT_CFG_CORTEXR="${UBOOT_CFG_CORTEXR} am62x_r5_usbdfu.config" + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_build_steps_spl_r5 + :end-before: .. k3_rst_include_end_build_steps_spl_r5 + * 3.2 A53: .. include:: ../ti/k3.rst @@ -150,6 +164,30 @@ Image formats: .. image:: img/dm_tispl.bin.svg :alt: tispl.bin image format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI: + +Below commands can be used to download tiboot3.bin, tispl.bin, and u-boot.img, +over tftp and then flash those to OSPI at their respective addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x80000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x280000 $filesize + +Flash layout for OSPI: + +.. image:: img/ospi_sysfw2.svg + :alt: OSPI flash partition layout + A53 SPL DDR Memory Layout ------------------------- @@ -251,6 +289,29 @@ https://www.ti.com/lit/pdf/spruiv7 under the `Boot Mode Pins` section. For SW2 and SW1, the switch state in the "ON" position = 1. +DFU based boot +-------------- + +To boot the board over DFU, set the switches to DFU mode and connect to the +USB type C DRD port on the board. After power-on the build artifacts needs to be +uploaded one by one with a tool like dfu-util. + +.. am62x_evm_rst_include_start_dfu_boot + +The initial ROM will have a DFU alt named `bootloader` for the initial R5 spl +upload. The next stages as exposed by U-Boot have target alts matching the name +of the artifacts, for these a USB reset has to be done after each upload. + +When using dfu-util the following commands can be used to boot to a U-Boot shell: + +.. prompt:: bash $ + + dfu-util -a bootloader -D tiboot3.bin + dfu-util -R -a tispl -D tispl.bin + dfu-util -R -a u-boot.img -D u-boot.img + +.. am62x_evm_rst_include_end_dfu_boot + Debugging U-Boot ---------------- diff --git a/doc/board/ti/am64x_evm.rst b/doc/board/ti/am64x_evm.rst index 6ae35b3fee3..88997b6a283 100644 --- a/doc/board/ti/am64x_evm.rst +++ b/doc/board/ti/am64x_evm.rst @@ -140,6 +140,30 @@ Image formats: .. image:: img/nodm_tispl.bin.svg :alt: tispl.bin image format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI: + +Below commands can be used to download tiboot3.bin, tispl.bin, and u-boot.img, +over tftp and then flash those to OSPI at their respective addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x100000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x300000 $filesize + +Flash layout for OSPI: + +.. image:: img/ospi_sysfw-am64.svg + :alt: OSPI flash partition layout + Switch Setting for Boot Mode ---------------------------- diff --git a/doc/board/ti/img/ospi_sysfw-am64.svg b/doc/board/ti/img/ospi_sysfw-am64.svg new file mode 100644 index 00000000000..f6244dce596 --- /dev/null +++ b/doc/board/ti/img/ospi_sysfw-am64.svg @@ -0,0 +1,802 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!--SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause--> + +<!--Copyright (C) 2024 Texas Instruments Incorporated - https://www.ti.com/--> + +<svg + version="1.1" + width="321px" + height="336px" + viewBox="-0.5 -0.5 321 336" + id="svg28701" + sodipodi:docname="ospi_sysfw-am64.svg" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:xhtml="http://www.w3.org/1999/xhtml"> + <sodipodi:namedview + id="namedview28703" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="2.5982143" + inkscape:cx="160.49485" + inkscape:cy="168" + inkscape:window-width="3370" + inkscape:window-height="1376" + inkscape:window-x="70" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g28699" /> + <defs + id="defs28505" /> + <g + id="g28699"> + <g + id="g28509"> + <rect + x="120" + y="15" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect28507" /> + </g> + <g + id="g28517"> + <g + transform="translate(-0.5 -0.5)" + id="g28515"> + <switch + id="switch28513"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 35px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tiboot3(1M)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="39" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text28511">ospi.tiboot3(1M)</text> + </switch> + </g> + </g> + <g + id="g28521"> + <rect + x="60" + y="5" + width="60" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect28519" /> + </g> + <g + id="g28529"> + <g + transform="translate(-0.5 -0.5)" + id="g28527"> + <switch + id="switch28525"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 20px; margin-left: 60px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x0</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="24" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text28523">0x0</text> + </switch> + </g> + </g> + <g + id="g28533"> + <rect + x="120" + y="55" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect28531" /> + </g> + <g + id="g28541"> + <g + transform="translate(-0.5 -0.5)" + id="g28539"> + <switch + id="switch28537"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 75px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tispl(2M)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="79" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text28535">ospi.tispl(2M)</text> + </switch> + </g> + </g> + <g + id="g28545"> + <rect + x="0" + y="45" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect28543" /> + </g> + <g + id="g28553"> + <g + transform="translate(-0.5 -0.5)" + id="g28551"> + <switch + id="switch28549"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 60px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x100000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="64" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text28547">0x100000</text> + </switch> + </g> + </g> + <g + id="g28557"> + <rect + x="120" + y="95" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect28555" /> + </g> + <g + id="g28565"> + <g + transform="translate(-0.5 -0.5)" + id="g28563"> + <switch + id="switch28561"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 115px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.u-boot(4M)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="119" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text28559">ospi.u-boot(4M)</text> + </switch> + </g> + </g> + <g + id="g28569"> + <rect + x="0" + y="85" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect28567" /> + </g> + <g + id="g28577"> + <g + transform="translate(-0.5 -0.5)" + id="g28575"> + <switch + id="switch28573"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 100px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x300000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="104" + fill="#000000" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text28571">0x300000</text> + </switch> + </g> + </g> + <g + id="g28581"> + <rect + x="120" + y="135" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect28579" /> + </g> + <g + id="g28589"> + <g + transform="translate(-0.5 -0.5)" + id="g28587"> + <switch + id="switch28585"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 155px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env(128K)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="159" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text28583">ospi.env(128K)</text> + </switch> + </g> + </g> + <g + id="g28593"> + <rect + x="0" + y="125" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect28591" /> + </g> + <g + id="g28601"> + <g + transform="translate(-0.5 -0.5)" + id="g28599"> + <switch + id="switch28597"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 140px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x700000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="144" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text28595">0x700000</text> + </switch> + </g> + </g> + <g + id="g28605"> + <rect + x="120" + y="175" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect28603" /> + </g> + <g + id="g28613"> + <g + transform="translate(-0.5 -0.5)" + id="g28611"> + <switch + id="switch28609"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 195px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env.backup(128K)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="199" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text28607">ospi.env.backup(128K)</text> + </switch> + </g> + </g> + <g + id="g28617"> + <rect + x="0" + y="165" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect28615" /> + </g> + <g + id="g28625"> + <g + transform="translate(-0.5 -0.5)" + id="g28623"> + <switch + id="switch28621"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 180px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x720000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="184" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text28619">0x720000</text> + </switch> + </g> + </g> + <g + id="g28629"> + <rect + x="120" + y="215" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect28627" /> + </g> + <g + id="g28637"> + <g + transform="translate(-0.5 -0.5)" + id="g28635"> + <switch + id="switch28633"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 235px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">padding(768K)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="239" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text28631">padding(768K)</text> + </switch> + </g> + </g> + <g + id="g28641"> + <rect + x="0" + y="205" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect28639" /> + </g> + <g + id="g28649"> + <g + transform="translate(-0.5 -0.5)" + id="g28647"> + <switch + id="switch28645"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 220px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x740000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="224" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text28643">0x740000</text> + </switch> + </g> + </g> + <g + id="g28653"> + <rect + x="120" + y="255" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect28651" /> + </g> + <g + id="g28661"> + <g + transform="translate(-0.5 -0.5)" + id="g28659"> + <switch + id="switch28657"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 275px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.rootfs(UBIFS)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="279" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text28655">ospi.rootfs(UBIFS)</text> + </switch> + </g> + </g> + <g + id="g28665"> + <rect + x="0" + y="245" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect28663" /> + </g> + <g + id="g28673"> + <g + transform="translate(-0.5 -0.5)" + id="g28671"> + <switch + id="switch28669"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 260px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x800000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="264" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text28667">0x800000</text> + </switch> + </g> + </g> + <g + id="g28677"> + <rect + x="120" + y="295" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect28675" /> + </g> + <g + id="g28685"> + <g + transform="translate(-0.5 -0.5)" + id="g28683"> + <switch + id="switch28681"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 315px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.phypattern(256k)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="319" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text28679">ospi.phypattern(256k)</text> + </switch> + </g> + </g> + <g + id="g28689"> + <rect + x="0" + y="285" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect28687" /> + </g> + <g + id="g28697"> + <g + transform="translate(-0.5 -0.5)" + id="g28695"> + <switch + id="switch28693"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 300px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x3FC0000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="304" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text28691">0x3FC0000</text> + </switch> + </g> + </g> + </g> +</svg> diff --git a/doc/board/ti/img/ospi_sysfw.svg b/doc/board/ti/img/ospi_sysfw.svg index 648f6fd03e5..2a2fd3f4863 100644 --- a/doc/board/ti/img/ospi_sysfw.svg +++ b/doc/board/ti/img/ospi_sysfw.svg @@ -1,725 +1,897 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!--SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause--> -<!--Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/--> +<!--Copyright (C) 2024 Texas Instruments Incorporated - https://www.ti.com/--> <svg version="1.1" width="321px" - height="336px" - viewBox="-0.5 -0.5 321 336" - id="svg142" + height="376px" + viewBox="-0.5 -0.5 321 376" + id="svg19243" sodipodi:docname="ospi_sysfw.svg" inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xhtml="http://www.w3.org/1999/xhtml"> <sodipodi:namedview - id="namedview144" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageshadow="2" - inkscape:pageopacity="0.0" + id="namedview19245" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" inkscape:pagecheckerboard="0" showgrid="false" - inkscape:zoom="2.0297619" - inkscape:cx="156.66862" - inkscape:cy="168" - inkscape:window-width="3440" - inkscape:window-height="1416" - inkscape:window-x="0" - inkscape:window-y="0" + inkscape:zoom="2.3218085" + inkscape:cx="160.65063" + inkscape:cy="188" + inkscape:window-width="3370" + inkscape:window-height="1376" + inkscape:window-x="70" + inkscape:window-y="27" inkscape:window-maximized="1" - inkscape:current-layer="svg142" /> + inkscape:current-layer="g19241" /> <defs - id="defs2" /> + id="defs19023" /> <g - id="g132"> - <rect - x="120" - y="15" - width="200" - height="40" - fill="rgb(255, 255, 255)" - stroke="rgb(0, 0, 0)" - pointer-events="all" - id="rect4" /> - <g - transform="translate(-0.5 -0.5)" - id="g10"> - <switch - id="switch8"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 35px; margin-left: 121px;"> + id="g19241"> + <g + id="g19027"> + <rect + x="120" + y="15" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect19025" /> + </g> + <g + id="g19035"> + <g + transform="translate(-0.5 -0.5)" + id="g19033"> + <switch + id="switch19031"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: center;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 35px; margin-left: 121px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tiboot3(512k)</xhtml:div> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tiboot3(512k)</xhtml:div> + </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="220" - y="39" - fill="#000000" - font-family="Helvetica" - font-size="12px" - text-anchor="middle" - id="text6">ospi.tiboot3(512k)</text> - </switch> - </g> - <rect - x="60" - y="5" - width="60" - height="30" - fill="none" - stroke="none" - pointer-events="all" - id="rect12" /> - <g - transform="translate(-0.5 -0.5)" - id="g18"> - <switch - id="switch16"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 20px; margin-left: 60px;"> + </foreignObject> + <text + x="220" + y="39" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text19029">ospi.tiboot3(512k)</text> + </switch> + </g> + </g> + <g + id="g19039"> + <rect + x="60" + y="5" + width="60" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect19037" /> + </g> + <g + id="g19047"> + <g + transform="translate(-0.5 -0.5)" + id="g19045"> + <switch + id="switch19043"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: right;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 20px; margin-left: 60px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> - <xhtml:pre - style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x0</xhtml:pre> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x0</xhtml:pre> + </xhtml:div> </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="118" - y="24" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="end" - id="text14">0x0</text> - </switch> - </g> - <rect - x="120" - y="55" - width="200" - height="40" - fill="rgb(255, 255, 255)" - stroke="rgb(0, 0, 0)" - pointer-events="all" - id="rect20" /> - <g - transform="translate(-0.5 -0.5)" - id="g26"> - <switch - id="switch24"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 75px; margin-left: 121px;"> + </foreignObject> + <text + x="118" + y="24" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text19041">0x0</text> + </switch> + </g> + </g> + <g + id="g19051"> + <rect + x="120" + y="55" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect19049" /> + </g> + <g + id="g19059"> + <g + transform="translate(-0.5 -0.5)" + id="g19057"> + <switch + id="switch19055"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: center;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 75px; margin-left: 121px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tispl(2M)</xhtml:div> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tispl(2M)</xhtml:div> + </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="220" - y="79" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="middle" - id="text22">ospi.tispl(2M)</text> - </switch> - </g> - <rect - x="0" - y="45" - width="120" - height="30" - fill="none" - stroke="none" - pointer-events="all" - id="rect28" /> - <g - transform="translate(-0.5 -0.5)" - id="g34"> - <switch - id="switch32"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 60px; margin-left: 0px;"> + </foreignObject> + <text + x="220" + y="79" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text19053">ospi.tispl(2M)</text> + </switch> + </g> + </g> + <g + id="g19063"> + <rect + x="0" + y="45" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect19061" /> + </g> + <g + id="g19071"> + <g + transform="translate(-0.5 -0.5)" + id="g19069"> + <switch + id="switch19067"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: right;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 60px; margin-left: 0px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> - <xhtml:pre - style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x80000</xhtml:pre> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x80000</xhtml:pre> + </xhtml:div> </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="118" - y="64" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="end" - id="text30">0x80000</text> - </switch> - </g> - <rect - x="120" - y="95" - width="200" - height="40" - fill="rgb(255, 255, 255)" - stroke="rgb(0, 0, 0)" - pointer-events="all" - id="rect36" /> - <g - transform="translate(-0.5 -0.5)" - id="g42"> - <switch - id="switch40"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 115px; margin-left: 121px;"> + </foreignObject> + <text + x="118" + y="64" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text19065">0x80000</text> + </switch> + </g> + </g> + <g + id="g19075"> + <rect + x="120" + y="95" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect19073" /> + </g> + <g + id="g19083"> + <g + transform="translate(-0.5 -0.5)" + id="g19081"> + <switch + id="switch19079"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: center;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 115px; margin-left: 121px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.u-boot(4M)</xhtml:div> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.u-boot(4M)</xhtml:div> + </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="220" - y="119" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="middle" - id="text38">ospi.u-boot(4M)</text> - </switch> - </g> - <rect - x="0" - y="85" - width="120" - height="30" - fill="none" - stroke="none" - pointer-events="all" - id="rect44" /> - <g - transform="translate(-0.5 -0.5)" - id="g50"> - <switch - id="switch48"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 100px; margin-left: 0px;"> + </foreignObject> + <text + x="220" + y="119" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text19077">ospi.u-boot(4M)</text> + </switch> + </g> + </g> + <g + id="g19087"> + <rect + x="0" + y="85" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect19085" /> + </g> + <g + id="g19095"> + <g + transform="translate(-0.5 -0.5)" + id="g19093"> + <switch + id="switch19091"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: right;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 100px; margin-left: 0px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> - <xhtml:pre - style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x280000</xhtml:pre> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x280000</xhtml:pre> + </xhtml:div> </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="118" - y="104" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="end" - id="text46">0x280000</text> - </switch> - </g> - <rect - x="120" - y="135" - width="200" - height="40" - fill="rgb(255, 255, 255)" - stroke="rgb(0, 0, 0)" - pointer-events="all" - id="rect52" /> - <g - transform="translate(-0.5 -0.5)" - id="g58"> - <switch - id="switch56"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 155px; margin-left: 121px;"> + </foreignObject> + <text + x="118" + y="104" + fill="#000000" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text19089">0x280000</text> + </switch> + </g> + </g> + <g + id="g19099"> + <rect + x="120" + y="135" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect19097" /> + </g> + <g + id="g19107"> + <g + transform="translate(-0.5 -0.5)" + id="g19105"> + <switch + id="switch19103"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: center;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 155px; margin-left: 121px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env(128K)</xhtml:div> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env(128K)</xhtml:div> + </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="220" - y="159" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="middle" - id="text54">ospi.env(128K)</text> - </switch> - </g> - <rect - x="0" - y="125" - width="120" - height="30" - fill="none" - stroke="none" - pointer-events="all" - id="rect60" /> - <g - transform="translate(-0.5 -0.5)" - id="g66"> - <switch - id="switch64"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 140px; margin-left: 0px;"> + </foreignObject> + <text + x="220" + y="159" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text19101">ospi.env(128K)</text> + </switch> + </g> + </g> + <g + id="g19111"> + <rect + x="0" + y="125" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect19109" /> + </g> + <g + id="g19119"> + <g + transform="translate(-0.5 -0.5)" + id="g19117"> + <switch + id="switch19115"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: right;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 140px; margin-left: 0px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> - <xhtml:pre - style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x680000</xhtml:pre> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x680000</xhtml:pre> + </xhtml:div> </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="118" - y="144" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="end" - id="text62">0x680000</text> - </switch> - </g> - <rect - x="120" - y="175" - width="200" - height="40" - fill="rgb(255, 255, 255)" - stroke="rgb(0, 0, 0)" - pointer-events="all" - id="rect68" /> - <g - transform="translate(-0.5 -0.5)" - id="g74"> - <switch - id="switch72"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 195px; margin-left: 121px;"> + </foreignObject> + <text + x="118" + y="144" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text19113">0x680000</text> + </switch> + </g> + </g> + <g + id="g19123"> + <rect + x="120" + y="175" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect19121" /> + </g> + <g + id="g19131"> + <g + transform="translate(-0.5 -0.5)" + id="g19129"> + <switch + id="switch19127"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: center;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 195px; margin-left: 121px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env.backup(128K)</xhtml:div> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env.backup(128K)</xhtml:div> + </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="220" - y="199" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="middle" - id="text70">ospi.env.backup(128K)</text> - </switch> - </g> - <rect - x="0" - y="165" - width="120" - height="30" - fill="none" - stroke="none" - pointer-events="all" - id="rect76" /> - <g - transform="translate(-0.5 -0.5)" - id="g82"> - <switch - id="switch80"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 180px; margin-left: 0px;"> + </foreignObject> + <text + x="220" + y="199" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text19125">ospi.env.backup(128K)</text> + </switch> + </g> + </g> + <g + id="g19135"> + <rect + x="0" + y="165" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect19133" /> + </g> + <g + id="g19143"> + <g + transform="translate(-0.5 -0.5)" + id="g19141"> + <switch + id="switch19139"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: right;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 180px; margin-left: 0px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> - <xhtml:pre - style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x6A0000</xhtml:pre> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x6A0000</xhtml:pre> + </xhtml:div> </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="118" - y="184" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="end" - id="text78">0x6A0000</text> - </switch> - </g> - <rect - x="120" - y="215" - width="200" - height="40" - fill="rgb(255, 255, 255)" - stroke="rgb(0, 0, 0)" - pointer-events="all" - id="rect84" /> - <g - transform="translate(-0.5 -0.5)" - id="g90"> - <switch - id="switch88"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 235px; margin-left: 121px;"> + </foreignObject> + <text + x="118" + y="184" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text19137">0x6A0000</text> + </switch> + </g> + </g> + <g + id="g19147"> + <rect + x="120" + y="215" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect19145" /> + </g> + <g + id="g19155"> + <g + transform="translate(-0.5 -0.5)" + id="g19153"> + <switch + id="switch19151"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: center;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 235px; margin-left: 121px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.sysfw(1M)</xhtml:div> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.sysfw(1M)</xhtml:div> + </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="220" - y="239" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="middle" - id="text86">ospi.sysfw(1M)</text> - </switch> - </g> - <rect - x="0" - y="205" - width="120" - height="30" - fill="none" - stroke="none" - pointer-events="all" - id="rect92" /> - <g - transform="translate(-0.5 -0.5)" - id="g98"> - <switch - id="switch96"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 220px; margin-left: 0px;"> + </foreignObject> + <text + x="220" + y="239" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text19149">ospi.sysfw(1M)</text> + </switch> + </g> + </g> + <g + id="g19159"> + <rect + x="0" + y="205" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect19157" /> + </g> + <g + id="g19167"> + <g + transform="translate(-0.5 -0.5)" + id="g19165"> + <switch + id="switch19163"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: right;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 220px; margin-left: 0px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> - <xhtml:pre - style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x6C0000</xhtml:pre> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x6C0000</xhtml:pre> + </xhtml:div> </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="118" - y="224" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="end" - id="text94">0x6C0000</text> - </switch> - </g> - <rect - x="120" - y="255" - width="200" - height="40" - fill="rgb(255, 255, 255)" - stroke="rgb(0, 0, 0)" - pointer-events="all" - id="rect100" /> - <g - transform="translate(-0.5 -0.5)" - id="g106"> - <switch - id="switch104"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 275px; margin-left: 121px;"> + </foreignObject> + <text + x="118" + y="224" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text19161">0x6C0000</text> + </switch> + </g> + </g> + <g + id="g19171"> + <rect + x="120" + y="255" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect19169" /> + </g> + <g + id="g19179"> + <g + transform="translate(-0.5 -0.5)" + id="g19177"> + <switch + id="switch19175"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: center;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 275px; margin-left: 121px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">padding(256K)</xhtml:div> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">padding(256K)</xhtml:div> + </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="220" - y="279" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="middle" - id="text102">padding(256K)</text> - </switch> - </g> - <rect - x="0" - y="245" - width="120" - height="30" - fill="none" - stroke="none" - pointer-events="all" - id="rect108" /> - <g - transform="translate(-0.5 -0.5)" - id="g114"> - <switch - id="switch112"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 260px; margin-left: 0px;"> + </foreignObject> + <text + x="220" + y="279" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text19173">padding(256K)</text> + </switch> + </g> + </g> + <g + id="g19183"> + <rect + x="0" + y="245" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect19181" /> + </g> + <g + id="g19191"> + <g + transform="translate(-0.5 -0.5)" + id="g19189"> + <switch + id="switch19187"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: right;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 260px; margin-left: 0px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> - <xhtml:pre - style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x7C0000</xhtml:pre> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x7C0000</xhtml:pre> + </xhtml:div> </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="118" - y="264" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="end" - id="text110">0x7C0000</text> - </switch> - </g> - <rect - x="120" - y="295" - width="200" - height="40" - fill="rgb(255, 255, 255)" - stroke="rgb(0, 0, 0)" - pointer-events="all" - id="rect116" /> - <g - transform="translate(-0.5 -0.5)" - id="g122"> - <switch - id="switch120"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 315px; margin-left: 121px;"> + </foreignObject> + <text + x="118" + y="264" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text19185">0x7C0000</text> + </switch> + </g> + </g> + <g + id="g19195"> + <rect + x="120" + y="295" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect19193" /> + </g> + <g + id="g19203"> + <g + transform="translate(-0.5 -0.5)" + id="g19201"> + <switch + id="switch19199"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: center;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 315px; margin-left: 121px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.rootfs(UBIFS)</xhtml:div> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.rootfs(UBIFS)</xhtml:div> + </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="220" - y="319" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="middle" - id="text118">ospi.rootfs(UBIFS)</text> - </switch> - </g> - <rect - x="0" - y="285" - width="120" - height="30" - fill="none" - stroke="none" - pointer-events="all" - id="rect124" /> - <g - transform="translate(-0.5 -0.5)" - id="g130"> - <switch - id="switch128"> - <foreignObject - pointer-events="none" - width="100%" - height="100%" - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - style="overflow: visible; text-align: left;"> - <xhtml:div - style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 300px; margin-left: 0px;"> + </foreignObject> + <text + x="220" + y="319" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text19197">ospi.rootfs(UBIFS)</text> + </switch> + </g> + </g> + <g + id="g19207"> + <rect + x="0" + y="285" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect19205" /> + </g> + <g + id="g19215"> + <g + transform="translate(-0.5 -0.5)" + id="g19213"> + <switch + id="switch19211"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 300px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x800000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="304" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text19209">0x800000</text> + </switch> + </g> + </g> + <g + id="g19219"> + <rect + x="120" + y="335" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect19217" /> + </g> + <g + id="g19227"> + <g + transform="translate(-0.5 -0.5)" + id="g19225"> + <switch + id="switch19223"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 355px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.phypattern(128k)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="359" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text19221">ospi.phypattern(128k)</text> + </switch> + </g> + </g> + <g + id="g19231"> + <rect + x="0" + y="325" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect19229" /> + </g> + <g + id="g19239"> + <g + transform="translate(-0.5 -0.5)" + id="g19237"> + <switch + id="switch19235"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> <xhtml:div - data-drawio-colors="color: rgb(0, 0, 0); " - style="box-sizing: border-box; font-size: 0px; text-align: right;"> + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 340px; margin-left: 0px;"> <xhtml:div - style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> - <xhtml:pre - style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x800000</xhtml:pre> + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x3FE0000</xhtml:pre> + </xhtml:div> </xhtml:div> </xhtml:div> - </xhtml:div> - </foreignObject> - <text - x="118" - y="304" - fill="rgb(0, 0, 0)" - font-family="Helvetica" - font-size="12px" - text-anchor="end" - id="text126">0x800000</text> - </switch> + </foreignObject> + <text + x="118" + y="344" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text19233">0x3FE0000</text> + </switch> + </g> </g> </g> - <switch - id="switch140"> - <g - requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" - id="g134" /> - <a - transform="translate(0,-5)" - xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" - target="_blank" - id="a138"> - <text - text-anchor="middle" - font-size="10px" - x="50%" - y="100%" - id="text136">Text is not SVG - cannot display</text> - </a> - </switch> </svg> diff --git a/doc/board/ti/img/ospi_sysfw2.svg b/doc/board/ti/img/ospi_sysfw2.svg new file mode 100644 index 00000000000..06711df4117 --- /dev/null +++ b/doc/board/ti/img/ospi_sysfw2.svg @@ -0,0 +1,802 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!--SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause--> + +<!--Copyright (C) 2024 Texas Instruments Incorporated - https://www.ti.com/--> + +<svg + version="1.1" + width="321px" + height="336px" + viewBox="-0.5 -0.5 321 336" + id="svg24863" + sodipodi:docname="ospi_sysfw2.svg" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:xhtml="http://www.w3.org/1999/xhtml"> + <sodipodi:namedview + id="namedview24865" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="2.5982143" + inkscape:cx="160.49485" + inkscape:cy="168" + inkscape:window-width="3370" + inkscape:window-height="1376" + inkscape:window-x="70" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g24861" /> + <defs + id="defs24667" /> + <g + id="g24861"> + <g + id="g24671"> + <rect + x="120" + y="15" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect24669" /> + </g> + <g + id="g24679"> + <g + transform="translate(-0.5 -0.5)" + id="g24677"> + <switch + id="switch24675"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 35px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tiboot3(512k)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="39" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text24673">ospi.tiboot3(512k)</text> + </switch> + </g> + </g> + <g + id="g24683"> + <rect + x="60" + y="5" + width="60" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect24681" /> + </g> + <g + id="g24691"> + <g + transform="translate(-0.5 -0.5)" + id="g24689"> + <switch + id="switch24687"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 20px; margin-left: 60px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x0</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="24" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text24685">0x0</text> + </switch> + </g> + </g> + <g + id="g24695"> + <rect + x="120" + y="55" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect24693" /> + </g> + <g + id="g24703"> + <g + transform="translate(-0.5 -0.5)" + id="g24701"> + <switch + id="switch24699"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 75px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tispl(2M)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="79" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text24697">ospi.tispl(2M)</text> + </switch> + </g> + </g> + <g + id="g24707"> + <rect + x="0" + y="45" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect24705" /> + </g> + <g + id="g24715"> + <g + transform="translate(-0.5 -0.5)" + id="g24713"> + <switch + id="switch24711"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 60px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x80000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="64" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text24709">0x80000</text> + </switch> + </g> + </g> + <g + id="g24719"> + <rect + x="120" + y="95" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect24717" /> + </g> + <g + id="g24727"> + <g + transform="translate(-0.5 -0.5)" + id="g24725"> + <switch + id="switch24723"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 115px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.u-boot(4M)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="119" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text24721">ospi.u-boot(4M)</text> + </switch> + </g> + </g> + <g + id="g24731"> + <rect + x="0" + y="85" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect24729" /> + </g> + <g + id="g24739"> + <g + transform="translate(-0.5 -0.5)" + id="g24737"> + <switch + id="switch24735"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 100px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x280000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="104" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text24733">0x280000</text> + </switch> + </g> + </g> + <g + id="g24743"> + <rect + x="120" + y="135" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect24741" /> + </g> + <g + id="g24751"> + <g + transform="translate(-0.5 -0.5)" + id="g24749"> + <switch + id="switch24747"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 155px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env(128K)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="159" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text24745">ospi.env(128K)</text> + </switch> + </g> + </g> + <g + id="g24755"> + <rect + x="0" + y="125" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect24753" /> + </g> + <g + id="g24763"> + <g + transform="translate(-0.5 -0.5)" + id="g24761"> + <switch + id="switch24759"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 140px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x680000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="144" + fill="#000000" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text24757">0x680000</text> + </switch> + </g> + </g> + <g + id="g24767"> + <rect + x="120" + y="175" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect24765" /> + </g> + <g + id="g24775"> + <g + transform="translate(-0.5 -0.5)" + id="g24773"> + <switch + id="switch24771"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 195px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env.backup(128K)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="199" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text24769">ospi.env.backup(128K)</text> + </switch> + </g> + </g> + <g + id="g24779"> + <rect + x="0" + y="165" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect24777" /> + </g> + <g + id="g24787"> + <g + transform="translate(-0.5 -0.5)" + id="g24785"> + <switch + id="switch24783"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 180px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x6C0000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="184" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text24781">0x6C0000</text> + </switch> + </g> + </g> + <g + id="g24791"> + <rect + x="120" + y="215" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect24789" /> + </g> + <g + id="g24799"> + <g + transform="translate(-0.5 -0.5)" + id="g24797"> + <switch + id="switch24795"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 235px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">padding(768K)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="239" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text24793">padding(768K)</text> + </switch> + </g> + </g> + <g + id="g24803"> + <rect + x="0" + y="205" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect24801" /> + </g> + <g + id="g24811"> + <g + transform="translate(-0.5 -0.5)" + id="g24809"> + <switch + id="switch24807"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 220px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x740000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="224" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text24805">0x740000</text> + </switch> + </g> + </g> + <g + id="g24815"> + <rect + x="120" + y="255" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect24813" /> + </g> + <g + id="g24823"> + <g + transform="translate(-0.5 -0.5)" + id="g24821"> + <switch + id="switch24819"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 275px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.rootfs(UBIFS)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="279" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text24817">ospi.rootfs(UBIFS)</text> + </switch> + </g> + </g> + <g + id="g24827"> + <rect + x="0" + y="245" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect24825" /> + </g> + <g + id="g24835"> + <g + transform="translate(-0.5 -0.5)" + id="g24833"> + <switch + id="switch24831"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 260px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x800000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="264" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text24829">0x800000</text> + </switch> + </g> + </g> + <g + id="g24839"> + <rect + x="120" + y="295" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect24837" /> + </g> + <g + id="g24847"> + <g + transform="translate(-0.5 -0.5)" + id="g24845"> + <switch + id="switch24843"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 315px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.phypattern(256k)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="319" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text24841">ospi.phypattern(256k)</text> + </switch> + </g> + </g> + <g + id="g24851"> + <rect + x="0" + y="285" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect24849" /> + </g> + <g + id="g24859"> + <g + transform="translate(-0.5 -0.5)" + id="g24857"> + <switch + id="switch24855"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 300px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x3FC0000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="304" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text24853">0x3FC0000</text> + </switch> + </g> + </g> + </g> +</svg> diff --git a/doc/board/ti/img/ospi_sysfw3.svg b/doc/board/ti/img/ospi_sysfw3.svg new file mode 100644 index 00000000000..382867c6f4f --- /dev/null +++ b/doc/board/ti/img/ospi_sysfw3.svg @@ -0,0 +1,802 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!--SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause--> + +<!--Copyright (C) 2024 Texas Instruments Incorporated - https://www.ti.com/--> + +<svg + version="1.1" + width="321px" + height="336px" + viewBox="-0.5 -0.5 321 336" + id="svg205" + sodipodi:docname="ospi_sysfw3.svg" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:xhtml="http://www.w3.org/1999/xhtml"> + <sodipodi:namedview + id="namedview207" + pagecolor="#505050" + bordercolor="#eeeeee" + borderopacity="1" + inkscape:pageshadow="0" + inkscape:pageopacity="0" + inkscape:pagecheckerboard="0" + showgrid="false" + inkscape:zoom="3.4732143" + inkscape:cx="160.37018" + inkscape:cy="168" + inkscape:window-width="3370" + inkscape:window-height="1376" + inkscape:window-x="70" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="g203" /> + <defs + id="defs9" /> + <g + id="g203"> + <g + id="g13"> + <rect + x="120" + y="15" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect11" /> + </g> + <g + id="g21"> + <g + transform="translate(-0.5 -0.5)" + id="g19"> + <switch + id="switch17"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 35px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tiboot3(512k)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="39" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text15">ospi.tiboot3(512k)</text> + </switch> + </g> + </g> + <g + id="g25"> + <rect + x="60" + y="5" + width="60" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect23" /> + </g> + <g + id="g33"> + <g + transform="translate(-0.5 -0.5)" + id="g31"> + <switch + id="switch29"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 58px; height: 1px; padding-top: 20px; margin-left: 60px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x0</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="24" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text27">0x0</text> + </switch> + </g> + </g> + <g + id="g37"> + <rect + x="120" + y="55" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect35" /> + </g> + <g + id="g45"> + <g + transform="translate(-0.5 -0.5)" + id="g43"> + <switch + id="switch41"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 75px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.tispl(2M)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="79" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text39">ospi.tispl(2M)</text> + </switch> + </g> + </g> + <g + id="g49"> + <rect + x="0" + y="45" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect47" /> + </g> + <g + id="g57"> + <g + transform="translate(-0.5 -0.5)" + id="g55"> + <switch + id="switch53"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 60px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x80000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="64" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text51">0x80000</text> + </switch> + </g> + </g> + <g + id="g61"> + <rect + x="120" + y="95" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect59" /> + </g> + <g + id="g69"> + <g + transform="translate(-0.5 -0.5)" + id="g67"> + <switch + id="switch65"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 115px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.u-boot(4M)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="119" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text63">ospi.u-boot(4M)</text> + </switch> + </g> + </g> + <g + id="g73"> + <rect + x="0" + y="85" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect71" /> + </g> + <g + id="g81"> + <g + transform="translate(-0.5 -0.5)" + id="g79"> + <switch + id="switch77"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 100px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x280000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="104" + fill="#000000" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text75">0x280000</text> + </switch> + </g> + </g> + <g + id="g85"> + <rect + x="120" + y="135" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect83" /> + </g> + <g + id="g93"> + <g + transform="translate(-0.5 -0.5)" + id="g91"> + <switch + id="switch89"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 155px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env(128K)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="159" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text87">ospi.env(128K)</text> + </switch> + </g> + </g> + <g + id="g97"> + <rect + x="0" + y="125" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect95" /> + </g> + <g + id="g105"> + <g + transform="translate(-0.5 -0.5)" + id="g103"> + <switch + id="switch101"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 140px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x680000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="144" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text99">0x680000</text> + </switch> + </g> + </g> + <g + id="g109"> + <rect + x="120" + y="175" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect107" /> + </g> + <g + id="g117"> + <g + transform="translate(-0.5 -0.5)" + id="g115"> + <switch + id="switch113"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 195px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.env.backup(128K)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="199" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text111">ospi.env.backup(128K)</text> + </switch> + </g> + </g> + <g + id="g121"> + <rect + x="0" + y="165" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect119" /> + </g> + <g + id="g129"> + <g + transform="translate(-0.5 -0.5)" + id="g127"> + <switch + id="switch125"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 180px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x6A0000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="184" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text123">0x6A0000</text> + </switch> + </g> + </g> + <g + id="g133"> + <rect + x="120" + y="215" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect131" /> + </g> + <g + id="g141"> + <g + transform="translate(-0.5 -0.5)" + id="g139"> + <switch + id="switch137"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 235px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">padding(1280K)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="239" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text135">padding(1280K)</text> + </switch> + </g> + </g> + <g + id="g145"> + <rect + x="0" + y="205" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect143" /> + </g> + <g + id="g153"> + <g + transform="translate(-0.5 -0.5)" + id="g151"> + <switch + id="switch149"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 220px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x6C0000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="224" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text147">0x6C0000</text> + </switch> + </g> + </g> + <g + id="g157"> + <rect + x="120" + y="255" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect155" /> + </g> + <g + id="g165"> + <g + transform="translate(-0.5 -0.5)" + id="g163"> + <switch + id="switch161"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 275px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.rootfs(UBIFS)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="279" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text159">ospi.rootfs(UBIFS)</text> + </switch> + </g> + </g> + <g + id="g169"> + <rect + x="0" + y="245" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect167" /> + </g> + <g + id="g177"> + <g + transform="translate(-0.5 -0.5)" + id="g175"> + <switch + id="switch173"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 260px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x800000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="264" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text171">0x800000</text> + </switch> + </g> + </g> + <g + id="g181"> + <rect + x="120" + y="295" + width="200" + height="40" + fill="none" + stroke="rgb(0, 0, 0)" + pointer-events="all" + id="rect179" /> + </g> + <g + id="g189"> + <g + transform="translate(-0.5 -0.5)" + id="g187"> + <switch + id="switch185"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 198px; height: 1px; padding-top: 315px; margin-left: 121px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: center;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">ospi.phypattern(256k)</xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="220" + y="319" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="middle" + id="text183">ospi.phypattern(256k)</text> + </switch> + </g> + </g> + <g + id="g193"> + <rect + x="0" + y="285" + width="120" + height="30" + fill="none" + stroke="none" + pointer-events="all" + id="rect191" /> + </g> + <g + id="g201"> + <g + transform="translate(-0.5 -0.5)" + id="g199"> + <switch + id="switch197"> + <foreignObject + pointer-events="none" + width="100%" + height="100%" + requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" + style="overflow: visible; text-align: left;"> + <xhtml:div + style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 118px; height: 1px; padding-top: 300px; margin-left: 0px;"> + <xhtml:div + data-drawio-colors="color: rgb(0, 0, 0); " + style="box-sizing: border-box; font-size: 0px; text-align: right;"> + <xhtml:div + style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"> + <xhtml:pre + style="box-sizing: border-box; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", Courier, monospace; line-height: 1.4; margin-top: 0px; margin-bottom: 0px; padding: 12px; overflow: auto; color: rgb(64, 64, 64); text-align: start;">0x3FC0000</xhtml:pre> + </xhtml:div> + </xhtml:div> + </xhtml:div> + </foreignObject> + <text + x="118" + y="304" + fill="rgb(0, 0, 0)" + font-family="Helvetica" + font-size="12px" + text-anchor="end" + id="text195">0x3FC0000</text> + </switch> + </g> + </g> + </g> +</svg> diff --git a/doc/board/ti/j721e_evm.rst b/doc/board/ti/j721e_evm.rst index a422a9bf1a0..80d91cafab0 100644 --- a/doc/board/ti/j721e_evm.rst +++ b/doc/board/ti/j721e_evm.rst @@ -150,6 +150,33 @@ Image formats: .. image:: img/sysfw.itb.svg :alt: sysfw.itb image format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI: + +Below commands can be used to download tiboot3.bin, tispl.bin, u-boot.img, +and sysfw.itb over tftp and then flash those to OSPI at their respective +addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x80000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x280000 $filesize + tftp ${loadaddr} sysfw.itb + sf update $loadaddr 0x6C0000 $filesize + +Flash layout for OSPI: + +.. image:: img/ospi_sysfw.svg + :alt: OSPI flash partition layout + R5 Memory Map: -------------- @@ -193,35 +220,8 @@ R5 Memory Map: - 0x41cffbfc - 0x41cfffff -OSPI: ------ -ROM supports booting from OSPI from offset 0x0. - -Flashing images to OSPI: - -Below commands can be used to download tiboot3.bin, tispl.bin, u-boot.img, -and sysfw.itb over tftp and then flash those to OSPI at their respective -addresses. - -.. prompt:: bash => - - sf probe - tftp ${loadaddr} tiboot3.bin - sf update $loadaddr 0x0 $filesize - tftp ${loadaddr} tispl.bin - sf update $loadaddr 0x80000 $filesize - tftp ${loadaddr} u-boot.img - sf update $loadaddr 0x280000 $filesize - tftp ${loadaddr} sysfw.itb - sf update $loadaddr 0x6C0000 $filesize - -Flash layout for OSPI: - -.. image:: img/ospi_sysfw.svg - :alt: OSPI flash partition layout - -Firmwares: ----------- +Firmware: +--------- The J721e u-boot allows firmware to be loaded for the Cortex-R5 subsystem. The CPSW5G in J7200 and CPSW9G in J721E present in MAIN domain is configured diff --git a/doc/board/ti/j722s_evm.rst b/doc/board/ti/j722s_evm.rst new file mode 100644 index 00000000000..10b243908a1 --- /dev/null +++ b/doc/board/ti/j722s_evm.rst @@ -0,0 +1,260 @@ +.. SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause +.. sectionauthor:: Jayesh Choudhary <j-choudhary@ti.com> + +J722S-EVM Platform +================== + +The J722S is a family of application processors built for Automotive and +Linux Application development. J722S family of SoCs is a superset of the +AM62P SoC family and shares similar memory map, thus the nodes are being +reused from AM62P includes instead of duplicating the definitions. + +Some highlights of J722S SoC (in addition to AM62P SoC features) are: + +* Two Cortex-R5F for Functional Safety or general-purpose usage and + two C7x floating point vector DSP with Matrix Multiply Accelerator + for deep learning. + +* Vision Processing Accelerator (VPAC) with image signal processor + and Depth and Motion Processing Accelerator (DMPAC). + +* 7xUARTs, 3xSPI, 5xI2C, 2xUSB2, 2xCAN-FD, 3xMMC and SD, GPMC for + NAND/FPGA connection, OSPI memory controller, 5xMcASP for audio, + 4xCSI-RX for Camera, 1 PCIe Gen3 controller, USB3.0 eCAP/eQEP, + ePWM, among other peripherals. + +For those interested, more details about this SoC can be found in the +Technical Reference Manual here: https://www.ti.com/lit/zip/sprujb3 + +Boot Flow: +---------- + +The bootflow is exactly the same as all SoCs in the am62xxx extended SoC +family. Below is the pictorial representation: + +.. image:: img/boot_diagram_k3_current.svg + :alt: Boot flow diagram + +- Here TIFS acts as master and provides all the critical services. R5/A53 + requests TIFS to get these services done as shown in the above diagram. + +Sources: +-------- + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_boot_sources + :end-before: .. k3_rst_include_end_boot_sources + +Build procedure: +---------------- + +0. Setup the environment variables: + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_common_env_vars_desc + :end-before: .. k3_rst_include_end_common_env_vars_desc + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_board_env_vars_desc + :end-before: .. k3_rst_include_end_board_env_vars_desc + +Set the variables corresponding to this platform: + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_common_env_vars_defn + :end-before: .. k3_rst_include_end_common_env_vars_defn + +.. code-block:: bash + + $ export UBOOT_CFG_CORTEXR=j722s_evm_r5_defconfig + $ export UBOOT_CFG_CORTEXA=j722s_evm_a53_defconfig + $ export TFA_BOARD=lite + $ export OPTEE_PLATFORM=k3-am62x + $ export OPTEE_EXTRA_ARGS="CFG_WITH_SOFTWARE_PRNG=y" + +.. j722s_evm_rst_include_start_build_steps + +1. Trusted Firmware-A: + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_build_steps_tfa + :end-before: .. k3_rst_include_end_build_steps_tfa + + +2. OP-TEE: + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_build_steps_optee + :end-before: .. k3_rst_include_end_build_steps_optee + +3. U-Boot: + +* 3.1 R5: + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_build_steps_spl_r5 + :end-before: .. k3_rst_include_end_build_steps_spl_r5 + +* 3.2 A53: + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_build_steps_uboot + :end-before: .. k3_rst_include_end_build_steps_uboot +.. j722s_evm_rst_include_end_build_steps + +Target Images +-------------- + +In order to boot we need tiboot3.bin, tispl.bin and u-boot.img. Each SoC +variant (HS-FS, HS-SE) requires a different source for these files. + + - HS-FS + + * tiboot3-j722s-hs-fs-evm.bin from step 3.1 + * tispl.bin, u-boot.img from step 3.2 + + - HS-SE + + * tiboot3-j722s-hs-evm.bin from step 3.1 + * tispl.bin, u-boot.img from step 3.2 + +Image formats: +-------------- + +- tiboot3.bin + +.. image:: img/multi_cert_tiboot3.bin.svg + :alt: tiboot3.bin image format + +- tispl.bin + +.. image:: img/dm_tispl.bin.svg + :alt: tispl.bin image format + +A53 SPL DDR Memory Layout +------------------------- + +.. j722s_evm_rst_include_start_ddr_mem_layout + +This provides an overview memory usage in A53 SPL stage. + +.. list-table:: + :widths: 16 16 16 + :header-rows: 1 + + * - Region + - Start Address + - End Address + + * - EMPTY + - 0x80000000 + - 0x80080000 + + * - TEXT BASE + - 0x80080000 + - 0x800d8000 + + * - EMPTY + - 0x800d8000 + - 0x80477660 + + * - STACK + - 0x80477660 + - 0x80477e60 + + * - GD + - 0x80477e60 + - 0x80478000 + + * - MALLOC + - 0x80478000 + - 0x80480000 + + * - EMPTY + - 0x80480000 + - 0x80a00000 + + * - BSS + - 0x80a00000 + - 0x80a80000 + + * - BLOBS + - 0x80a80000 + - 0x80d00400 + + * - EMPTY + - 0x80d00400 + - 0x81000000 +.. j722s_evm_rst_include_end_ddr_mem_layout + +Switch Setting for Boot Mode +---------------------------- + +Boot Mode pins provide means to select the boot mode and options before the +device is powered up. After every POR, they are the main source to populate +the Boot Parameter Tables. + +The following table shows some common boot modes used on J722S-EVM +platform. More details can be found in the Technical Reference Manual: +https://www.ti.com/lit/zip/sprujb3 under the `Boot Mode Pins` section. + +.. note:: + + This device is very new. Currently only UART boot is available while + we continue to add support for the other bootmodes. + +.. list-table:: Boot Modes + :widths: 16 16 16 + :header-rows: 1 + + * - Switch Label + - SW3: 12345678 + - SW4: 12345678 + + * - SD + - 11000010 + - 01000000 + + * - OSPI + - 11001110 + - 00000000 + + * - EMMC + - 11010010 + - 00000000 + + * - UART + - 11011100 + - 00000000 + + * - USB DFU + - 11001010 + - 00000000 + +For SW2 and SW1, the switch state in the "ON" position = 1. + +Debugging U-Boot +---------------- + +See :ref:`Common Debugging environment - OpenOCD<k3_rst_refer_openocd>`: for +detailed setup information. + +.. warning:: + + **OpenOCD support after**: v0.12.0 + + While support for the entire K3 generation including the am62xxx + extended family was added before v0.12.0, the tcl scripts for the + am62px have been accepted and will be available in the next release of + OpenOCD. It may be necessary to build OpenOCD from source depending on + the version your distribution has packaged. + +.. include:: k3.rst + :start-after: .. k3_rst_include_start_openocd_connect_XDS110 + :end-before: .. k3_rst_include_end_openocd_connect_XDS110 + +To start OpenOCD and connect to the board + +.. code-block:: bash + + openocd -f board/ti_j722sevm.cfg diff --git a/doc/board/ti/j784s4_evm.rst b/doc/board/ti/j784s4_evm.rst index 5c4bd2c927d..2ffec3dbd3b 100644 --- a/doc/board/ti/j784s4_evm.rst +++ b/doc/board/ti/j784s4_evm.rst @@ -153,6 +153,31 @@ Image formats .. image:: img/dm_tispl.bin.svg :alt: tispl.bin format +OSPI: +----- +ROM supports booting from OSPI from offset 0x0. + +Flashing images to OSPI NOR: + +Below commands can be used to download tiboot3.bin, tispl.bin, and +u-boot.img over tftp and then flash those to OSPI at their respective +addresses. + +.. prompt:: bash => + + sf probe + tftp ${loadaddr} tiboot3.bin + sf update $loadaddr 0x0 $filesize + tftp ${loadaddr} tispl.bin + sf update $loadaddr 0x80000 $filesize + tftp ${loadaddr} u-boot.img + sf update $loadaddr 0x280000 $filesize + +Flash layout for OSPI NOR: + +.. image:: img/ospi_sysfw3.svg + :alt: OSPI NOR flash partition layout + R5 Memory Map ------------- @@ -262,6 +287,9 @@ section. * - SD - 0000 + * - OSPI + - 0010 + * - EMMC - 0110 diff --git a/doc/board/ti/k3.rst b/doc/board/ti/k3.rst index 88821a15e4c..67b066a07d3 100644 --- a/doc/board/ti/k3.rst +++ b/doc/board/ti/k3.rst @@ -42,6 +42,7 @@ K3 Based SoCs ../beagle/j721e_beagleboneai64 j721e_evm j721s2_evm + j722s_evm j784s4_evm Boot Flow Overview @@ -51,14 +52,14 @@ For all K3 SoCs the first core started will be inside the Security Management Subsystem (SMS) which will secure the device and start a core in the wakeup domain to run the ROM code. ROM will then initialize the boot media needed to load the binaries packaged inside `tiboot3.bin`, -including a 32bit U-Boot SPL, (called the wakup SPL) that ROM will jump +including a 32bit U-Boot SPL, (called the wakeup SPL) that ROM will jump to after it has finished loading everything into internal SRAM. .. image:: img/boot_flow_01.svg :alt: Boot flow up to wakeup domain SPL The wakeup SPL, running on a wakeup domain core, will initialize DDR and -any peripherals needed load the larger binaries inside the `tispl.bin` +any peripherals needed to load the larger binaries inside the `tispl.bin` into DDR. Once loaded the wakeup SPL will start one of the 'big' application cores inside the main domain to initialize the main domain, starting with Trusted Firmware-A (TF-A), before moving on to start @@ -94,7 +95,7 @@ essentially 4 unique but very similar flows: * Combined binary with a split firmware: (eg: AM62) For devices that utilize the split binary approach, ROM is not capable -of loading the firmware into the SoC requiring the wakeup domain's +of loading the firmware into the SoC, requiring the wakeup domain's U-Boot SPL to load the firmware. Devices with a split firmware will have two firmwares loaded into the @@ -114,8 +115,8 @@ K3 HS-SE (High Security - Security Enforced) devices enforce an authenticated boot flow for secure boot. HS-FS (High Security - Field Securable) is the state of a K3 device before it has been eFused with customer security keys. In the HS-FS state the authentication still can -function as in HS-SE but as there are no customer keys to verify the -signatures against the authentication will pass for certificates signed +function as in HS-SE, but as there are no customer keys to verify the +signatures against, the authentication will pass for certificates signed with any key. Chain of trust diff --git a/doc/board/wexler/index.rst b/doc/board/wexler/index.rst new file mode 100644 index 00000000000..308aad79e19 --- /dev/null +++ b/doc/board/wexler/index.rst @@ -0,0 +1,9 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +WEXLER +====== + +.. toctree:: + :maxdepth: 2 + + qc750 diff --git a/doc/board/wexler/qc750.rst b/doc/board/wexler/qc750.rst new file mode 100644 index 00000000000..b61e40176b0 --- /dev/null +++ b/doc/board/wexler/qc750.rst @@ -0,0 +1,125 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +U-Boot for the WEXLER QC750 tablet +================================== + +``DISCLAMER!`` Moving your WEXLER QC750 to use U-Boot assumes replacement +of the vendor bootloader. Vendor Android firmwares will no longer be able +to run on the device. This replacement IS reversible. + +Quick Start +----------- + +- Build U-Boot +- Process U-Boot +- Flashing U-Boot into the eMMC +- Boot +- Self Upgrading + +Build U-Boot +------------ + +.. code-block:: bash + + $ export CROSS_COMPILE=arm-linux-gnueabi- + $ make qc750_defconfig + $ make + +After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` +image, ready for further processing. + +Process U-Boot +-------------- + +``DISCLAMER!`` All questions related to the re-crypt work should be asked +in re-crypt repo issues. NOT HERE! + +re-crypt is a tool that processes the ``u-boot-dtb-tegra.bin`` binary into form +usable by device. This process is required only on the first installation or +to recover the device in case of a failed update. + +Permanent installation can be performed either by using the tegrarcm or by +pre-loading just built U-Boot into RAM. + +Processing for the NV3P protocol +******************************** + +.. code-block:: bash + + $ git clone https://gitlab.com/grate-driver/re-crypt.git + $ cd re-crypt # place your u-boot-dtb-tegra.bin here + $ ./re-crypt.py --dev qc750 + +The script will produce a ``repart-block.bin`` ready to flash. + +Processing for pre-loaded U-Boot +******************************** + +The procedure is the same, but the ``--split`` argument is used with the +``re-crypt.py``. The script will produce ``bct.img`` and ``ebt.img`` ready +to flash. + +Flashing U-Boot into the eMMC +----------------------------- + +``DISCLAMER!`` All questions related to tegrarcm should be asked in the proper +place. NOT HERE! Flashing U-Boot will erase all eMMC, so make a backup before! + +Permanent installation can be performed either by using the nv3p protocol or by +pre-loading just built U-Boot into RAM. + +Flashing with the NV3P protocol +******************************* + +Nv3p is a custom Nvidia protocol used to recover bricked devices. Devices can +enter it either by using ``wheelie`` with the correct ``blob.bin`` file or by +pre-loading vendor bootloader with the Fusée Gelée. + +With nv3p, ``repart-block.bin`` is used. It contains BCT and a bootloader in +encrypted state in form, which can just be written RAW at the start of eMMC. + +.. code-block:: bash + + $ wheelie --bct qc750.bct --bl bootloader.bin + $ nvflash --resume --rawdevicewrite 0 1024 repart-block.bin + +When flashing is done, reboot the device. + +Flashing with a pre-loaded U-Boot +********************************* + +U-Boot pre-loaded into RAM acts the same as when it was booted "cold". Currently +U-Boot supports bootmenu entry fastboot, which allows to write a processed copy +of U-Boot permanently into eMMC. + +While pre-loading U-Boot, hold the ``volume down`` button which will trigger +the bootmenu. There, select ``fastboot`` using the volume and power buttons. +After, on host PC, do: + +.. code-block:: bash + + $ fastboot flash 0.1 bct.img + $ fastboot flash 0.2 ebt.img + $ fastboot reboot + +Device will reboot. + +Boot +---- + +To boot Linux, U-Boot will look for an ``extlinux.conf`` on MicroSD and then on +eMMC. Additionally, if the Volume Down button is pressed while booting, the +device will enter bootmenu. Bootmenu contains entries to mount MicroSD and eMMC +as mass storage, fastboot, reboot, reboot RCM, poweroff, enter U-Boot console +and update bootloader (check the next chapter). + +Flashing ``repart-block.bin`` eliminates vendor restrictions on eMMC and allows +the user to use/partition it in any way the user desires. + +Self Upgrading +-------------- + +Place your ``u-boot-dtb-tegra.bin`` on the first partition of the MicroSD card +and insert it into the tablet. Enter bootmenu, choose update the bootloader +option with the Power button and U-Boot should update itself. Once the process +is completed, U-Boot will ask to press any button to reboot. diff --git a/doc/build/gcc.rst b/doc/build/gcc.rst index 3c646577272..d8fcfdc4bf2 100644 --- a/doc/build/gcc.rst +++ b/doc/build/gcc.rst @@ -118,6 +118,34 @@ Assuming cross compiling on Debian for ARMv8 this would be CROSS_COMPILE=aarch64-linux-gnu- make +Out-of-tree building +~~~~~~~~~~~~~~~~~~~~ + +By default building is performed locally and the objects are saved in the source +directory. To build out-out-tree use one of the two methods below: + +Add O= parameter to the make command line: + +.. code-block:: bash + + make O=/tmp/build distclean + make O=/tmp/build NAME_defconfig + make O=/tmp/build + +Use environment variable KBUILD_OUTPUT: + +.. code-block:: bash + + export KBUILD_OUTPUT=/tmp/build + make distclean + make NAME_defconfig + make + +.. note:: + + The command line "O=" parameter overrides the KBUILD_OUTPUT environment + variable. + Build parameters ~~~~~~~~~~~~~~~~ diff --git a/doc/conf.py b/doc/conf.py index c9138a5a5d4..ced3a6723fc 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -21,6 +21,14 @@ from subprocess import check_output # Get Sphinx version major, minor, patch = sphinx.version_info[:3] +# Set canonical URL from the Read the Docs Domain +html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "") + +# Tell Jinja2 templates the build is running on Read the Docs +if os.environ.get("READTHEDOCS", "") == "True": + html_context = { + 'READTHEDOCS' : True, + } # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the diff --git a/doc/develop/board_best_practices.rst b/doc/develop/board_best_practices.rst index f44401eab7d..09632c80ce7 100644 --- a/doc/develop/board_best_practices.rst +++ b/doc/develop/board_best_practices.rst @@ -7,7 +7,7 @@ In addition to the regular best practices such as using :doc:`checkpatch` and following the :doc:`docstyle` and the :doc:`codingstyle` there are some things which are specific to creating a new board port. -* Implement :doc:`bootstd` to ensure that most operating systems will be +* Implement :doc:`bootstd/index` to ensure that most operating systems will be supported by the platform. * The platform defconfig file must be generated via `make savedefconfig`. diff --git a/doc/develop/bootstd/android.rst b/doc/develop/bootstd/android.rst new file mode 100644 index 00000000000..41701d5bdff --- /dev/null +++ b/doc/develop/bootstd/android.rst @@ -0,0 +1,39 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +Android Bootmeth +================ + +Android provides a mechanism for booting its Operating System from eMMC storage, +described on `source.android.com <https://source.android.com/docs/core/architecture/bootloader>`_. + +Android has strong requirements about partitioning layout which are described +`here <https://source.android.com/docs/core/architecture/partitions>`_. +Because multiple partitions are required, this bootmeth only operates on whole mmc +devices which have a valid partition table. + +When invoked on a bootdev, this bootmeth searches for the ``misc`` partition in order +to read the *boot mode*, which can be one of following: + +Normal + Boot the regular Android Operating System. + +Recovery + Boot a slimmed down Recovery Operating System. Can be used + to factory reset the device or to apply system updates. + +Bootloader + Stay in U-Boot and wait for fastboot commands from the host. + +After the *boot mode* has been determined, this bootmeth will read the *slot suffix* +from the ``misc`` partition. For details about slots, see +`the AOSP documentation <https://source.android.com/docs/core/ota/ab#slots>`_. + +When both the *boot mode* and the *slot suffix* are known, the bootflow is created. + +When the bootflow is booted, the bootmeth reads the kernel, the boot arguments and +the vendor ramdisk. +It then boots the kernel using bootm. The relevant devicetree blob is extracted +from the ``boot`` partition based on the ``adtb_idx`` environment variable. + +The compatible string "u-boot,android" is used for the driver. It is present +if `CONFIG_BOOTMETH_ANDROID` is enabled. diff --git a/doc/develop/bootstd/cros.rst b/doc/develop/bootstd/cros.rst new file mode 100644 index 00000000000..85af10588c1 --- /dev/null +++ b/doc/develop/bootstd/cros.rst @@ -0,0 +1,33 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +ChromiumOS Bootmeth +=================== + +ChromiumOS provides a mechanism for booting its Operating System from a block +device, described +`here <https://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot/>`_. + +U-Boot includes support for reading the associated data structures from the +device and identifying a bootable ChromiumOS image. This structure includes the +kernel itself, boot arguments (kernel command line), as well as the x86 setup +block (for x86 only). + +When invoked on a bootdev, this bootmeth searches for kernel partitions with +the appropriate GUID (Globally Unique Identifier). When found, the information +is loaded and a bootflow is created. + +When the bootflow is booted, the bootmeth reads the kernel and boot arguments. +It then boots the kernel using zboot (on x86) or bootm (on ARM). The boot +arguments are adjusted to replace `%U` with the UUID of the selected kernel +partition. This results in the correct root disk being used, which is the next +partition after the kernel partition. + +For ARM, a :doc:`/usage/fit/index` is used. The `CONFIG_FIT_BEST_MATCH` option +must be enabled for U-Boot to select the correct devicetree to boot with. + +Note that a ChromiumOS image typically has two copies of the Operating System, +each with its own kernel and root disk. There is no initial ramdisk (initrd). +This means that this bootmeth typically locates two separate images. + +The compatible string "u-boot,cros" is used for the driver. It is present +if `CONFIG_BOOTMETH_CROS` is enabled. diff --git a/doc/develop/bootstd/extlinux.rst b/doc/develop/bootstd/extlinux.rst new file mode 100644 index 00000000000..bf27dc57aaa --- /dev/null +++ b/doc/develop/bootstd/extlinux.rst @@ -0,0 +1,29 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +Extlinux Bootmeth +================= + +`Extlinux <https://uapi-group.org/specifications/specs/boot_loader_specification>`_ +(sometimes called syslinux) allows U-Boot to provide a menu of available +operating systems from which the user can choose. + +U-Boot includes a parser for the `extlinux.conf` file. It consists primarily of +a list of named operating systems along with the kernel, initial ramdisk and +other settings. The file is stored in the `extlinux/` subdirectory, possibly +under the `boot/` subdirectory. This list of prefixes (``{"/", "/boot"}`` by +default) can be selected with the `filename-prefixes` property in the bootstd +device. + +Note that the :doc:`pxelinux` uses the same file format, but in a +network context. + +When invoked on a bootdev, this bootmeth searches for the file and creates a +bootflow if found. + +When the bootflow is booted, the bootmeth calls ``pxe_setup_ctx()`` to set up +the context, then ``pxe_process()`` to process the file. Depending on the +contents, this may boot an operating system or provide a list of options to +the user, perhaps with a timeout. + +The compatible string "u-boot,extlinux" is used for the driver. It is present +if `CONFIG_BOOTMETH_EXTLINUX` is enabled. diff --git a/doc/develop/bootstd/index.rst b/doc/develop/bootstd/index.rst new file mode 100644 index 00000000000..4c4e26ccdb7 --- /dev/null +++ b/doc/develop/bootstd/index.rst @@ -0,0 +1,16 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +Standard Boot +============= + +.. toctree:: + :maxdepth: 2 + + overview + extlinux + pxelinux + qfw + android + cros + script + sandbox diff --git a/doc/develop/bootstd.rst b/doc/develop/bootstd/overview.rst index a07a72581e7..c6f003851b2 100644 --- a/doc/develop/bootstd.rst +++ b/doc/develop/bootstd/overview.rst @@ -1,7 +1,7 @@ .. SPDX-License-Identifier: GPL-2.0+: -U-Boot Standard Boot -==================== +Standard Boot Overview +====================== Introduction ------------ @@ -17,7 +17,7 @@ introduces the following concepts: For Linux, the distro (Linux distribution, e.g. Debian, Fedora) is responsible for creating a bootflow for each kernel combination that it wants to offer. These bootflows are stored on media so they can be discovered by U-Boot. This -feature is typically called `distro boot` (see :doc:`distro`) because it is +feature is typically called `distro boot` (see :doc:`../distro`) because it is a way for distributions to boot on any hardware. Traditionally U-Boot has relied on scripts to implement this feature. See @@ -32,14 +32,14 @@ way to boot with U-Boot. The feature is extensible to different Operating Systems (such as Chromium OS) and devices (beyond just block and network devices). It supports EFI boot and EFI bootmgr too. -Finally, standard boot supports the operation of :doc:`vbe`. +Finally, standard boot supports the operation of :doc:`../vbe`. Bootflow -------- A bootflow is a file that describes how to boot a distro. Conceptually there can be different formats for that file but at present U-Boot only supports the -BootLoaderSpec_ format. which looks something like this:: +BootLoaderSpec_ format which looks something like this:: menu autoboot Welcome to Fedora-Workstation-armhfp-31-1.9. Automatic boot in # second{,s}. Press a key for options. menu title Fedora-Workstation-armhfp-31-1.9 Boot Options. @@ -52,7 +52,7 @@ BootLoaderSpec_ format. which looks something like this:: initrd /initramfs-5.3.7-301.fc31.armv7hl.img As you can see it specifies a kernel, a ramdisk (initrd) and a directory from -which to load devicetree files. The details are described in distro_bootcmd_. +which to load Device Tree files. The details are described in distro_bootcmd_. The bootflow is provided by the distro. It is not part of U-Boot. U-Boot's job is simply to interpret the file and carry out the instructions. This allows @@ -85,7 +85,7 @@ Bootmeth -------- Once the list of filesystems is provided, how does U-Boot find the bootflow -files in these filesystems. That is the job of bootmeth. Each boot method has +files in these filesystems? That is the job of bootmeth. Each boot method has its own way of doing this. For example, the distro bootmeth simply looks through the provided filesystem @@ -95,6 +95,7 @@ bootflows. Note: it is possible to have a bootmeth that uses a partition or a whole device directly, but it is more common to use a filesystem. +For example, the Android bootmeth uses a whole device. Note that some bootmeths are 'global', meaning that they select the bootdev themselves. Examples include VBE and EFI boot manager. In this case, they @@ -106,7 +107,7 @@ they scan a lot of devices. Boot process ------------ -U-Boot tries to use the 'lazy init' approach whereever possible and distro boot +U-Boot tries to use the 'lazy init' approach wherever possible and distro boot is no exception. The algorithm is:: while (get next bootdev) @@ -174,13 +175,13 @@ the same way as setting this variable. Bootdev uclass -------------- -The bootdev uclass provides an simple API call to obtain a bootflows from a +The bootdev uclass provides a simple API call to obtain a bootflow from a device:: int bootdev_get_bootflow(struct udevice *dev, struct bootflow_iter *iter, struct bootflow *bflow); -This takes a iterator which indicates the bootdev, partition and bootmeth to +This takes an iterator which indicates the bootdev, partition and bootmeth to use. It returns a bootflow. This is the core of the bootdev implementation. The bootdev drivers that implement this differ depending on the media they are reading from, but each is responsible for returning a valid bootflow if @@ -188,7 +189,7 @@ available. A helper called `bootdev_find_in_blk()` makes it fairly easy to implement this function for each media device uclass, in a few lines of code. For many types -ot bootdevs, the `get_bootflow` member can be NULL, indicating that the default +of bootdevs, the `get_bootflow` member can be NULL, indicating that the default handler is used. This is called `default_get_bootflow()` and it only works with block devices. @@ -196,7 +197,7 @@ block devices. Bootdev drivers --------------- -A bootdev driver is typically fairly simple. Here is one for mmc:: +A bootdev driver is typically fairly simple. Here is one for MMC:: static int mmc_bootdev_bind(struct udevice *dev) { @@ -277,6 +278,9 @@ script_offset_f script_size_f Size of the script to load, e.g. 0x2000 +vendor_boot_comp_addr_r + Address to which to load the vendor_boot Android image, e.g. 0xe0000000 + Some variables are set by script bootmeth: devtype @@ -328,7 +332,7 @@ or:: Here, `eth_bootdev` is the name of the Ethernet bootdev driver and `dev` -is the ethernet device. This function is safe to call even if standard boot is +is the Ethernet device. This function is safe to call even if standard boot is not enabled, since it does nothing in that case. It can be added to all uclasses which implement suitable media. @@ -340,7 +344,7 @@ Standard boot requires a single instance of the bootstd device to make things work. This includes global information about the state of standard boot. See `struct bootstd_priv` for this structure, accessed with `bootstd_get_priv()`. -Within the devicetree, if you add bootmeth devices, they should be children of +Within the Device Tree, if you add bootmeth devices, they should be children of the bootstd device. See `arch/sandbox/dts/test.dts` for an example of this. @@ -349,12 +353,12 @@ the bootstd device. See `arch/sandbox/dts/test.dts` for an example of this. Automatic devices ----------------- -It is possible to define all the required devices in the devicetree manually, +It is possible to define all the required devices in the Device Tree manually, but it is not necessary. The bootstd uclass includes a `dm_scan_other()` function which creates the bootstd device if not found. If no bootmeth devices are found at all, it creates one for each available bootmeth driver. -If your devicetree has any bootmeth device it must have all of them that you +If your Device Tree has any bootmeth device it must have all of them that you want to use, since no bootmeth devices will be created automatically in that case. @@ -363,8 +367,8 @@ Using devicetree ---------------- If a bootdev is complicated or needs configuration information, it can be -added to the devicetree as a child of the media device. For example, imagine a -bootdev which reads a bootflow from SPI flash. The devicetree fragment might +added to the Device Tree as a child of the media device. For example, imagine a +bootdev which reads a bootflow from SPI flash. The Device Tree fragment might look like this:: spi@0 { @@ -398,7 +402,7 @@ Standard boot is enabled with `CONFIG_BOOTSTD`. Each bootmeth has its own CONFIG option also. For example, `CONFIG_BOOTMETH_EXTLINUX` enables support for booting from a disk using an `extlinux.conf` file. -To enable all feature sof standard boot, use `CONFIG_BOOTSTD_FULL`. This +To enable all features of standard boot, use `CONFIG_BOOTSTD_FULL`. This includes the full set of commands, more error messages when things go wrong and bootmeth ordering with the bootmeths environment variable. @@ -406,19 +410,39 @@ You should probably also enable `CONFIG_BOOTSTD_DEFAULTS`, which provides several filesystem and network features (if `CONFIG_NET` is enabled) so that a good selection of boot options is available. +Some devicetree properties are supported in the bootstd node when +`CONFIG_BOOTSTD_FULL` is enabled: + + filename-prefixes + List of prefixes to use when searching for files on block devices. This + defaults to {"/", "/boot/"} if not provided. + + bootdev-order + Lists the bootdev ordering to use. Note that the deprecated + `boot_targets` environment variable overrides this, if present. + + theme (subnode) + Sets the theme to use for menus. See :doc:`/develop/expo`. Available bootmeth drivers -------------------------- -Bootmeth drivers are provided for: +Bootmeth drivers are provided for booting from various media: - - extlinux / syslinux boot from a disk - - extlinux boot from a network (PXE) - - U-Boot scripts from disk, network or SPI flash + - :doc:`Android <android>` bootflow (boot image v4) + - :doc:`ChromiumOS <cros>` ChromiumOS boot from a disk - EFI boot using bootefi from disk - - VBE - EFI boot using boot manager + - :doc:`extlinux / syslinux <extlinux>` boot from a storage device + - :doc:`extlinux / syslinux <extlinux>` boot from a network (PXE) + - :doc:`sandbox <sandbox>` used only for testing + - :doc:`U-Boot scripts <script>` from disk, network or SPI flash + - :doc:`QFW <qfw>`: QEMU firmware interface + - :doc:`VBE </develop/vbe>`: Verified Boot for Embedded +Each driver is controlled by a Kconfig option. If no bootmeth driver is +selected by a compatible string in the devicetree, all available bootmeth +drivers are bound automatically. Command interface ----------------- @@ -427,16 +451,16 @@ Three commands are available: `bootdev` Allows listing of available bootdevs, selecting a particular one and - getting information about it. See :doc:`../usage/cmd/bootdev` + getting information about it. See :doc:`/usage/cmd/bootdev` `bootflow` Allows scanning one or more bootdevs for bootflows, listing available bootflows, selecting one, obtaining information about it and booting it. - See :doc:`../usage/cmd/bootflow` + See :doc:`/usage/cmd/bootflow` `bootmeth` Allow listing of available bootmethds and setting the order in which they - are tried. See :doc:`../usage/cmd/bootmeth` + are tried. See :doc:`/usage/cmd/bootmeth` .. _BootflowStates: @@ -492,9 +516,9 @@ Theory of operation This describes how standard boot progresses through to booting an operating system. -To start. all the necessary devices must be bound, including bootstd, which +To start, all the necessary devices must be bound, including bootstd, which provides the top-level `struct bootstd_priv` containing optional configuration -information. The bootstd device is also holds the various lists used while +information. The bootstd device also holds the various lists used while scanning. This step is normally handled automatically by driver model, as described in `Automatic Devices`_. @@ -504,7 +528,7 @@ those bootdevs. So, all up, we need a single bootstd device, one or more bootdev devices and one or more bootmeth devices. Once these are ready, typically a `bootflow scan` command is issued. This kicks -of the iteration process, which involves hunting for bootdevs and looking +off the iteration process, which involves hunting for bootdevs and looking through the bootdevs and their partitions one by one to find bootflows. Iteration is kicked off using `bootflow_scan_first()`. @@ -526,7 +550,7 @@ Then the iterator is set up to according to the parameters given: - If `label` indicates a numeric bootdev number (e.g. "2") then `BOOTFLOW_METHF_SINGLE_DEV` is set. In this case, moving to the next bootdev - simple stops, since there is only one. No hunters are used. + simply stops, since there is only one. No hunters are used. - If `label` indicates a particular media device (e.g. "mmc1") then `BOOTFLOWIF_SINGLE_MEDIA` is set. In this case, moving to the next bootdev processes just the children of the media device. Hunters are used, in this @@ -554,7 +578,7 @@ bootdev and disturb the original ordering. Next, the ordering of bootmeths is determined, by `bootmeth_setup_iter_order()`. By default the ordering is again by sequence number, i.e. the `/aliases` node, -or failing that the order in the devicetree. But the `bootmeth order` command +or failing that the order in the Device Tree. But the `bootmeth order` command or `bootmeths` environment variable can be used to set up an ordering. If that has been done, the ordering is in `struct bootstd_priv`, so that ordering is simply copied into the iterator. Either way, the `method_order` array it set up, @@ -652,12 +676,12 @@ valid bootflow is found early on. With `bootflow scan -b`, that causes the bootflow to be immediately booted. Assuming it is successful, the iteration never completes. -Also note that the iterator hold the **current** combination being considered. +Also note that the iterator holds the **current** combination being considered. So when `iter_incr()` is called, it increments to the next one and returns it, the new **current** combination. Note also the `err` field in `struct bootflow_iter`. This is normally 0 and has -thus has no effect on `iter_inc()`. But if it is non-zero, signalling an error, +thus no effect on `iter_inc()`. But if it is non-zero, signalling an error, it indicates to the iterator what it should do when called. It can force moving to the next partition, or bootdev, for example. The special values `BF_NO_MORE_PARTS` and `BF_NO_MORE_DEVICES` handle this. When `iter_incr` sees @@ -675,7 +699,7 @@ So what happens inside of `bootflow_check()`? It simply calls the uclass method `bootdev_get_bootflow()` to ask the bootdev to return a bootflow. It passes the iterator to the bootdev method, so that function knows what we are talking about. At first, the bootflow is set up in the state `BOOTFLOWST_BASE`, -with just the `method` and `dev` intiialised. But the bootdev may fill in more, +with just the `method` and `dev` initialised. But the bootdev may fill in more, e.g. updating the state, depending on what it finds. For global bootmeths the `bootmeth_get_bootflow()` function is called instead of `bootdev_get_bootflow()`. @@ -733,12 +757,12 @@ bootflow is handled by the bootmeth driver for that bootflow. In the case of extlinux boot, this parses and processes the `extlinux.conf` file that was read. See `extlinux_boot()` for how that works. The processing may involve reading additional files, which is handled by the `read_file()` method, which is -`extlinux_read_file()` in this case. All bootmethds should support reading +`extlinux_read_file()` in this case. All bootmeths should support reading files, since the bootflow is typically only the basic instructions and does not include the operating system itself, ramdisk, device tree, etc. The vast majority of the bootstd code is concerned with iterating through -partitions on bootdevs and using bootmethds to find bootflows. +partitions on bootdevs and using bootmeths to find bootflows. How about bootdevs which are not block devices? They are handled by the same methods as above, but with a different implementation. For example, the bootmeth @@ -786,6 +810,7 @@ To do Some things that need to be done to completely replace the distro-boot scripts: - implement extensions (devicetree overlays with add-on boards) +- implement legacy (boot image v2) android boot flow Other ideas: diff --git a/doc/develop/bootstd/pxelinux.rst b/doc/develop/bootstd/pxelinux.rst new file mode 100644 index 00000000000..c4b7fbb4c9c --- /dev/null +++ b/doc/develop/bootstd/pxelinux.rst @@ -0,0 +1,27 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +PXE Bootmeth +============ + +PXE (Preboot eXecution-Environment) provides a way to boot an operating system +over a network interface. The PXE bootmeth supports PXELINUX and allows U-Boot to +provide a menu of possible Operating Systems from which the user can choose. + +U-Boot includes a parser for the `extlinux.conf` file described +`here <https://uapi-group.org/specifications/specs/boot_loader_specification>`_. +It consists primarily of a list of named operating systems along with the +kernel, initial ramdisk and other settings. The file is retrieved from a network +server using the TFTP protocol. + +When invoked on a bootdev, this bootmeth searches for the file and creates a +bootflow if found. See +`PXELINUX <https://wiki.syslinux.org/wiki/index.php?title=PXELINUX>`_ for +a full description of the search procedure. + +When the bootflow is booted, the bootmeth calls ``pxe_setup_ctx()`` to set up +the context, then ``pxe_process()`` to process the file. Depending on the +contents, this may boot an Operating System or provide a list of options to the +user, perhaps with a timeout. + +The compatible string "u-boot,extlinux-pxe" is used for the driver. It is +present if `CONFIG_BOOTMETH_EXTLINUX_PXE` is enabled. diff --git a/doc/develop/bootstd/qfw.rst b/doc/develop/bootstd/qfw.rst new file mode 100644 index 00000000000..70086ad1817 --- /dev/null +++ b/doc/develop/bootstd/qfw.rst @@ -0,0 +1,20 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +QFW Bootmeth +============ + +`QEMU <hhttps://www.qemu.org/>`_ is a system emulator which is able to boot +Operating Systems. QEMU provides specific support for booting an OS image +provided on the QEMU command line. + +When invoked on a bootdev for UCLASS_QFW, this bootmeth reads the kernel +provided by the QEMU `-kernel` argument, the initial ramdisk provided by +`-initrd` and the boot arguments (command line) provided by `-append` into +memory ready for booting. + +When the bootflow is booted, the bootmeth tries the `booti` command first, then +falls back to the `bootz` command. U-Boot's 'control' devicetree is passed +through to the kernel. + +The compatible string "u-boot,qfw-bootmeth" is used for the driver. It is +present if `CONFIG_QFW` is enabled. diff --git a/doc/develop/bootstd/sandbox.rst b/doc/develop/bootstd/sandbox.rst new file mode 100644 index 00000000000..d501518c39a --- /dev/null +++ b/doc/develop/bootstd/sandbox.rst @@ -0,0 +1,17 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +Sandbox Bootmeth +================ + +The sandbox bootmeth is only used for testing. It does not provide any facility +for booting an OS. While sandbox can do all the processing before the actual +boot, it is not connected in this bootmeth. + +When invoked on a bootdev, this bootmeth pretends to find a bootflow and creates +the associated structure. + +When the bootflow is booted, the bootmeth returns `-ENOTSUPP` indicating that it +is not supported. + +The compatible string "u-boot,sandbox-bootmeth" is used for the driver. It is present +if `CONFIG_BOOTMETH_SANDBOX` is enabled. diff --git a/doc/develop/bootstd/script.rst b/doc/develop/bootstd/script.rst new file mode 100644 index 00000000000..47f3684b86b --- /dev/null +++ b/doc/develop/bootstd/script.rst @@ -0,0 +1,52 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +Script Bootmeth +=============== + +This bootmeth provides a way to locate and run a script on a block or network +device. It can also support SPI flash. + +For a block device the file is read from the selected partition, which must use +a supported filesystem. The subdirectory to search in is defined by the bootstd +list of prefixes (``{"/", "/boot"}`` by default) and can be adjust with the +`filename-prefixes` property in the bootstd device. + +For a network device, the filename is obtained from the `boot_script_dhcp` +environment variable and the file is read using tftp. It must be in the +top-level directory of the tftp server. + +In either case (file or network), the bootmeth searches for the file and creates +a bootflow if found. The bootmeth searches for "boot.scr.uimg" first, then +"boot.scr" if not found. + +For SPI flash, a script is read from flash using the offset provided by the +"script_offset_f" environment variable. + +Some attempt is made to identify the Operating System: so far this only detects +an `Armbian <https://www.armbian.com>`_ +distro. For block devices, if a file called "boot.bmp" exists in the same +directory then it is used as the bootflow logo. + +When the bootflow is booted, the bootmeth sets these environment variables: + + devtype + device type (e.g. "usb", "mmc", "ethernet" or "spi_flash") + + devnum + device number, corresponding to the device 'sequence' number + ``dev_seq(dev)`` + + distro_bootpart + (block devices only) partition number on the device (numbered from 1) + + prefix + prefix used to find the file + + mmc_bootdev + device number (same as `devnum`), set for sunxi mmc devices only + +The script file must be a FIT or a legacy uImage. It is loaded into memory and +executed. + +The compatible string "u-boot,script" is used for the driver. It is present +if `CONFIG_BOOTMETH_SCRIPT` is enabled. diff --git a/doc/develop/codingstyle.rst b/doc/develop/codingstyle.rst index f6248cdcb1e..fa3cd6aec82 100644 --- a/doc/develop/codingstyle.rst +++ b/doc/develop/codingstyle.rst @@ -110,9 +110,8 @@ Include files You should follow this ordering in U-Boot. In all cases, they should be listed in alphabetical order. First comes headers which are located directly in our -top-level include diretory. This excludes the common.h header file which is to -be removed. Second are headers within subdirectories, Finally directory-local -includes should be listed. See this example: +top-level include diretory. Second are headers within subdirectories, Finally +directory-local includes should be listed. See this example: .. code-block:: C @@ -129,9 +128,6 @@ For files that need to be compiled for the host (e.g. tools), you need to use ``#ifndef USE_HOSTCC`` to avoid including U-Boot specific include files. See common/image.c for an example. -If you encounter code which still uses <common.h> a patch to remove that and -replace it with any required include files directly is much appreciated. - If your file uses driver model, include <dm.h> in the C file. Do not include dm.h in a header file. Try to use forward declarations (e.g. ``struct udevice``) instead. diff --git a/doc/develop/cyclic.rst b/doc/develop/cyclic.rst index 67831496a70..893c269099a 100644 --- a/doc/develop/cyclic.rst +++ b/doc/develop/cyclic.rst @@ -19,20 +19,26 @@ Registering a cyclic function To register a cyclic function, use something like this:: - static void cyclic_demo(void *ctx) + struct donkey { + struct cyclic_info cyclic; + void (*say)(const char *s); + }; + + static void cyclic_demo(struct cyclic_info *c) { - /* Just a small dummy delay here */ - udelay(10); + struct donkey *donkey = container_of(c, struct donkey, cyclic); + + donkey->say("Are we there yet?"); } - - int board_init(void) + + int donkey_init(void) { - struct cyclic_info *cyclic; - + struct donkey *donkey; + + /* Initialize donkey ... */ + /* Register demo cyclic function */ - cyclic = cyclic_register(cyclic_demo, 10 * 1000, "cyclic_demo", NULL); - if (!cyclic) - printf("Registering of cyclic_demo failed\n"); + cyclic_register(&donkey->cyclic, cyclic_demo, 10 * 1000, "cyclic_demo"); return 0; } diff --git a/doc/develop/devicetree/control.rst b/doc/develop/devicetree/control.rst index ca4fb0b5b10..211f7e4909c 100644 --- a/doc/develop/devicetree/control.rst +++ b/doc/develop/devicetree/control.rst @@ -96,12 +96,12 @@ sync the `dts/upstream/` subtree from the devicetree-rebasing repo whenever the next branch opens (refer: :doc:`../release_cycle`) with the latest mainline Linux kernel release. To sync the `dts/upstream/` subtree, run:: - ./dts/update-dts-subtree.sh pull <devicetree-rebasing-release-tag> + ./tools/update-subtree.sh pull dts <devicetree-rebasing-release-tag> If required it is also possible to cherry-pick fixes from the devicetree-rebasing repository prior to next sync, usage:: - ./dts/update-dts-subtree.sh pick <devicetree-rebasing-commit-id> + ./tools/update-subtree.sh pick dts <devicetree-rebasing-commit-id> Configuration @@ -116,8 +116,8 @@ However, if `dts/upstream/` hasn't yet received devicetree source file for your newly added board support then one option is that you can add the corresponding devicetree source file as `arch/<arch>/dts/<name>.dts`. To select that add `# CONFIG_OF_UPSTREAM is not set` and set `DEFAULT_DEVICE_TREE=<name>` when -prompted by Kconfig. Another option is that you can use use the "pick" option of -`dts/update-dts-subtree.sh` mentioned above to bring in the commits that you +prompted by Kconfig. Another option is that you can use the "pick" option of +`tools/update-subtree.sh` mentioned above to bring in the commits that you need. This should include your CPU or SoC's devicetree file. On top of that any U-Boot diff --git a/doc/develop/gdb.rst b/doc/develop/gdb.rst new file mode 100644 index 00000000000..4e359c7f226 --- /dev/null +++ b/doc/develop/gdb.rst @@ -0,0 +1,171 @@ +.. SPDX-License-Identifier: GPL-2.0+ +.. Copyright (c) 2024 Alexander Dahl + +Debugging U-Boot with GDB +========================= + +Using a JTAG adapter it is possible to debug a running U-Boot with GDB. +A common way is to connect a debug adapter to the JTAG connector of your +board, run a GDB server, connect GDB to the GDB server, and use GDB as usual. + +Similarly QEMU can provide a GDB server. + +Preparing build +--------------- + +Building U-Boot with with reduced optimization (-Og) and without link time +optimization is recommended for easier debugging:: + + CONFIG_CC_OPTIMIZE_FOR_DEBUG=y + CONFIG_LTO=n + +Otherwise build, install, and run U-Boot as usual. + +Using OpenOCD as GDB server +--------------------------- + +`OpenOCD <https://openocd.org/>`_ is an open source tool supporting hardware +debug probes, and providing a GDB server. It is readily available in major Linux +distributions or you can build it from source. + +Here is example of starting OpenOCD on Debian using a J-Link adapter and a +board with an AT91 SAMA5D2 SoC: + +.. code-block:: console + + $ openocd -f interface/jlink.cfg -f target/at91sama5d2.cfg -c 'adapter speed 4000' + Open On-Chip Debugger 0.12.0 + Licensed under GNU GPL v2 + For bug reports, read + http://openocd.org/doc/doxygen/bugs.html + Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'. + adapter speed: 4000 kHz + + Info : Listening on port 6666 for tcl connections + Info : Listening on port 4444 for telnet connections + Info : J-Link V10 compiled Jan 30 2023 11:28:07 + Info : Hardware version: 10.10 + Info : VTarget = 3.244 V + Info : clock speed 4000 kHz + Info : JTAG tap: at91sama5d2.cpu tap/device found: 0x5ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x5) + Info : at91sama5d2.cpu_a5.0: hardware has 3 breakpoints, 2 watchpoints + Info : at91sama5d2.cpu_a5.0: MPIDR level2 0, cluster 0, core 0, mono core, no SMT + Info : starting gdb server for at91sama5d2.cpu_a5.0 on 3333 + Info : Listening on port 3333 for gdb connections + +Notice that OpenOCD is listening on port 3333 for GDB connections. + +Using QEMU as GDB server +------------------------ + +When running U-Boot on QEMU you can used the '-gdb' parameter to provide a +GDB server: + + qemu-system-riscv64 -M virt -nographic -gdb tcp::3333 -kernel u-boot + +Running a GDB session +---------------------- + +You need a GDB suited for your target. This can be the GDB coming with your +toolchain or *gdb-multiarch* available in your Linux distribution. + +.. prompt:: bash $ + + gdb-multiarch u-boot + +In the above command-line *u-boot* is the U-boot binary in your build +directory. You may need to adjust the path when calling GDB. + +Connect to the GDB server like this: + +.. code-block:: console + + (gdb) target extended-remote :3333 + Remote debugging using :3333 + 0x27fa9ac6 in ?? () + (gdb) + +This is fine for debugging before U-Boot relocates itself. + +For debugging U-Boot after relocation you need to indicate the relocation +address to GDB. You can retrieve the relocation address from the U-Boot shell +with the command *bdinfo*: + +.. code-block:: console + + U-Boot> bdinfo + boot_params = 0x20000100 + DRAM bank = 0x00000000 + -> start = 0x20000000 + -> size = 0x08000000 + flashstart = 0x00000000 + flashsize = 0x00000000 + flashoffset = 0x00000000 + baudrate = 115200 bps + relocaddr = 0x27f7a000 + reloc off = 0x0607a000 + Build = 32-bit + current eth = ethernet@f8008000 + ethaddr = 00:50:c2:31:58:d4 + IP addr = <NULL> + fdt_blob = 0x27b36060 + new_fdt = 0x27b36060 + fdt_size = 0x00003e40 + lmb_dump_all: + memory.cnt = 0x1 / max = 0x10 + memory[0] [0x20000000-0x27ffffff], 0x08000000 bytes flags: 0 + reserved.cnt = 0x1 / max = 0x10 + reserved[0] [0x27b31d00-0x27ffffff], 0x004ce300 bytes flags: 0 + devicetree = separate + arch_number = 0x00000000 + TLB addr = 0x27ff0000 + irq_sp = 0x27b36050 + sp start = 0x27b36040 + Early malloc usage: cd8 / 2000 + +Look out for the line starting with *relocaddr* which has the address +you need, ``0x27f7a000`` in this case. + +On most architectures (not sandbox, x86, Xtensa) the global data pointer is +stored in a fixed register: + +============ ======== +Architecture Register +============ ======== +arc r25 +arm r9 +arm64 x18 +m68k d7 +microblaze r31 +mips k0 +nios2 gp +powerpc r2 +riscv gp +sh r13 +============ ======== + +On these architecture the relocation address cat be determined by +dereferencing the global data pointer stored in register, *r9* in the example: + +.. code-block:: console + + (gdb) p/x (*(struct global_data*)$r9)->relocaddr + $1 = 0x27f7a000 + +In the GDB shell discard the previously loaded symbol file and add it once +again with the relocation address like this: + +.. code-block:: console + + (gdb) symbol-file + Discard symbol table from `/home/adahl/build/u-boot/v2024.04.x/u-boot'? (y or n) y + No symbol file now. + (gdb) add-symbol-file u-boot 0x27f7a000 + add symbol table from file "u-boot" at + .text_addr = 0x27f7a000 + (y or n) y + Reading symbols from u-boot... + (gdb) + +You can now use GDB as usual, setting breakpoints, printing backtraces, +inspecting variables, stepping through the code, etc. diff --git a/doc/develop/index.rst b/doc/develop/index.rst index f82e148b101..c0107a783fc 100644 --- a/doc/develop/index.rst +++ b/doc/develop/index.rst @@ -29,7 +29,7 @@ Implementation directories bloblist - bootstd + bootstd/index ci_testing commands config_binding @@ -60,6 +60,7 @@ Debugging :maxdepth: 1 crash_dumps + gdb trace Packaging diff --git a/doc/develop/qconfig.rst b/doc/develop/qconfig.rst index 8efb1eb2685..123779eab17 100644 --- a/doc/develop/qconfig.rst +++ b/doc/develop/qconfig.rst @@ -85,6 +85,20 @@ example, to find boards which enabled CONFIG_SCSI but not CONFIG_BLK:: 3 matches pg_wcom_seli8_defconfig highbank_defconfig pg_wcom_expu1_defconfig +It is also possible to search for particular values. For example, this finds all +boards with an empty string for `CONFIG_DEFAULT_FDT_FILE`:: + + ./tools/qconfig.py -f DEFAULT_FDT_FILE=\"\" + 1092 matches + ... + +This finds boards which have a value for SYS_MAXARGS other than 64:: + + ./tools/qconfig.py -f ~SYS_MAXARGS=64 + cfg CONFIG_SYS_MAXARGS + 281 matches + ... + Finding implied CONFIGs ----------------------- diff --git a/doc/develop/release_cycle.rst b/doc/develop/release_cycle.rst index b392346eea8..e3c13b93afd 100644 --- a/doc/develop/release_cycle.rst +++ b/doc/develop/release_cycle.rst @@ -51,13 +51,13 @@ Examples:: Current Status -------------- -* U-Boot v2024.04 was released on Tue 02 April 2024. +* U-Boot v2024.07 was released on Mon 01 July 2024. -* The Merge Window for the next release (v2024.07) is **closed**. +* The Merge Window for the next release (v2024.10) is **closed**. -* The next branch is now **open**. +* The next branch is now **closed**. -* Release "v2024.07" is scheduled for 01 July 2024. +* Release "v2024.10" is scheduled for 07 October 2024. Future Releases --------------- @@ -67,27 +67,29 @@ Future Releases For the next scheduled release, release candidates were made on:: -* U-Boot v2024.07-rc1 was released on Mon 22 April 2024. +* U-Boot v2024.10-rc1 was released on Mon 22 July 2024. -* U-Boot v2024.07-rc2 was released on Mon 06 May 2024. +.. * U-Boot v2024.10-rc2 was released on Mon 05 August 2024. -* U-Boot v2024.07-rc3 was released on Mon 20 May 2024. +.. * U-Boot v2024.10-rc3 was released on Mon 19 August 2024. -* U-Boot v2024.07-rc4 was released on Mon 03 June 2024. +.. * U-Boot v2024.10-rc4 was released on Mon 02 September 2024. -* U-Boot v2024.07-rc5 was released on Mon 24 June 2024. +.. * U-Boot v2024.10-rc5 was released on Mon 16 September 2024. + +.. * U-Boot v2024.10-rc6 was released on Mon 30 September 2024. Please note that the following dates are planned only and may be deviated from as needed. -* "v2024.07": end of MW = Mon, Apr 22, 2024; release = Mon, Jul 01, 2024 - * "v2024.10": end of MW = Mon, Jul 22, 2024; release = Mon, Oct 07, 2024 * "v2025.01": end of MW = Mon, Oct 21, 2024; release = Mon, Jan 06, 2025 * "v2025.04": end of MW = Mon, Jan 27, 2025; release = Mon, Apr 07, 2025 +* "v2025.07": end of MW = Mon, Apr 21, 2025; release = Mon, Jul 07, 2025 + Previous Releases ----------------- @@ -95,6 +97,8 @@ Note: these statistics are generated by our fork of `gitdm <https://source.denx.de/u-boot/gitdm>`_, which was originally created by Jonathan Corbet. +* :doc:`statistics/u-boot-stats-v2024.07` which was released on 01 July 2024. + * :doc:`statistics/u-boot-stats-v2024.04` which was released on 02 April 2024. * :doc:`statistics/u-boot-stats-v2024.01` which was released on 08 January 2024. diff --git a/doc/develop/spl.rst b/doc/develop/spl.rst index 0a3e572310a..4bb48e6b7b3 100644 --- a/doc/develop/spl.rst +++ b/doc/develop/spl.rst @@ -121,6 +121,8 @@ Use `spl_phase()` to find the current U-Boot phase, e.g. `PHASE_SPL`. You can also find the previous and next phase and get the phase name. +.. _fdtgrep_filter: + Device tree ----------- The U-Boot device tree is filtered by the fdtgrep tools during the build diff --git a/doc/develop/statistics/u-boot-stats-v2024.07.rst b/doc/develop/statistics/u-boot-stats-v2024.07.rst new file mode 100644 index 00000000000..b437e926659 --- /dev/null +++ b/doc/develop/statistics/u-boot-stats-v2024.07.rst @@ -0,0 +1,890 @@ +:orphan: + +Release Statistics for U-Boot v2024.07 +====================================== + +* Processed 1624 changesets from 191 developers + +* 28 employers found + +* A total of 2308875 lines added, 242831 removed (delta 2066044) + +.. table:: Developers with the most changesets + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + Tom Rini 324 (20.0%) + Jonas Karlman 155 (9.5%) + Caleb Connolly 98 (6.0%) + Heinrich Schuchardt 84 (5.2%) + Quentin Schulz 59 (3.6%) + Marek Vasut 52 (3.2%) + Simon Glass 44 (2.7%) + Patrice Chotard 32 (2.0%) + Sumit Garg 31 (1.9%) + Svyatoslav Ryhel 31 (1.9%) + Michal Simek 26 (1.6%) + Ilias Apalodimas 23 (1.4%) + Neil Armstrong 23 (1.4%) + Jonathan Humphreys 22 (1.4%) + Andrew Davis 18 (1.1%) + Marek Behún 18 (1.1%) + Jagan Teki 17 (1.0%) + MD Danish Anwar 15 (0.9%) + Kongyang Liu 15 (0.9%) + Bryan Brattlof 14 (0.9%) + Janne Grunau 14 (0.9%) + Christophe Leroy 13 (0.8%) + Tim Harvey 13 (0.8%) + Apurva Nandan 12 (0.7%) + Wadim Egorov 11 (0.7%) + Andre Przywara 11 (0.7%) + Peng Fan 11 (0.7%) + Adam Ford 10 (0.6%) + Sam Protsenko 10 (0.6%) + Roger Quadros 10 (0.6%) + Igor Opaniuk 9 (0.6%) + Robert Marko 9 (0.6%) + Jonas Schwöbel 9 (0.6%) + Yang Xiwen 9 (0.6%) + Eugene Uriev 9 (0.6%) + Chris Morgan 8 (0.5%) + Judith Mendez 8 (0.5%) + Raymond Mao 8 (0.5%) + Alexander Dahl 7 (0.4%) + Fabio Estevam 7 (0.4%) + Jim Liu 7 (0.4%) + Venkatesh Yadav Abbarapu 7 (0.4%) + Mattijs Korpershoek 6 (0.4%) + Daniel Schultz 6 (0.4%) + Weizhao Ouyang 6 (0.4%) + Ye Li 6 (0.4%) + Conor Dooley 5 (0.3%) + Nishanth Menon 5 (0.3%) + Leo Yu-Chi Liang 5 (0.3%) + Bhargav Raviprakash 5 (0.3%) + Masahisa Kojima 5 (0.3%) + mwleeds@mailtundra.com 5 (0.3%) + Michał Barnaś 5 (0.3%) + Leonard Anderweit 5 (0.3%) + Chen-Yu Tsai 5 (0.3%) + Javier Martinez Canillas 4 (0.2%) + Francesco Dolcini 4 (0.2%) + Felipe Balbi 4 (0.2%) + Aniket Limaye 4 (0.2%) + Christopher Obbard 4 (0.2%) + Mathieu Othacehe 4 (0.2%) + Joao Paulo Goncalves 4 (0.2%) + Sughosh Ganu 4 (0.2%) + Volodymyr Babchuk 4 (0.2%) + Lukasz Majewski 4 (0.2%) + Jacky Chou 4 (0.2%) + Dan Carpenter 4 (0.2%) + Mihai Sain 4 (0.2%) + Arseniy Krasnov 3 (0.2%) + Fiona Klute 3 (0.2%) + Hanyuan Zhao 3 (0.2%) + Greg Malysa 3 (0.2%) + Nathan Barrett-Morrison 3 (0.2%) + Peter Robinson 3 (0.2%) + Lukas Funke 3 (0.2%) + Yannic Moog 3 (0.2%) + Udit Kumar 3 (0.2%) + Michael Walle 3 (0.2%) + Devarsh Thakkar 3 (0.2%) + Christophe Kerello 3 (0.2%) + Viacheslav Bocharov 3 (0.2%) + Emanuele Ghidoli 3 (0.2%) + Hari Nagalla 3 (0.2%) + Love Kumar 3 (0.2%) + Thomas Weißschuh 3 (0.2%) + Weijie Gao 3 (0.2%) + Dragan Simic 2 (0.1%) + Michael Trimarchi 2 (0.1%) + Patrick Delaunay 2 (0.1%) + Tony Dinh 2 (0.1%) + Sam Povilus 2 (0.1%) + H Bell 2 (0.1%) + Thinh Nguyen 2 (0.1%) + Benjamin Hahn 2 (0.1%) + Neha Malcom Francis 2 (0.1%) + Ian Roberts 2 (0.1%) + Sean Anderson 2 (0.1%) + Kamlesh Gurudasani 2 (0.1%) + Stefan Eichenberger 2 (0.1%) + Parth Pancholi 2 (0.1%) + Maksim Kiselev 2 (0.1%) + Christophe Roullier 2 (0.1%) + Hugo Dubois 2 (0.1%) + CASAUBON Jean Michel 2 (0.1%) + Ahelenia Ziemiańska 2 (0.1%) + Yasuharu Shibata 2 (0.1%) + Wan Yee Lau 2 (0.1%) + Vincent Stehlé 2 (0.1%) + Marcel Ziswiler 2 (0.1%) + Maxim Moskalets 2 (0.1%) + Sébastien Szymanski 2 (0.1%) + Tejas Bhumkar 2 (0.1%) + Bhupesh Sharma 2 (0.1%) + Colin McAllister 2 (0.1%) + Andy Yan 2 (0.1%) + Dasnavis Sabiya 2 (0.1%) + Stefan Bosch 2 (0.1%) + Frank Wunderlich 1 (0.1%) + Jiaxun Yang 1 (0.1%) + Ravi Minnikanti 1 (0.1%) + John Watts 1 (0.1%) + Heiko Schocher 1 (0.1%) + Thomas Perl 1 (0.1%) + Kristian Amlie 1 (0.1%) + Heiko Stuebner 1 (0.1%) + Anand Moon 1 (0.1%) + Alexander Sverdlin 1 (0.1%) + Aswath Govindraju 1 (0.1%) + Sam Day 1 (0.1%) + Boon Khai Ng 1 (0.1%) + William Zhang 1 (0.1%) + Jaehoon Chung 1 (0.1%) + Sam Edwards 1 (0.1%) + Linus Walleij 1 (0.1%) + Kishan Dudhatra 1 (0.1%) + Yu Chien Peter Lin 1 (0.1%) + Nitin Yadav 1 (0.1%) + Andrea Calabrese 1 (0.1%) + Lukasz Czechowski 1 (0.1%) + Finley Xiao 1 (0.1%) + Jason Zhu 1 (0.1%) + Maximilian Brune 1 (0.1%) + cmachida 1 (0.1%) + Hector Martin 1 (0.1%) + Anton Bambura 1 (0.1%) + Khem Raj 1 (0.1%) + Jianan Huang 1 (0.1%) + Charles Hardin 1 (0.1%) + Gireesh Hiremath 1 (0.1%) + Alexey Romanov 1 (0.1%) + Eugeniu Rosca 1 (0.1%) + Bruce Suen 1 (0.1%) + Kunihiko Hayashi 1 (0.1%) + Hugo Cornelis 1 (0.1%) + Vitor Soares 1 (0.1%) + Martyn Welch 1 (0.1%) + Manorit Chawdhry 1 (0.1%) + Jixiong Hu 1 (0.1%) + Pierre-Clément Tosi 1 (0.1%) + Hiago De Franco 1 (0.1%) + Petr Zejdl 1 (0.1%) + Łukasz Stelmach 1 (0.1%) + Ben Dooks 1 (0.1%) + Javier Viguera 1 (0.1%) + Josua Mayer 1 (0.1%) + James Hilliard 1 (0.1%) + Marjolaine Amate 1 (0.1%) + Vishal Sagar 1 (0.1%) + Manikanta Guntupalli 1 (0.1%) + Shubhangi Shrikrushna Mahalle 1 (0.1%) + Piotr Wojtaszczyk 1 (0.1%) + Kelly Hung 1 (0.1%) + Leon M. Busch-George 1 (0.1%) + Lukasz Wiecaszek 1 (0.1%) + Jit Loon Lim 1 (0.1%) + William Wu 1 (0.1%) + Ben Wolsieffer 1 (0.1%) + Elon Zhang 1 (0.1%) + Vignesh Raghavendra 1 (0.1%) + Maks Mishin 1 (0.1%) + Bob Wolff 1 (0.1%) + Romain Naour 1 (0.1%) + Dmitry Baryshkov 1 (0.1%) + Vishal Mahaveer 1 (0.1%) + Siddharth Vadapalli 1 (0.1%) + Ivan Orlov 1 (0.1%) + Nam Cao 1 (0.1%) + Massimiliano Minella 1 (0.1%) + BELOUARGA Mohamed 1 (0.1%) + Alexander Gendin 1 (0.1%) + Ivan Mikhaylov 1 (0.1%) + ==================================== ===== + + +.. table:: Developers with the most changed lines + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + Tom Rini 2187616 (86.6%) + Jonas Karlman 69460 (2.8%) + Marek Vasut 53285 (2.1%) + Caleb Connolly 47393 (1.9%) + Apurva Nandan 26241 (1.0%) + Neil Armstrong 23816 (0.9%) + Tim Harvey 10971 (0.4%) + Christophe Leroy 10210 (0.4%) + Wadim Egorov 8248 (0.3%) + Bryan Brattlof 7039 (0.3%) + Tony Dinh 5540 (0.2%) + Marcel Ziswiler 5068 (0.2%) + Nathan Barrett-Morrison 4872 (0.2%) + Adam Ford 4867 (0.2%) + Sumit Garg 4743 (0.2%) + Andrew Davis 4066 (0.2%) + Quentin Schulz 3449 (0.1%) + Peng Fan 3071 (0.1%) + Sam Protsenko 3021 (0.1%) + Jit Loon Lim 2717 (0.1%) + MD Danish Anwar 2686 (0.1%) + Anand Moon 2526 (0.1%) + Svyatoslav Ryhel 2445 (0.1%) + Andy Yan 1978 (0.1%) + Peter Robinson 1907 (0.1%) + Boon Khai Ng 1709 (0.1%) + Arseniy Krasnov 1669 (0.1%) + Heinrich Schuchardt 1350 (0.1%) + Jagan Teki 1347 (0.1%) + Fabio Estevam 1209 (0.0%) + Ilias Apalodimas 1189 (0.0%) + Simon Glass 1137 (0.0%) + Roger Quadros 955 (0.0%) + Marek Behún 939 (0.0%) + Elon Zhang 889 (0.0%) + Kongyang Liu 846 (0.0%) + Mihai Sain 789 (0.0%) + Bhupesh Sharma 662 (0.0%) + Jonas Schwöbel 620 (0.0%) + Javier Martinez Canillas 597 (0.0%) + Michael Walle 505 (0.0%) + Eugene Uriev 501 (0.0%) + Christophe Kerello 479 (0.0%) + Chris Morgan 452 (0.0%) + Michal Simek 449 (0.0%) + Bhargav Raviprakash 388 (0.0%) + Janne Grunau 386 (0.0%) + Robert Marko 332 (0.0%) + Vignesh Raghavendra 332 (0.0%) + H Bell 291 (0.0%) + Yang Xiwen 278 (0.0%) + Bruce Suen 269 (0.0%) + Daniel Schultz 265 (0.0%) + Love Kumar 258 (0.0%) + Igor Opaniuk 219 (0.0%) + Raymond Mao 208 (0.0%) + Wan Yee Lau 206 (0.0%) + Sughosh Ganu 201 (0.0%) + Greg Malysa 200 (0.0%) + Patrice Chotard 199 (0.0%) + Masahisa Kojima 193 (0.0%) + Dasnavis Sabiya 189 (0.0%) + Neha Malcom Francis 183 (0.0%) + Jonathan Humphreys 173 (0.0%) + Anton Bambura 167 (0.0%) + Kelly Hung 164 (0.0%) + Andre Przywara 163 (0.0%) + Kamlesh Gurudasani 163 (0.0%) + Volodymyr Babchuk 147 (0.0%) + Parth Pancholi 146 (0.0%) + Piotr Wojtaszczyk 144 (0.0%) + Judith Mendez 131 (0.0%) + Joao Paulo Goncalves 131 (0.0%) + Leonard Anderweit 117 (0.0%) + BELOUARGA Mohamed 114 (0.0%) + Finley Xiao 109 (0.0%) + Jianan Huang 99 (0.0%) + Venkatesh Yadav Abbarapu 95 (0.0%) + Chen-Yu Tsai 92 (0.0%) + Mathieu Othacehe 92 (0.0%) + Michał Barnaś 86 (0.0%) + Lukasz Majewski 74 (0.0%) + Alexander Dahl 67 (0.0%) + Nishanth Menon 66 (0.0%) + Conor Dooley 64 (0.0%) + Francesco Dolcini 64 (0.0%) + Maksim Kiselev 64 (0.0%) + Linus Walleij 64 (0.0%) + Weizhao Ouyang 63 (0.0%) + Yannic Moog 61 (0.0%) + Weijie Gao 60 (0.0%) + Ben Dooks 60 (0.0%) + Leo Yu-Chi Liang 59 (0.0%) + Fiona Klute 56 (0.0%) + Alexey Romanov 56 (0.0%) + Jim Liu 55 (0.0%) + Devarsh Thakkar 53 (0.0%) + Colin McAllister 53 (0.0%) + Maxim Moskalets 51 (0.0%) + Josua Mayer 50 (0.0%) + Ivan Mikhaylov 50 (0.0%) + Ian Roberts 47 (0.0%) + Christophe Roullier 44 (0.0%) + Vincent Stehlé 44 (0.0%) + Nam Cao 43 (0.0%) + Ben Wolsieffer 42 (0.0%) + Felipe Balbi 41 (0.0%) + Vishal Sagar 40 (0.0%) + Hanyuan Zhao 38 (0.0%) + Hugo Dubois 37 (0.0%) + Christopher Obbard 34 (0.0%) + Aniket Limaye 33 (0.0%) + Romain Naour 33 (0.0%) + Heiko Stuebner 31 (0.0%) + Emanuele Ghidoli 30 (0.0%) + Stefan Bosch 30 (0.0%) + mwleeds@mailtundra.com 28 (0.0%) + Michael Trimarchi 23 (0.0%) + Thomas Weißschuh 22 (0.0%) + Thinh Nguyen 21 (0.0%) + Nitin Yadav 19 (0.0%) + Jixiong Hu 18 (0.0%) + Marjolaine Amate 18 (0.0%) + Dan Carpenter 17 (0.0%) + Stefan Eichenberger 17 (0.0%) + Sam Povilus 15 (0.0%) + Sébastien Szymanski 15 (0.0%) + Massimiliano Minella 15 (0.0%) + Mattijs Korpershoek 14 (0.0%) + Sean Anderson 14 (0.0%) + Lukas Funke 13 (0.0%) + Yasuharu Shibata 13 (0.0%) + Sam Edwards 13 (0.0%) + Kunihiko Hayashi 13 (0.0%) + Jacky Chou 12 (0.0%) + Vitor Soares 12 (0.0%) + Ye Li 11 (0.0%) + Udit Kumar 11 (0.0%) + Hiago De Franco 11 (0.0%) + Hari Nagalla 10 (0.0%) + Maximilian Brune 10 (0.0%) + Leon M. Busch-George 10 (0.0%) + Viacheslav Bocharov 9 (0.0%) + Benjamin Hahn 9 (0.0%) + cmachida 9 (0.0%) + James Hilliard 9 (0.0%) + Lukasz Wiecaszek 9 (0.0%) + Charles Hardin 8 (0.0%) + Petr Zejdl 8 (0.0%) + Vishal Mahaveer 8 (0.0%) + Sam Day 7 (0.0%) + Manorit Chawdhry 7 (0.0%) + Łukasz Stelmach 7 (0.0%) + Andrea Calabrese 6 (0.0%) + Siddharth Vadapalli 6 (0.0%) + CASAUBON Jean Michel 5 (0.0%) + Ahelenia Ziemiańska 5 (0.0%) + Ravi Minnikanti 5 (0.0%) + Hugo Cornelis 5 (0.0%) + Bob Wolff 5 (0.0%) + Alexander Gendin 5 (0.0%) + Dragan Simic 4 (0.0%) + Aswath Govindraju 4 (0.0%) + Kishan Dudhatra 4 (0.0%) + Khem Raj 4 (0.0%) + Tejas Bhumkar 3 (0.0%) + Heiko Schocher 3 (0.0%) + Lukasz Czechowski 3 (0.0%) + Jason Zhu 3 (0.0%) + Maks Mishin 3 (0.0%) + Patrick Delaunay 2 (0.0%) + Jiaxun Yang 2 (0.0%) + William Zhang 2 (0.0%) + Eugeniu Rosca 2 (0.0%) + Pierre-Clément Tosi 2 (0.0%) + Javier Viguera 2 (0.0%) + Manikanta Guntupalli 2 (0.0%) + Dmitry Baryshkov 2 (0.0%) + Frank Wunderlich 1 (0.0%) + John Watts 1 (0.0%) + Thomas Perl 1 (0.0%) + Kristian Amlie 1 (0.0%) + Alexander Sverdlin 1 (0.0%) + Jaehoon Chung 1 (0.0%) + Yu Chien Peter Lin 1 (0.0%) + Hector Martin 1 (0.0%) + Gireesh Hiremath 1 (0.0%) + Martyn Welch 1 (0.0%) + Shubhangi Shrikrushna Mahalle 1 (0.0%) + William Wu 1 (0.0%) + Ivan Orlov 1 (0.0%) + ==================================== ===== + + +.. table:: Developers with the most lines removed + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + Jonas Karlman 59892 (24.7%) + Marek Vasut 51731 (21.3%) + Neil Armstrong 19240 (7.9%) + Tim Harvey 10397 (4.3%) + Tony Dinh 5465 (2.3%) + Marcel Ziswiler 5061 (2.1%) + Adam Ford 4818 (2.0%) + Andrew Davis 3493 (1.4%) + Peng Fan 2778 (1.1%) + Anand Moon 2523 (1.0%) + Sam Protsenko 2273 (0.9%) + Peter Robinson 1907 (0.8%) + Fabio Estevam 1185 (0.5%) + Sumit Garg 845 (0.3%) + Javier Martinez Canillas 582 (0.2%) + Michael Walle 494 (0.2%) + Chen-Yu Tsai 80 (0.0%) + Igor Opaniuk 72 (0.0%) + Linus Walleij 61 (0.0%) + Francesco Dolcini 36 (0.0%) + Sam Edwards 12 (0.0%) + Ben Wolsieffer 11 (0.0%) + Hiago De Franco 11 (0.0%) + Kunihiko Hayashi 10 (0.0%) + Colin McAllister 7 (0.0%) + Heiko Schocher 3 (0.0%) + Dan Carpenter 2 (0.0%) + Dragan Simic 2 (0.0%) + Jiaxun Yang 1 (0.0%) + William Zhang 1 (0.0%) + ==================================== ===== + + +.. table:: Developers with the most signoffs (total 231) + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + Caleb Connolly 41 (17.7%) + Mattijs Korpershoek 19 (8.2%) + Michal Simek 15 (6.5%) + Dario Binacchi 11 (4.8%) + Chris Morgan 10 (4.3%) + Ilias Apalodimas 10 (4.3%) + Svyatoslav Ryhel 10 (4.3%) + Hari Nagalla 8 (3.5%) + Minkyu Kang 7 (3.0%) + Alexander Sverdlin 6 (2.6%) + Ian Roberts 6 (2.6%) + Greg Malysa 5 (2.2%) + Nathan Barrett-Morrison 5 (2.2%) + Manorit Chawdhry 4 (1.7%) + Dasnavis Sabiya 4 (1.7%) + Christophe Leroy 4 (1.7%) + Apurva Nandan 4 (1.7%) + Neil Armstrong 3 (1.3%) + Francesco Dolcini 3 (1.3%) + Vasileios Bimpikas 3 (1.3%) + Utsav Agarwal 3 (1.3%) + Arturs Artamonovs 3 (1.3%) + Neha Malcom Francis 3 (1.3%) + Janne Grunau 3 (1.3%) + Heinrich Schuchardt 3 (1.3%) + Jonas Karlman 2 (0.9%) + Marek Vasut 2 (0.9%) + Sumit Garg 2 (0.9%) + Dhruva Gole 2 (0.9%) + Kever Yang 2 (0.9%) + Ravi Gunasekaran 2 (0.9%) + Parvathi Bhogaraju 2 (0.9%) + Jayesh Choudhary 2 (0.9%) + Bo-Cun Chen 2 (0.9%) + Daniel Schultz 2 (0.9%) + Jonas Schwöbel 2 (0.9%) + Bryan Brattlof 2 (0.9%) + Peng Fan 1 (0.4%) + Fabio Estevam 1 (0.4%) + Stefan Roese 1 (0.4%) + Greg Kroah-Hartman 1 (0.4%) + Angelo Dureghello 1 (0.4%) + Anatolij Gustschin 1 (0.4%) + Vaishnav Achath 1 (0.4%) + Ashok Reddy Soma 1 (0.4%) + Dong Huang 1 (0.4%) + Shubhangi Shrikrushna Mahalle 1 (0.4%) + Felipe Balbi 1 (0.4%) + Judith Mendez 1 (0.4%) + Patrice Chotard 1 (0.4%) + Quentin Schulz 1 (0.4%) + ==================================== ===== + + +.. table:: Developers with the most reviews (total 1025) + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + Kever Yang 223 (21.8%) + Neil Armstrong 71 (6.9%) + Sumit Garg 70 (6.8%) + Dragan Simic 45 (4.4%) + Ilias Apalodimas 42 (4.1%) + Heinrich Schuchardt 35 (3.4%) + Patrick Delaunay 33 (3.2%) + Quentin Schulz 32 (3.1%) + Mattijs Korpershoek 31 (3.0%) + Leo Yu-Chi Liang 31 (3.0%) + Marek Vasut 28 (2.7%) + Jaehoon Chung 28 (2.7%) + Patrice Chotard 22 (2.1%) + Caleb Connolly 21 (2.0%) + Tom Rini 21 (2.0%) + Stefan Roese 20 (2.0%) + Neha Malcom Francis 17 (1.7%) + Simon Glass 16 (1.6%) + Peter Robinson 13 (1.3%) + Igor Opaniuk 13 (1.3%) + Thierry Reding 12 (1.2%) + Neal Gompa 11 (1.1%) + Heiko Schocher 9 (0.9%) + Michael Trimarchi 9 (0.9%) + Roger Quadros 9 (0.9%) + Tony Dinh 8 (0.8%) + Christopher Obbard 8 (0.8%) + Jonas Karlman 6 (0.6%) + Dhruva Gole 6 (0.6%) + E Shattow 6 (0.6%) + Christophe ROULLIER 6 (0.6%) + Richard Henderson 6 (0.6%) + Nishanth Menon 6 (0.6%) + Ravi Gunasekaran 5 (0.5%) + Teresa Remmet 5 (0.5%) + Mark Kettenis 5 (0.5%) + Paul Barker 5 (0.5%) + Udit Kumar 5 (0.5%) + Sean Anderson 5 (0.5%) + Fabio Estevam 4 (0.4%) + Sam Protsenko 4 (0.4%) + Enric Balletbo i Serra 4 (0.4%) + Laurent Pinchart 4 (0.4%) + Bryan Brattlof 3 (0.3%) + Andrew Davis 3 (0.3%) + Sam Edwards 3 (0.3%) + Dan Carpenter 3 (0.3%) + William Zhang 3 (0.3%) + Chris Packham 3 (0.3%) + Nikhil M Jain 3 (0.3%) + Tianling Shen 3 (0.3%) + Anatolij Gustschin 2 (0.2%) + CASAUBON Jean Michel 2 (0.2%) + Ian Ray 2 (0.2%) + Oleksandr Suvorov 2 (0.2%) + Bin Meng 2 (0.2%) + Tien Fong Chee 2 (0.2%) + Minkyu Kang 1 (0.1%) + Tim Harvey 1 (0.1%) + Adam Ford 1 (0.1%) + Linus Walleij 1 (0.1%) + Eddie James 1 (0.1%) + Guillaume La Roque 1 (0.1%) + Julien Masson 1 (0.1%) + Miquel Raynal 1 (0.1%) + Tim Lunn 1 (0.1%) + Cédric Le Goater 1 (0.1%) + Biju Das 1 (0.1%) + Holger Brunck 1 (0.1%) + Otavio Salvador 1 (0.1%) + Chia-Wei Wang 1 (0.1%) + Keerthy 1 (0.1%) + Philipp Tomsich 1 (0.1%) + Gao Xiang 1 (0.1%) + Frieder Schrempf 1 (0.1%) + Dmitrii Merkurev 1 (0.1%) + Marc Zyngier 1 (0.1%) + Ramon Fried 1 (0.1%) + Jai Luthra 1 (0.1%) + Alexander Dahl 1 (0.1%) + Heiko Stuebner 1 (0.1%) + Hugo Dubois 1 (0.1%) + Weizhao Ouyang 1 (0.1%) + Andre Przywara 1 (0.1%) + Mathieu Othacehe 1 (0.1%) + Wadim Egorov 1 (0.1%) + ==================================== ===== + + +.. table:: Developers with the most test credits (total 166) + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + Sumit Garg 19 (11.4%) + Marcel Ziswiler 15 (9.0%) + Svyatoslav Ryhel 10 (6.0%) + Mattijs Korpershoek 9 (5.4%) + Ion Agorria 9 (5.4%) + Tim Harvey 7 (4.2%) + Adam Ford 7 (4.2%) + Andreas Westman Dorcsak 7 (4.2%) + Sam Edwards 6 (3.6%) + Agneli 6 (3.6%) + Robert Eckelmann 6 (3.6%) + Simon Glass 5 (3.0%) + Teresa Remmet 5 (3.0%) + Fabio Estevam 5 (3.0%) + Ilias Apalodimas 4 (2.4%) + Jonathan Humphreys 4 (2.4%) + Neil Armstrong 3 (1.8%) + Paul Barker 3 (1.8%) + Heiko Stuebner 3 (1.8%) + Christian Gmeiner 3 (1.8%) + Heinrich Schuchardt 2 (1.2%) + Caleb Connolly 2 (1.2%) + Tony Dinh 2 (1.2%) + Hiago De Franco 2 (1.2%) + Robert Nelson 2 (1.2%) + Leo Yu-Chi Liang 1 (0.6%) + Jaehoon Chung 1 (0.6%) + Patrice Chotard 1 (0.6%) + Dhruva Gole 1 (0.6%) + E Shattow 1 (0.6%) + Ravi Gunasekaran 1 (0.6%) + Bryan Brattlof 1 (0.6%) + Andrew Davis 1 (0.6%) + Tim Lunn 1 (0.6%) + Otavio Salvador 1 (0.6%) + Wadim Egorov 1 (0.6%) + Michal Simek 1 (0.6%) + Alexander Sverdlin 1 (0.6%) + Jonas Schwöbel 1 (0.6%) + Judith Mendez 1 (0.6%) + Michael Walle 1 (0.6%) + Patrick Bruenn 1 (0.6%) + Jethro Bull 1 (0.6%) + Kamlesh Gurudasani 1 (0.6%) + Robert Marko 1 (0.6%) + ==================================== ===== + + +.. table:: Developers who gave the most tested-by credits (total 166) + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + Svyatoslav Ryhel 36 (21.7%) + Caleb Connolly 23 (13.9%) + Sumit Garg 15 (9.0%) + Apurva Nandan 12 (7.2%) + Marek Vasut 10 (6.0%) + Ilias Apalodimas 6 (3.6%) + Quentin Schulz 6 (3.6%) + Tom Rini 6 (3.6%) + Neil Armstrong 5 (3.0%) + Andrew Davis 5 (3.0%) + Leonard Anderweit 5 (3.0%) + Jonas Schwöbel 4 (2.4%) + Fabio Estevam 3 (1.8%) + Heinrich Schuchardt 3 (1.8%) + Bryan Brattlof 3 (1.8%) + Alexander Sverdlin 2 (1.2%) + Dasnavis Sabiya 2 (1.2%) + Pierre-Clément Tosi 2 (1.2%) + Yasuharu Shibata 2 (1.2%) + Josua Mayer 2 (1.2%) + Masahisa Kojima 2 (1.2%) + Tim Harvey 1 (0.6%) + Simon Glass 1 (0.6%) + Tony Dinh 1 (0.6%) + Judith Mendez 1 (0.6%) + Igor Opaniuk 1 (0.6%) + Roger Quadros 1 (0.6%) + Nishanth Menon 1 (0.6%) + Anand Moon 1 (0.6%) + Sébastien Szymanski 1 (0.6%) + Maksim Kiselev 1 (0.6%) + Ben Dooks 1 (0.6%) + Yang Xiwen 1 (0.6%) + ==================================== ===== + + +.. table:: Developers with the most report credits (total 27) + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + E Shattow 4 (14.8%) + Sumit Garg 2 (7.4%) + Jonas Karlman 2 (7.4%) + Laurent Pinchart 2 (7.4%) + Suman Anna 2 (7.4%) + Marek Vasut 1 (3.7%) + Andrew Davis 1 (3.7%) + Heinrich Schuchardt 1 (3.7%) + Tim Harvey 1 (3.7%) + Simon Glass 1 (3.7%) + Jonathan Humphreys 1 (3.7%) + Patrice Chotard 1 (3.7%) + Dhruva Gole 1 (3.7%) + Dan Carpenter 1 (3.7%) + Christophe Leroy 1 (3.7%) + Eugeniu Rosca 1 (3.7%) + Janusz Dziedzic 1 (3.7%) + David Virag 1 (3.7%) + Jan Kiszka 1 (3.7%) + Aniket Limaye 1 (3.7%) + ==================================== ===== + + +.. table:: Developers who gave the most report credits (total 27) + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + Heinrich Schuchardt 6 (22.2%) + Neha Malcom Francis 3 (11.1%) + Marek Vasut 2 (7.4%) + Caleb Connolly 2 (7.4%) + Tom Rini 2 (7.4%) + Fabio Estevam 2 (7.4%) + Bryan Brattlof 2 (7.4%) + Andrew Davis 1 (3.7%) + Ilias Apalodimas 1 (3.7%) + Quentin Schulz 1 (3.7%) + Yasuharu Shibata 1 (3.7%) + Nishanth Menon 1 (3.7%) + Sam Protsenko 1 (3.7%) + Felipe Balbi 1 (3.7%) + Alexander Gendin 1 (3.7%) + ==================================== ===== + + +.. table:: Top changeset contributors by employer + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + (Unknown) 645 (39.7%) + Konsulko Group 324 (20.0%) + Linaro 201 (12.4%) + Texas Instruments 119 (7.3%) + Google LLC 50 (3.1%) + AMD 43 (2.6%) + ST Microelectronics 39 (2.4%) + DENX Software Engineering 34 (2.1%) + Phytec 27 (1.7%) + Renesas Electronics 25 (1.5%) + Toradex 19 (1.2%) + NXP 17 (1.0%) + Edgeble AI Technologies Pvt. Ltd. 14 (0.9%) + ARM 13 (0.8%) + Intel 9 (0.6%) + Amarula Solutions 7 (0.4%) + BayLibre SAS 6 (0.4%) + Socionext Inc. 6 (0.4%) + Collabora Ltd. 5 (0.3%) + Red Hat 4 (0.2%) + linutronix 4 (0.2%) + Rockchip 4 (0.2%) + Weidmüller Interface GmbH & Co. KG 3 (0.2%) + Samsung 2 (0.1%) + Broadcom 1 (0.1%) + Digi International 1 (0.1%) + Marvell 1 (0.1%) + Siemens 1 (0.1%) + ==================================== ===== + + +.. table:: Top lines changed by employer + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + Konsulko Group 2187616 (86.6%) + (Unknown) 130949 (5.2%) + Linaro 80577 (3.2%) + Renesas Electronics 52143 (2.1%) + Texas Instruments 41420 (1.6%) + Phytec 8700 (0.3%) + Toradex 5479 (0.2%) + Intel 4682 (0.2%) + Edgeble AI Technologies Pvt. Ltd. 3856 (0.2%) + NXP 3082 (0.1%) + DENX Software Engineering 1283 (0.1%) + Google LLC 1225 (0.0%) + Rockchip 1002 (0.0%) + AMD 863 (0.0%) + ST Microelectronics 724 (0.0%) + Red Hat 597 (0.0%) + ARM 207 (0.0%) + Socionext Inc. 206 (0.0%) + linutronix 65 (0.0%) + Amarula Solutions 46 (0.0%) + Collabora Ltd. 35 (0.0%) + BayLibre SAS 14 (0.0%) + Weidmüller Interface GmbH & Co. KG 13 (0.0%) + Samsung 8 (0.0%) + Marvell 5 (0.0%) + Broadcom 2 (0.0%) + Digi International 2 (0.0%) + Siemens 1 (0.0%) + ==================================== ===== + + +.. table:: Employers with the most signoffs (total 231) + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + (Unknown) 56 (24.2%) + Linaro 56 (24.2%) + Texas Instruments 33 (14.3%) + BayLibre SAS 19 (8.2%) + AMD 17 (7.4%) + Amarula Solutions 11 (4.8%) + Analog Devices 9 (3.9%) + Samsung 7 (3.0%) + Siemens 6 (2.6%) + DENX Software Engineering 4 (1.7%) + Toradex 3 (1.3%) + Canonical 3 (1.3%) + Phytec 2 (0.9%) + Rockchip 2 (0.9%) + Intel 1 (0.4%) + NXP 1 (0.4%) + ST Microelectronics 1 (0.4%) + ==================================== ===== + + +.. table:: Employers with the most hackers (total 195) + :widths: auto + + ==================================== ===== + Name Count + ==================================== ===== + (Unknown) 98 (50.3%) + Texas Instruments 20 (10.3%) + Linaro 10 (5.1%) + AMD 8 (4.1%) + Toradex 8 (4.1%) + Phytec 5 (2.6%) + Intel 5 (2.6%) + DENX Software Engineering 4 (2.1%) + Rockchip 4 (2.1%) + ST Microelectronics 4 (2.1%) + Amarula Solutions 3 (1.5%) + Google LLC 3 (1.5%) + Samsung 2 (1.0%) + NXP 2 (1.0%) + Edgeble AI Technologies Pvt. Ltd. 2 (1.0%) + ARM 2 (1.0%) + Socionext Inc. 2 (1.0%) + linutronix 2 (1.0%) + Collabora Ltd. 2 (1.0%) + BayLibre SAS 1 (0.5%) + Siemens 1 (0.5%) + Konsulko Group 1 (0.5%) + Renesas Electronics 1 (0.5%) + Red Hat 1 (0.5%) + Weidmüller Interface GmbH & Co. KG 1 (0.5%) + Marvell 1 (0.5%) + Broadcom 1 (0.5%) + Digi International 1 (0.5%) + ==================================== ===== + diff --git a/doc/develop/tests_writing.rst b/doc/develop/tests_writing.rst index bb1145da268..44b544fa78b 100644 --- a/doc/develop/tests_writing.rst +++ b/doc/develop/tests_writing.rst @@ -281,7 +281,6 @@ new one of those, you should add a new suite. Create a new file in test/ or a subdirectory and define a macro to register the suite. For example:: - #include <common.h> #include <console.h> #include <mapmem.h> #include <dm/test.h> diff --git a/doc/develop/uefi/fwu_updates.rst b/doc/develop/uefi/fwu_updates.rst index e4709d82b41..51e8a28efe1 100644 --- a/doc/develop/uefi/fwu_updates.rst +++ b/doc/develop/uefi/fwu_updates.rst @@ -46,6 +46,8 @@ The feature can be enabled by specifying the following configs:: CONFIG_FWU_NUM_BANKS=<val> CONFIG_FWU_NUM_IMAGES_PER_BANK=<val> + CONFIG_FWU_MDATA_V1=y or CONFIG_FWU_MDATA_V2=y + in the .config file By enabling the CONFIG_CMD_FWU_METADATA config option, the @@ -58,6 +60,14 @@ enable the FWU Multi Bank Update functionality. Please refer to the section :ref:`uefi_capsule_update_ref` for more details on generation of the UEFI capsule. +FWU Metadata +------------ + +U-Boot supports both versions(1 and 2) of the FWU metadata defined in +the two revisions of the specification. Support can be enabled for +either of the two versions through a config flag. The mkfwumdata tool +can generate metadata for both the supported versions. + Setting up the device for GPT partitioned storage ------------------------------------------------- @@ -94,12 +104,12 @@ of. Each GPT partition entry in the GPT header has two GUIDs:: * UniquePartitionGUID The PartitionTypeGUID value should correspond to the -``image_type_uuid`` field of the FWU metadata. This field is used to +``image_type_guid`` field of the FWU metadata. This field is used to identify a given type of updatable firmware image, e.g. U-Boot, OP-TEE, FIP etc. This GUID should also be used for specifying the `--guid` parameter when generating the capsule. -The UniquePartitionGUID value should correspond to the ``image_uuid`` +The UniquePartitionGUID value should correspond to the ``image_guid`` field in the FWU metadata. This GUID is used to identify images of a given image type in different banks. @@ -108,8 +118,8 @@ metadata partitions. This would be the PartitionTypeGUID for the metadata partitions. Similarly, the UEFI specification defines the ESP GUID to be be used. -When generating the metadata, the ``image_type_uuid`` and the -``image_uuid`` values should match the *PartitionTypeGUID* and the +When generating the metadata, the ``image_type_guid`` and the +``image_guid`` values should match the *PartitionTypeGUID* and the *UniquePartitionGUID* values respectively. Performing the Update @@ -181,5 +191,5 @@ empty capsule would be:: Links ----- -* [1] https://developer.arm.com/documentation/den0118/a/ - FWU Specification +* [1] https://developer.arm.com/documentation/den0118/ - FWU Specification * [2] https://git.codelinaro.org/linaro/dependable-boot/mbfw/uploads/6f7ddfe3be24e18d4319e108a758d02e/mbfw.pdf - Dependable Boot Specification diff --git a/doc/develop/uefi/uefi.rst b/doc/develop/uefi/uefi.rst index ea70dcbda86..d450b12bf80 100644 --- a/doc/develop/uefi/uefi.rst +++ b/doc/develop/uefi/uefi.rst @@ -580,10 +580,10 @@ and used by the steps highlighted below. } You can perform step-4 through the Kconfig symbol -CONFIG_EFI_CAPSULE_ESL_FILE. This symbol points to the esl file -generated in step-2. Once the symbol has been populated with the path -to the esl file, it will automatically get embedded into the -platform's dtb as part of U-Boot build. +CONFIG_EFI_CAPSULE_CRT_FILE. This symbol points to the signing key +generated in step-2. As part of U-Boot build, the ESL certificate file will +be generated from the signing key and automatically get embedded into the +platform's dtb. Anti-rollback Protection ************************ @@ -631,6 +631,18 @@ where version.dtso looks like:: The properties of image-type-id and image-index must match the value defined in the efi_fw_image array as image_type_id and image_index. +Porting Capsule Updates to new boards +************************************* + +It is important, when using a reference board as a starting point for a custom +board, that certain steps are taken to properly support Capsule Updates. + +Capsule GUIDs need to be unique for each firmware and board. That is, if two +firmwares are built from the same source but result in different binaries +because they are built for different boards, they should have different GUIDs. +Therefore it is important when creating support for a new board, new GUIDs are +defined in the board's header file. *DO NOT* reuse capsule GUIDs. + Executing the boot manager ~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/doc/imx/habv4/csf_examples/mx8m/csf.sh b/doc/imx/habv4/csf_examples/mx8m/csf.sh deleted file mode 100644 index cd3b2614a2f..00000000000 --- a/doc/imx/habv4/csf_examples/mx8m/csf.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/sh - -# 0) Generate keys -# -# WARNING: ECDSA keys are only supported by HAB 4.5 and newer (i.e. i.MX8M Plus) -# -# cd /path/to/cst-3.3.1/keys/ -# ./hab4_pki_tree.sh -existing-ca n -use-ecc n -kl 4096 -duration 10 -num-srk 4 -srk-ca y -# cd /path/to/cst-3.3.1/crts/ -# ../linux64/bin/srktool -h 4 -t SRK_1_2_3_4_table.bin -e SRK_1_2_3_4_fuse.bin -d sha256 -c ./SRK1_sha256_4096_65537_v3_ca_crt.pem,./SRK2_sha256_4096_65537_v3_ca_crt.pem,./SRK3_sha256_4096_65537_v3_ca_crt.pem,./SRK4_sha256_4096_65537_v3_ca_crt.pem -f 1 - -# 1) Build U-Boot (e.g. for i.MX8MM) -# -# cp -Lv /path/to/arm-trusted-firmware/build/imx8mm/release/bl31.bin . -# cp -Lv /path/to/firmware-imx-8.14/firmware/ddr/synopsys/ddr3* . -# make -j imx8mm_board_defconfig -# make -j`nproc` flash.bin - -# 2) Sign SPL and DRAM blobs - -cp doc/imx/habv4/csf_examples/mx8m/csf_spl.txt csf_spl.tmp -cp doc/imx/habv4/csf_examples/mx8m/csf_fit.txt csf_fit.tmp - -# update File Paths from env vars -if ! [ -r $CSF_KEY ]; then - echo "Error: \$CSF_KEY not found" - exit 1 -fi -if ! [ -r $IMG_KEY ]; then - echo "Error: \$IMG_KEY not found" - exit 1 -fi -if ! [ -r $SRK_TABLE ]; then - echo "Error: \$SRK_TABLE not found" - exit 1 -fi -sed -i "s:\$CSF_KEY:$CSF_KEY:" csf_spl.tmp -sed -i "s:\$IMG_KEY:$IMG_KEY:" csf_spl.tmp -sed -i "s:\$SRK_TABLE:$SRK_TABLE:" csf_spl.tmp -sed -i "s:\$CSF_KEY:$CSF_KEY:" csf_fit.tmp -sed -i "s:\$IMG_KEY:$IMG_KEY:" csf_fit.tmp -sed -i "s:\$SRK_TABLE:$SRK_TABLE:" csf_fit.tmp - -# update SPL Blocks -spl_block_base=$(printf "0x%x" $(( $(sed -n "/CONFIG_SPL_TEXT_BASE=/ s@.*=@@p" .config) - 0x40)) ) -spl_block_size=$(printf "0x%x" $(stat -tc %s u-boot-spl-ddr.bin)) -sed -i "/Blocks = / s@.*@ Blocks = $spl_block_base 0x0 $spl_block_size \"flash.bin\"@" csf_spl.tmp - -# Generate CSF blob -cst -i csf_spl.tmp -o csf_spl.bin - -# Patch CSF blob into flash.bin -spl_csf_offset=$(xxd -s 24 -l 4 -e flash.bin | cut -d " " -f 2 | sed "s@^@0x@") -spl_bin_offset=$(xxd -s 4 -l 4 -e flash.bin | cut -d " " -f 2 | sed "s@^@0x@") -spl_dd_offset=$((${spl_csf_offset} - ${spl_bin_offset} + 0x40)) -dd if=csf_spl.bin of=flash.bin bs=1 seek=${spl_dd_offset} conv=notrunc - -# 3) Sign u-boot.itb - -# fitImage -fit_block_base=$(printf "0x%x" $(sed -n "/CONFIG_SPL_LOAD_FIT_ADDRESS=/ s@.*=@@p" .config) ) -fit_block_offset=$(printf "0x%s" $(fdtget -t x u-boot.dtb /binman/imx-boot/uboot offset)) -fit_block_size=$(printf "0x%x" $(( ( ( $(stat -tc %s u-boot.itb) + 0x1000 - 0x1 ) & ~(0x1000 - 0x1)) + 0x20 )) ) -sed -i "/Blocks = / s@.*@ Blocks = $fit_block_base $fit_block_offset $fit_block_size \"flash.bin\"@" csf_fit.tmp - -# IVT -ivt_ptr_base=$(printf "%08x" ${fit_block_base} | sed "s@\(..\)\(..\)\(..\)\(..\)@0x\4\3\2\1@") -ivt_block_base=$(printf "%08x" $(( ${fit_block_base} + ${fit_block_size} - 0x20 )) | sed "s@\(..\)\(..\)\(..\)\(..\)@0x\4\3\2\1@") -csf_block_base=$(printf "%08x" $(( ${fit_block_base} + ${fit_block_size} )) | sed "s@\(..\)\(..\)\(..\)\(..\)@0x\4\3\2\1@") -ivt_block_offset=$((${fit_block_offset} + ${fit_block_size} - 0x20)) -csf_block_offset=$((${ivt_block_offset} + 0x20)) - -echo "0xd1002041 ${ivt_block_base} 0x00000000 0x00000000 0x00000000 ${ivt_block_base} ${csf_block_base} 0x00000000" | xxd -r -p > ivt.bin -dd if=ivt.bin of=flash.bin bs=1 seek=${ivt_block_offset} conv=notrunc - -# Generate CSF blob -cst -i csf_fit.tmp -o csf_fit.bin - -# When loading flash.bin via USB, we must ensure that the file being -# served is as large as the target expects (see -# board_spl_fit_size_align()), otherwise the target will hang in -# rom_api_download_image() waiting for the remaining bytes. -# -# Note that in order for dd to actually extend the file, one must not -# pass conv=notrunc here. With a non-zero seek= argument, dd is -# documented to preserve the contents of the file seeked past; in -# particular, dd does not open the file with O_TRUNC. -CSF_SIZE=$(sed -n "/CONFIG_CSF_SIZE=/ s@.*=@@p" .config) -dd if=/dev/null of=csf_fit.bin bs=1 seek=$((CSF_SIZE - 0x20)) count=0 - -# Patch CSF blob into flash.bin -dd if=csf_fit.bin of=flash.bin bs=1 seek=${csf_block_offset} conv=notrunc diff --git a/doc/imx/habv4/csf_examples/mx8m/csf_fit.txt b/doc/imx/habv4/csf_examples/mx8m/csf_fit.txt deleted file mode 100644 index 97f3eea573b..00000000000 --- a/doc/imx/habv4/csf_examples/mx8m/csf_fit.txt +++ /dev/null @@ -1,30 +0,0 @@ -[Header] - Version = 4.3 - Hash Algorithm = sha256 - Engine = CAAM - Engine Configuration = 0 - Certificate Format = X509 - Signature Format = CMS - -[Install SRK] - # SRK_TABLE is full path to SRK_1_2_3_4_table.bin - File = "$SRK_TABLE" - Source index = 0 - -[Install CSFK] - # CSF_KEY is full path to CSF1_1_sha256_4096_65537_v3_usr_crt.pem - File = "$CSF_KEY" - -[Authenticate CSF] - -[Install Key] - Verification index = 0 - Target Index = 2 - # IMG_KEY is full path to IMG1_1_sha256_4096_65537_v3_usr_crt.pem - File = "$IMG_KEY" - -[Authenticate Data] - Verification index = 2 - # FIXME: - # Line 1 -- fitImage - Blocks = CONFIG_SPL_LOAD_FIT_ADDRESS 0x57c00 0xffff "flash.bin" diff --git a/doc/imx/habv4/csf_examples/mx8m/csf_spl.txt b/doc/imx/habv4/csf_examples/mx8m/csf_spl.txt deleted file mode 100644 index 88fa420a5fa..00000000000 --- a/doc/imx/habv4/csf_examples/mx8m/csf_spl.txt +++ /dev/null @@ -1,33 +0,0 @@ -[Header] - Version = 4.3 - Hash Algorithm = sha256 - Engine = CAAM - Engine Configuration = 0 - Certificate Format = X509 - Signature Format = CMS - -[Install SRK] - # SRK_TABLE is full path to SRK_1_2_3_4_table.bin - File = "$SRK_TABLE" - Source index = 0 - -[Install CSFK] - # CSF_KEY is full path to CSF1_1_sha256_4096_65537_v3_usr_crt.pem - File = "$CSF_KEY" - -[Authenticate CSF] - -[Unlock] - Engine = CAAM - Features = MID - -[Install Key] - Verification index = 0 - Target Index = 2 - # IMG_KEY is full path to IMG1_1_sha256_4096_65537_v3_usr_crt.pem - File = "$IMG_KEY" - -[Authenticate Data] - Verification index = 2 - # FIXME: Adjust start (first column) and size (third column) here - Blocks = 0x7e0fc0 0x0 0x306f0 "flash.bin" diff --git a/doc/imx/habv4/guides/mx8m_spl_secure_boot.txt b/doc/imx/habv4/guides/mx8m_spl_secure_boot.txt index e16e5410bd9..1bea091344d 100644 --- a/doc/imx/habv4/guides/mx8m_spl_secure_boot.txt +++ b/doc/imx/habv4/guides/mx8m_spl_secure_boot.txt @@ -121,6 +121,9 @@ build configuration: - Defconfig: CONFIG_IMX_HAB=y + CONFIG_FSL_CAAM=y + CONFIG_ARCH_MISC_INIT=y + CONFIG_SPL_CRYPTO=y - Kconfig: @@ -131,91 +134,59 @@ build configuration: The CSF contains all the commands that the HAB executes during the secure boot. These commands instruct the HAB code on which memory areas of the image -to authenticate, which keys to install, use and etc. - -CSF examples are available under doc/imx/habv4/csf_examples/ directory. - -CSF "Blocks" line for csf_spl.txt can be generated as follows: - -``` -spl_block_base=$(printf "0x%x" $(( $(sed -n "/CONFIG_SPL_TEXT_BASE=/ s@.*=@@p" .config) - 0x40)) ) -spl_block_size=$(printf "0x%x" $(stat -tc %s u-boot-spl-ddr.bin)) -sed -i "/Blocks = / s@.*@ Blocks = $spl_block_base 0x0 $spl_block_size \"flash.bin\"@" csf_spl.txt -``` - -The resulting line looks as follows: -``` - Blocks = 0x7e0fc0 0x0 0x306f0 "flash.bin" -``` - -The columns mean: - - CONFIG_SPL_TEXT_BASE - 0x40 -- Start address of signed data, in DRAM - - 0x0 -- Start address of signed data, in "flash.bin" - - 0x306f0 -- Length of signed data, in "flash.bin" - - Filename -- "flash.bin" - -To generate signature for the SPL part of flash.bin container, use CST: -``` -cst -i csf_spl.tmp -o csf_spl.bin -``` - -The newly generated CST blob has to be patched into existing flash.bin -container. Conveniently, flash.bin IVT contains physical address of the -CSF blob. Remember, the SPL part of flash.bin container is loaded by the -BootROM at CONFIG_SPL_TEXT_BASE - 0x40 , so the offset of CSF blob in -the fitImage can be calculated and inserted into the flash.bin in the -correct location as follows: -``` -# offset = IVT_HEADER[6 = CSF address] - CONFIG_SPL_TEXT_BASE - 0x40 -spl_csf_offset=$(xxd -s 24 -l 4 -e flash.bin | cut -d " " -f 2 | sed "s@^@0x@") -spl_bin_offset=$(xxd -s 4 -l 4 -e flash.bin | cut -d " " -f 2 | sed "s@^@0x@") -spl_dd_offset=$((${spl_csf_offset} - ${spl_bin_offset} + 0x40)) -dd if=csf_spl.bin of=flash.bin bs=1 seek=${spl_dd_offset} conv=notrunc -``` - -CSF "Blocks" line for csf_fit.txt can be generated as follows: -``` -# fitImage -fit_block_base=$(printf "0x%x" $(sed -n "/CONFIG_SPL_LOAD_FIT_ADDRESS=/ s@.*=@@p" .config) ) -fit_block_offset=$(printf "0x%s" $(fdtget -t x u-boot.dtb /binman/imx-boot/uboot offset)) -fit_block_size=$(printf "0x%x" $(( ( ( $(stat -tc %s u-boot.itb) + 0x1000 - 0x1 ) & ~(0x1000 - 0x1)) + 0x20 )) ) -sed -i "/Blocks = / s@.*@ Blocks = $fit_block_base $fit_block_offset $fit_block_size \"flash.bin\"@" csf_fit.tmp -``` - -The fitImage part of flash.bin requires separate IVT. Generate the IVT and -patch it into the correct aligned location of flash.bin as follows: -``` -# IVT -ivt_ptr_base=$(printf "%08x" ${fit_block_base} | sed "s@\(..\)\(..\)\(..\)\(..\)@0x\4\3\2\1@") -ivt_block_base=$(printf "%08x" $(( ${fit_block_base} + ${fit_block_size} - 0x20 )) | sed "s@\(..\)\(..\)\(..\)\(..\)@0x\4\3\2\1@") -csf_block_base=$(printf "%08x" $(( ${fit_block_base} + ${fit_block_size} )) | sed "s@\(..\)\(..\)\(..\)\(..\)@0x\4\3\2\1@") -ivt_block_offset=$((${fit_block_offset} + ${fit_block_size} - 0x20)) -csf_block_offset=$((${ivt_block_offset} + 0x20)) - -echo "0xd1002041 ${ivt_block_base} 0x00000000 0x00000000 0x00000000 ${ivt_block_base} ${csf_block_base} 0x00000000" | xxd -r -p > ivt.bin -dd if=ivt.bin of=flash.bin bs=1 seek=${ivt_block_offset} conv=notrunc -``` - -To generate CSF signature for the fitImage part of flash.bin container, use CST: -``` -cst -i csf_fit.tmp -o csf_fit.bin -``` - -Finally, patch the CSF signature into the fitImage right past the IVT: -``` -dd if=csf_fit.bin of=flash.bin bs=1 seek=${csf_block_offset} conv=notrunc -``` - -The entire script is available in doc/imx/habv4/csf_examples/mx8m/csf.sh -and can be used as follows to modify flash.bin to be signed -(adjust paths as needed): +to authenticate, which keys to install, use and etc. The CSF is generated +using the CST Code Signing Tool based on input configuration file. This tool +input configuration file is generated using binman, and the tool is invoked +from binman as well. + +The SPL and fitImage sections of the generated image are signed separately. +The signing is activated by wrapping SPL and fitImage sections into nxp-imx8mcst +etype, which is done automatically in arch/arm/dts/imx8m{m,n,p,q}-u-boot.dtsi +in case CONFIG_IMX_HAB Kconfig symbol is enabled. + +Per default the HAB keys and certificates need to be located in the build +directory, this means creating a symbolic link or copying the following files +from the HAB keys directory flat (e.g. removing the `keys` and `cert` +subdirectory) into the u-boot build directory for the CST Code Signing Tool to +locate them: + +- `crts/SRK_1_2_3_4_table.bin` +- `crts/CSF1_1_sha256_4096_65537_v3_usr_crt.pem` +- `keys/CSF1_1_sha256_4096_65537_v3_usr_key.pem` +- `crts/IMG1_1_sha256_4096_65537_v3_usr_crt.pem` +- `keys/IMG1_1_sha256_4096_65537_v3_usr_key.pem` +- `keys/key_pass.txt` + +The paths to the SRK table and the certificates can be modified via changes to +the nxp_imx8mcst device tree node(s), however the other files are required by +the CST tools as well, and will be searched for in relation to them. + +Build of flash.bin target then produces a signed flash.bin automatically. + +The nxp-imx8mcst etype is configurable using either DT properties or environment +variables. The following DT properties and environment variables are supported. +Note that environment variables override DT properties. + ++--------------------+-----------+------------------------------------------------------------------+ +| DT property | Variable | Description | ++====================+===========+==================================================================+ +| nxp,loader-address | | SPL base address | ++--------------------+-----------+------------------------------------------------------------------+ +| nxp,srk-table | SRK_TABLE | full path to SRK_1_2_3_4_table.bin | ++--------------------+-----------+------------------------------------------------------------------+ +| nxp,csf-crt | CSF_KEY | full path to the CSF Key CSF1_1_sha256_4096_65537_v3_usr_crt.pem | ++--------------------+-----------+------------------------------------------------------------------+ +| nxp,img-crt | IMG_KEY | full path to the IMG Key IMG1_1_sha256_4096_65537_v3_usr_crt.pem | ++--------------------+-----------+------------------------------------------------------------------+ + +Environment variables can be set as follows to point the build process +to external key material: ``` export CST_DIR=/usr/src/cst-3.3.1/ export CSF_KEY=$CST_DIR/crts/CSF1_1_sha256_4096_65537_v3_usr_crt.pem export IMG_KEY=$CST_DIR/crts/IMG1_1_sha256_4096_65537_v3_usr_crt.pem export SRK_TABLE=$CST_DIR/crts/SRK_1_2_3_4_table.bin -export PATH=$CST_DIR/linux64/bin:$PATH -/bin/sh doc/imx/habv4/csf_examples/mx8m/csf.sh +make flash.bin ``` 1.4 Closing the device diff --git a/doc/mkfwumdata.1 b/doc/mkfwumdata.1 index 7dd718b26e2..2ed0fb100b8 100644 --- a/doc/mkfwumdata.1 +++ b/doc/mkfwumdata.1 @@ -6,9 +6,11 @@ mkfwumdata \- create FWU metadata image . .SH SYNOPSIS .SY mkfwumdata +.OP \-v version .OP \-a activeidx .OP \-p previousidx .OP \-g +.OP \-V vendor-file .BI \-i\~ imagecount .BI \-b\~ bankcount .I UUIDs @@ -28,6 +30,12 @@ creates metadata info to be used with FWU. Print usage information and exit. . .TP +.B \-v +Set +.IR version +as the metadata version to generate. Valid values 1 or 2. +. +.TP .B \-a Set .IR activeidx @@ -50,6 +58,12 @@ Convert the as GUIDs before use. . .TP +.B \-V +Pass +.IR vendor-file +for appending vendor data to the metadata. Supported only with version 2. +. +.TP .B \-i Specify there are .IR imagecount @@ -81,7 +95,7 @@ Create a metadata image with 2 banks and 1 image/bank, BankAct=0, BankPrev=1: .EX .in +4 $ \c -.B mkfwumdata \-a 0 \-p 1 \-b 2 \-i 1 \\\\\& +.B mkfwumdata \-v 2 \-a 0 \-p 1 \-b 2 \-i 1 \\\\\& .in +6 .B 17e86d77-41f9-4fd7-87ec-a55df9842de5,\\\\\& .B 10c36d7d-ca52-b843-b7b9-f9d6c501d108,\\\\\& diff --git a/doc/sphinx/requirements.txt b/doc/sphinx/requirements.txt index 54eb70aa92c..40dde599916 100644 --- a/doc/sphinx/requirements.txt +++ b/doc/sphinx/requirements.txt @@ -1,18 +1,18 @@ alabaster==0.7.16 -Babel==2.14.0 -certifi==2023.11.17 +Babel==2.15.0 +certifi==2024.7.4 charset-normalizer==3.3.2 docutils==0.20.1 idna==3.7 imagesize==1.4.1 Jinja2==3.1.4 -MarkupSafe==2.1.3 -packaging==23.2 -Pygments==2.17.2 -requests==2.32.2 +MarkupSafe==2.1.5 +packaging==24.1 +Pygments==2.18.0 +requests==2.32.3 six==1.16.0 snowballstemmer==2.2.0 -Sphinx==7.2.6 +Sphinx==7.3.7 sphinx-prompt==1.8.0 sphinx-rtd-theme==2.0.0 sphinxcontrib-applehelp==1.0.8 @@ -22,4 +22,4 @@ sphinxcontrib-jquery==4.1 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.7 sphinxcontrib-serializinghtml==1.1.10 -urllib3==2.1.0 +urllib3==2.2.2 diff --git a/doc/usage/cmd/bootdev.rst b/doc/usage/cmd/bootdev.rst index f759abab354..98a0f43c580 100644 --- a/doc/usage/cmd/bootdev.rst +++ b/doc/usage/cmd/bootdev.rst @@ -22,7 +22,7 @@ Description The `bootdev` command is used to manage bootdevs. It can list available bootdevs, select one and obtain information about it. -See :doc:`../../develop/bootstd` for more information about bootdevs in general. +See :doc:`/develop/bootstd/index` for more information about bootdevs in general. bootdev list diff --git a/doc/usage/cmd/bootelf.rst b/doc/usage/cmd/bootelf.rst new file mode 100644 index 00000000000..705524c594a --- /dev/null +++ b/doc/usage/cmd/bootelf.rst @@ -0,0 +1,61 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later +.. Copyright 2024, Maxim Moskalets <maximmosk4@gmail.com> + +.. index:: + single: bootelf (command) + +bootelf command +=============== + +Synopsis +-------- + +:: + + bootelf [-p|-s] [-d <fdt_addr>] [<image_addr> [<arg>]...] + +Description +----------- + +The *bootelf* command is used to launch a ELF binary at *image_addr*. If +*image_addr* is not specified, the bootelf command will try to find image in +*image_load_addr* variable (*CONFIG\_SYS\_LOAD\_ADDR* by default). + +Args after *image_addr* will be passed to application in common *argc*, *argv* +format. + +A command sequence to run a ELF image using FDT might look like + +:: + + load mmc 0:1 ${loadaddr} /kernel.elf + load mmc 0:1 ${fdt_addr_r} /soc-board.dtb + bootelf -d ${fdt_addr_r} ${loadaddr} ${loadaddr} + +image_addr + Address of the ELF binary. + +fdt_addr + Address of the device-tree. This argument in only needed if bootable + application uses FDT that requires additional setup (like /memory node). + +arg + Any text arguments for bootable application. This is usually the address + of the device-tree. + +Flags: + +-p + Load ELF image via program headers. + +-s + Load ELF image via section headers. + +-d + Setup FDT by address. + +Configuration +------------- + +The bootelf command is only available if CONFIG_CMD_ELF=y. FDT setup by flag -d +need CONFIG_CMD_ELF_FDT_SETUP=y. diff --git a/doc/usage/cmd/bootflow.rst b/doc/usage/cmd/bootflow.rst index 6519e4880a9..5d41fe37a7a 100644 --- a/doc/usage/cmd/bootflow.rst +++ b/doc/usage/cmd/bootflow.rst @@ -26,7 +26,7 @@ Description The `bootflow` command is used to manage bootflows. It can scan bootdevs to locate bootflows, list them and boot them. -See :doc:`../../develop/bootstd` for more information. +See :doc:`/develop/bootstd/index` for more information. Note that `CONFIG_BOOTSTD_FULL` (which enables `CONFIG_CMD_BOOTFLOW_FULL) must be enabled to obtain full functionality with this command. Otherwise, it only diff --git a/doc/usage/cmd/bootmeth.rst b/doc/usage/cmd/bootmeth.rst index bac9fdf85cd..c3d2ec1574b 100644 --- a/doc/usage/cmd/bootmeth.rst +++ b/doc/usage/cmd/bootmeth.rst @@ -21,7 +21,7 @@ Description The `bootmeth` command is used to manage bootmeths. It can list them and change the order in which they are used. -See :doc:`../../develop/bootstd` for more information. +See :doc:`/develop/bootstd/index` for more information. .. _bootmeth_order: diff --git a/doc/usage/cmd/itest.rst b/doc/usage/cmd/itest.rst index 9c307fb4bf4..adcad05b2d4 100644 --- a/doc/usage/cmd/itest.rst +++ b/doc/usage/cmd/itest.rst @@ -58,7 +58,7 @@ op ======== ====================== Examples -======== +-------- The itest command sets the result variable $? to true (0) or false (1): diff --git a/doc/usage/environment.rst b/doc/usage/environment.rst index 7d4b448cb30..cc33d3ec0f2 100644 --- a/doc/usage/environment.rst +++ b/doc/usage/environment.rst @@ -100,7 +100,7 @@ to add environment variables. Board maintainers are encouraged to migrate to the text-based environment as it is easier to maintain. The distro-board script still requires the old-style -environments, so use :doc:`../develop/bootstd` instead. +environments, so use :doc:`/develop/bootstd/index` instead. List of environment variables diff --git a/doc/usage/fit/index.rst b/doc/usage/fit/index.rst index bd25bd30b28..a822bf20cb2 100644 --- a/doc/usage/fit/index.rst +++ b/doc/usage/fit/index.rst @@ -4,16 +4,29 @@ Flat Image Tree (FIT) ===================== U-Boot uses Flat Image Tree (FIT) as a standard file format for packaging -images that it it reads and boots. Documentation about FIT is available at -doc/uImage.FIT +images that it reads and boots. Documentation about FIT is available in +`the Flattened Image Tree project <https://fitspec.osfw.foundation/>`_. .. toctree:: :maxdepth: 1 - source_file_format + beaglebone_vboot howto - x86-fit-boot + kernel_fdt + kernel_fdts_compressed + kernel + multi + multi_spl + multi-with-fpga + multi-with-loadables + overlay-fdt-boot + sec_firmware_ppa signature + sign-configs + sign-images + source_file_format + uefi + update3 + update_uboot verified-boot - beaglebone_vboot - overlay-fdt-boot + x86-fit-boot
\ No newline at end of file diff --git a/doc/usage/fit/source_file_format.rst b/doc/usage/fit/source_file_format.rst index 7727ab77c54..2bd8e792350 100644 --- a/doc/usage/fit/source_file_format.rst +++ b/doc/usage/fit/source_file_format.rst @@ -1,684 +1,8 @@ -.. SPDX-License-Identifier: GPL-2.0+ +.. SPDX-License-Identifier: GPL-2.0-or-later Flattened Image Tree (FIT) Format ================================= -Introduction ------------- - -The number of elements playing a role in the kernel booting process has -increased over time and now typically includes the devicetree, kernel image and -possibly a ramdisk image. Generally, all must be placed in the system memory and -booted together. - -For firmware images a similar process has taken place, with various binaries -loaded at different addresses, such as ARM's ATF, OpenSBI, FPGA and U-Boot -itself. - -FIT provides a flexible and extensible format to deal with this complexity. It -provides support for multiple components. It also supports multiple -configurations, so that the same FIT can be used to boot multiple boards, with -some components in common (e.g. kernel) and some specific to that board (e.g. -devicetree). - -Terminology -~~~~~~~~~~~ - -This document defines FIT by providing FDT (Flat Device Tree) bindings. These -describe the final form of the FIT at the moment when it is used. The user -perspective may be simpler, as some of the properties (like timestamps and -hashes) are filled in automatically by the U-Boot mkimage tool. - -To avoid confusion with the kernel FDT the following naming convention is used: - -FIT - Flattened Image Tree - -FIT is formally a flattened devicetree (in the libfdt meaning), which conforms -to bindings defined in this document. - -.its - image tree source - -.itb - flattened image tree blob - -Image-building procedure -~~~~~~~~~~~~~~~~~~~~~~~~ - -The following picture shows how the FIT is prepared. Input consists of -image source file (.its) and a set of data files. Image is created with the -help of standard U-Boot mkimage tool which in turn uses dtc (device tree -compiler) to produce image tree blob (.itb). The resulting .itb file is the -actual binary of a new FIT:: - - tqm5200.its - + - vmlinux.bin.gz mkimage + dtc xfer to target - eldk-4.2-ramdisk --------------> tqm5200.itb --------------> boot - tqm5200.dtb /|\ - | - 'new FIT' - -Steps: - -#. Create .its file, automatically filled-in properties are omitted - -#. Call mkimage tool on a .its file - -#. mkimage calls dtc to create .itb image and assures that - missing properties are added - -#. .itb (new FIT) is uploaded onto the target and used therein - - -Unique identifiers -~~~~~~~~~~~~~~~~~~ - -To identify FIT sub-nodes representing images, hashes, configurations (which -are defined in the following sections), the "unit name" of the given sub-node -is used as it's identifier as it assures uniqueness without additional -checking required. - - -External data -~~~~~~~~~~~~~ - -FIT is normally built initially with image data in the 'data' property of each -image node. It is also possible for this data to reside outside the FIT itself. -This allows the 'FDT' part of the FIT to be quite small, so that it can be -loaded and scanned without loading a large amount of data. Then when an image is -needed it can be loaded from an external source. - -External FITs use 'data-offset' or 'data-position' instead of 'data'. - -The mkimage tool can convert a FIT to use external data using the `-E` argument, -optionally using `-p` to specific a fixed position. - -It is often desirable to align each image to a block size or cache-line size -(e.g. 512 bytes), so that there is no need to copy it to an aligned address when -reading the image data. The mkimage tool provides a `-B` argument to support -this. - -Root-node properties --------------------- - -The root node of the FIT should have the following layout:: - - / o image-tree - |- description = "image description" - |- timestamp = <12399321> - |- #address-cells = <1> - | - o images - | | - | o image-1 {...} - | o image-2 {...} - | ... - | - o configurations - |- default = "conf-1" - | - o conf-1 {...} - o conf-2 {...} - ... - -Optional property -~~~~~~~~~~~~~~~~~ - -description - Textual description of the FIT - -Mandatory property -~~~~~~~~~~~~~~~~~~ - -timestamp - Last image modification time being counted in seconds since - 1970-01-01 00:00:00 - to be automatically calculated by mkimage tool. - -Conditionally mandatory property -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -#address-cells - Number of 32bit cells required to represent entry and - load addresses supplied within sub-image nodes. May be omitted when no - entry or load addresses are used. - -Mandatory nodes -~~~~~~~~~~~~~~~ - -images - This node contains a set of sub-nodes, each of them representing - single component sub-image (like kernel, ramdisk, etc.). At least one - sub-image is required. - -configurations - Contains a set of available configuration nodes and - defines a default configuration. - - -'/images' node --------------- - -This node is a container node for component sub-image nodes. Each sub-node of -the '/images' node should have the following layout:: - - o image-1 - |- description = "component sub-image description" - |- data = /incbin/("path/to/data/file.bin") - |- type = "sub-image type name" - |- arch = "ARCH name" - |- os = "OS name" - |- compression = "compression name" - |- load = <00000000> - |- entry = <00000000> - | - o hash-1 {...} - o hash-2 {...} - ... - -Mandatory properties -~~~~~~~~~~~~~~~~~~~~ - -description - Textual description of the component sub-image - -type - Name of component sub-image type. Supported types are: - - ==================== ================== - Sub-image type Meaning - ==================== ================== - invalid Invalid Image - aisimage Davinci AIS image - atmelimage ATMEL ROM-Boot Image - copro Coprocessor Image - fdt_legacy legacy Image with Flat Device Tree - filesystem Filesystem Image - firmware Firmware - firmware_ivt Firmware with HABv4 IVT - flat_dt Flat Device Tree - fpga FPGA Device Image (bitstream file, vendor specific) - gpimage TI Keystone SPL Image - imx8image NXP i.MX8 Boot Image - imx8mimage NXP i.MX8M Boot Image - imximage Freescale i.MX Boot Image - kernel Kernel Image - kernel_noload Kernel Image (no loading done) - kwbimage Kirkwood Boot Image - lpc32xximage LPC32XX Boot Image - mtk_image MediaTek BootROM loadable Image - multi Multi-File Image - mxsimage Freescale MXS Boot Image - omapimage TI OMAP SPL With GP CH - pblimage Freescale PBL Boot Image - pmmc TI Power Management Micro-Controller Firmware - ramdisk RAMDisk Image - rkimage Rockchip Boot Image - rksd Rockchip SD Boot Image - rkspi Rockchip SPI Boot Image - script Script - socfpgaimage Altera SoCFPGA CV/AV preloader - socfpgaimage_v1 Altera SoCFPGA A10 preloader - spkgimage Renesas SPKG Image - standalone Standalone Program - stm32image STMicroelectronics STM32 Image - sunxi_egon Allwinner eGON Boot Image - sunxi_toc0 Allwinner TOC0 Boot Image - tee Trusted Execution Environment Image - ublimage Davinci UBL image - vybridimage Vybrid Boot Image - x86_setup x86 setup.bin - zynqimage Xilinx Zynq Boot Image - zynqmpbif Xilinx ZynqMP Boot Image (bif) - zynqmpimage Xilinx ZynqMP Boot Image - ==================== ================== - -compression - Compression used by included data. If no compression is used, the - compression property should be set to "none". If the data is compressed but - it should not be uncompressed by the loader (e.g. compressed ramdisk), this - should also be set to "none". - - Supported compression types are: - - ==================== ================== - Compression type Meaning - ==================== ================== - none uncompressed - bzip2 bzip2 compressed - gzip gzip compressed - lz4 lz4 compressed - lzma lzma compressed - lzo lzo compressed - zstd zstd compressed - ==================== ================== - -data-size - size of the data in bytes - - -Conditionally mandatory property -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -data - Path to the external file which contains this node's binary data. Within - the FIT this is the contents of the file. This is mandatory unless - external data is used. - -data-offset - Offset of the data in a separate image store. The image store is placed - immediately after the last byte of the device tree binary, aligned to a - 4-byte boundary. This is mandatory if external data is used, with an offset. - -data-position - Machine address at which the data is to be found. This is a fixed address - not relative to the loading of the FIT. This is mandatory if external data - used with a fixed address. - -os - OS name, mandatory for types "kernel". Valid OS names are: - - ==================== ================== - OS name Meaning - ==================== ================== - invalid Invalid OS - 4_4bsd 4_4BSD - arm-trusted-firmware ARM Trusted Firmware - dell Dell - efi EFI Firmware - esix Esix - freebsd FreeBSD - integrity INTEGRITY - irix Irix - linux Linux - ncr NCR - netbsd NetBSD - openbsd OpenBSD - openrtos OpenRTOS - opensbi RISC-V OpenSBI - ose Enea OSE - plan9 Plan 9 - psos pSOS - qnx QNX - rtems RTEMS - sco SCO - solaris Solaris - svr4 SVR4 - tee Trusted Execution Environment - u-boot U-Boot - vxworks VxWorks - ==================== ================== - -arch - Architecture name, mandatory for types: "standalone", "kernel", - "firmware", "ramdisk" and "fdt". Valid architecture names are: - - ==================== ================== - Architecture type Meaning - ==================== ================== - invalid Invalid ARCH - alpha Alpha - arc ARC - arm64 AArch64 - arm ARM - avr32 AVR32 - blackfin Blackfin - ia64 IA64 - m68k M68K - microblaze MicroBlaze - mips64 MIPS 64 Bit - mips MIPS - nds32 NDS32 - nios2 NIOS II - or1k OpenRISC 1000 - powerpc PowerPC - ppc PowerPC - riscv RISC-V - s390 IBM S390 - sandbox Sandbox - sh SuperH - sparc64 SPARC 64 Bit - sparc SPARC - x86_64 AMD x86_64 - x86 Intel x86 - xtensa Xtensa - ==================== ================== - -entry - entry point address, address size is determined by - '#address-cells' property of the root node. - Mandatory for types: "firmware", and "kernel". - -load - load address, address size is determined by '#address-cells' - property of the root node. - Mandatory for types: "firmware", and "kernel". - -compatible - compatible method for loading image. - Mandatory for types: "fpga", and images that do not specify a load address. - Supported compatible methods: - - ========================== ========================================= - Compatible string Meaning - ========================== ========================================= - u-boot,fpga-legacy Generic fpga loading routine. - u-boot,zynqmp-fpga-ddrauth Signed non-encrypted FPGA bitstream for - Xilinx Zynq UltraScale+ (ZymqMP) device. - u-boot,zynqmp-fpga-enc Encrypted FPGA bitstream for Xilinx Zynq - UltraScale+ (ZynqMP) device. - ========================== ========================================= - -phase - U-Boot phase for which the image is intended. - - "spl" - image is an SPL image - - "u-boot" - image is a U-Boot image - -Optional nodes: - -hash-1 - Each hash sub-node represents separate hash or checksum - calculated for node's data according to specified algorithm. - -signature-1 - Each signature sub-node represents separate signature - calculated for node's data according to specified algorithm. - - -Hash nodes ----------- - -:: - - o hash-1 - |- algo = "hash or checksum algorithm name" - |- value = [hash or checksum value] - -Mandatory properties -~~~~~~~~~~~~~~~~~~~~ - -algo - Algorithm name. Supported algoriths and their value sizes are: - - ==================== ============ ========================================= - Sub-image type Size (bytes) Meaning - ==================== ============ ========================================= - crc16-ccitt 2 Cyclic Redundancy Check 16-bit - (Consultative Committee for International - Telegraphy and Telephony) - crc32 4 Cyclic Redundancy Check 32-bit - md5 16 Message Digest 5 (MD5) - sha1 20 Secure Hash Algorithm 1 (SHA1) - sha256 32 Secure Hash Algorithm 2 (SHA256) - sha384 48 Secure Hash Algorithm 2 (SHA384) - sha512 64 Secure Hash Algorithm 2 (SHA512) - ==================== ============ ========================================= - -value - Actual checksum or hash value. - -Image-signature nodes ---------------------- - -:: - - o signature-1 - |- algo = "algorithm name" - |- key-name-hint = "key name" - |- value = [hash or checksum value] - - -Mandatory properties -~~~~~~~~~~~~~~~~~~~~ - -_`FIT Algorithm`: - -algo - Algorithm name. Supported algoriths and their value sizes are shown below. - Note that the hash is specified separately from the signing algorithm, so - it is possible to mix and match any SHA algorithm with any signing - algorithm. The size of the signature relates to the signing algorithm, not - the hash, since it is the hash that is signed. - - ==================== ============ ========================================= - Sub-image type Size (bytes) Meaning - ==================== ============ ========================================= - sha1,rsa2048 256 SHA1 hash signed with 2048-bit - Rivest–Shamir–Adleman algorithm - sha1,rsa3072 384 SHA1 hash signed with 2048-bit RSA - sha1,rsa4096 512 SHA1 hash signed with 2048-bit RSA - sha1,ecdsa256 32 SHA1 hash signed with 256-bit Elliptic - Curve Digital Signature Algorithm - sha256,... - sha384,... - sha512,... - ==================== ============ ========================================= - -key-name-hint - Name of key to use for signing. The keys will normally be in - a single directory (parameter -k to mkimage). For a given key <name>, its - private key is stored in <name>.key and the certificate is stored in - <name>.crt. - -sign-images - A list of images to sign, each being a property of the conf - node that contains then. The default is "kernel,fdt" which means that these - two images will be looked up in the config and signed if present. This is - used by mkimage to determine which images to sign. - -The following properies are added as part of signing, and are mandatory: - -value - Actual signature value. This is added by mkimage. - -hashed-nodes - A list of nodes which were hashed by the signer. Each is - a string - the full path to node. A typical value might be:: - - hashed-nodes = "/", "/configurations/conf-1", "/images/kernel", - "/images/kernel/hash-1", "/images/fdt-1", - "/images/fdt-1/hash-1"; - -hashed-strings - The start and size of the string region of the FIT that was hashed. The - start is normally 0, indicating the first byte of the string table. The size - indicates the number of bytes hashed as part of signing. - -The following properies are added as part of signing, and are optional: - -timestamp - Time when image was signed (standard Unix time_t format) - -signer-name - Name of the signer (e.g. "mkimage") - -signer-version - Version string of the signer (e.g. "2013.01") - -comment - Additional information about the signer or image - -padding - The padding algorithm, it may be pkcs-1.5 or pss, - if no value is provided we assume pkcs-1.5 - - -'/configurations' node ----------------------- - -The 'configurations' node creates convenient, labeled boot configurations, -which combine together kernel images with their ramdisks and fdt blobs. - -The 'configurations' node has the following structure:: - - o configurations - |- default = "default configuration sub-node unit name" - | - o config-1 {...} - o config-2 {...} - ... - - -Optional property -~~~~~~~~~~~~~~~~~ - -default - Selects one of the configuration sub-nodes as a default configuration. - -Mandatory nodes -~~~~~~~~~~~~~~~ - -configuration-sub-node-unit-name - At least one of the configuration sub-nodes is required. - -Optional nodes -~~~~~~~~~~~~~~ - -signature-1 - Each signature sub-node represents separate signature - calculated for the configuration according to specified algorithm. - - -Configuration nodes -------------------- - -Each configuration has the following structure:: - - o config-1 - |- description = "configuration description" - |- kernel = "kernel sub-node unit name" - |- fdt = "fdt sub-node unit-name" [, "fdt overlay sub-node unit-name", ...] - |- loadables = "loadables sub-node unit-name" - |- script = " - |- compatible = "vendor,board-style device tree compatible string" - o signature-1 {...} - -Mandatory properties -~~~~~~~~~~~~~~~~~~~~ - -description - Textual configuration description. - -kernel or firmware - Unit name of the corresponding kernel or firmware - (u-boot, op-tee, etc) image. If both "kernel" and "firmware" are specified, - control is passed to the firmware image. - -Optional properties -~~~~~~~~~~~~~~~~~~~ - -fdt - Unit name of the corresponding fdt blob (component image node of a - "fdt type"). Additional fdt overlay nodes can be supplied which signify - that the resulting device tree blob is generated by the first base fdt - blob with all subsequent overlays applied. - -fpga - Unit name of the corresponding fpga bitstream blob - (component image node of a "fpga type"). - -loadables - Unit name containing a list of additional binaries to be - loaded at their given locations. "loadables" is a comma-separated list - of strings. U-Boot will load each binary at its given start-address and - may optionally invoke additional post-processing steps on this binary based - on its component image node type. - -script - The image to use when loading a U-Boot script (for use with the - source command). - -compatible - The root compatible string of the U-Boot device tree that - this configuration shall automatically match when CONFIG_FIT_BEST_MATCH is - enabled. If this property is not provided, the compatible string will be - extracted from the fdt blob instead. This is only possible if the fdt is - not compressed, so images with compressed fdts that want to use compatible - string matching must always provide this property. - -The FDT blob is required to properly boot FDT based kernel, so the minimal -configuration for 2.6 FDT kernel is (kernel, fdt) pair. - -Older, 2.4 kernel and 2.6 non-FDT kernel do not use FDT blob, in such cases -'struct bd_info' must be passed instead of FDT blob, thus fdt property *must -not* be specified in a configuration node. - -Configuration-signature nodes ------------------------------ - -:: - - o signature-1 - |- algo = "algorithm name" - |- key-name-hint = "key name" - |- sign-images = "path1", "path2"; - |- value = [hash or checksum value] - |- hashed-strings = <0 len> - - -Mandatory properties -~~~~~~~~~~~~~~~~~~~~ - -algo - See `FIT Algorithm`_. - -key-name-hint - Name of key to use for signing. The keys will normally be in - a single directory (parameter -k to mkimage). For a given key <name>, its - private key is stored in <name>.key and the certificate is stored in - <name>.crt. - -The following properies are added as part of signing, and are mandatory: - -value - Actual signature value. This is added by mkimage. - -The following properies are added as part of signing, and are optional: - -timestamp - Time when image was signed (standard Unix time_t format) - -signer-name - Name of the signer (e.g. "mkimage") - -signer-version - Version string of the signer (e.g. "2013.01") - -comment - Additional information about the signer or image - -padding - The padding algorithm, it may be pkcs-1.5 or pss, - if no value is provided we assume pkcs-1.5 - - - -Examples --------- - -Some example files are available here, showing various scenarios - -.. toctree:: - :maxdepth: 1 - - kernel - kernel_fdt - kernel_fdts_compressed - multi - multi_spl - multi-with-fpga - multi-with-loadables - sec_firmware_ppa - sign-configs - sign-images - uefi - update3 - update_uboot - -.. sectionauthor:: Marian Balakowicz <m8@semihalf.com> -.. sectionauthor:: External data additions, 25/1/16 Simon Glass <sjg@chromium.org> +FIT format documentation has been moved to +`a separate project <https://fitspec.osfw.foundation/>`_. Updates to the +format/specification should be submitted there. diff --git a/doc/usage/index.rst b/doc/usage/index.rst index 2f211f748ab..49b354e6ffd 100644 --- a/doc/usage/index.rst +++ b/doc/usage/index.rst @@ -33,6 +33,7 @@ Shell commands cmd/bootd cmd/bootdev cmd/bootefi + cmd/bootelf cmd/bootflow cmd/booti cmd/bootm |