Merge tag 'u-boot-stm32-20200528' of https://gitlab.denx.de/u-boot/custodians/u-boot-stm
[oweals/u-boot.git] / doc / README.ti-secure
index 7fc9b9bc30fa34ca5c3781eb8b0f7b26ef1f90f8..27c0eaa77f14f783904188785a099dbe81b0e264 100644 (file)
@@ -19,73 +19,208 @@ control restrictions. Access must be requested and granted by TI before the
 package is viewable and downloadable. Contact TI, either online or by way
 of a local TI representative, to request access.
 
-When CONFIG_TI_SECURE_DEVICE is set, the U-Boot SPL build process requires
-the presence and use of these tools in order to create a viable boot image.
-The build process will look for the environment variable TI_SECURE_DEV_PKG,
-which should be the path of the installed SECDEV package. If the
-TI_SECURE_DEV_PKG variable is not defined or if it is defined but doesn't
-point to a valid SECDEV package, a warning is issued during the build to
-indicate that a final secure bootable image was not created.
-
-Within the SECDEV package exists an image creation script:
-
-${TI_SECURE_DEV_PKG}/scripts/create-boot-image.sh
-
-This is called as part of the SPL/u-boot build process. As the secure boot
-image formats and requirements differ between secure SOC from TI, the
-purpose of this script is to abstract these details as much as possible.
-
-The script is basically the only required interface to the TI SECDEV package
-for secure TI devices.
-
-Invoking the script for AM43xx Secure Devices
-=============================================
-
-create-boot-image.sh <IMAGE_FLAG> <INPUT_FILE> <OUTPUT_FILE> <SPL_LOAD_ADDR>
-
-<IMAGE_FLAG> is a value that specifies the type of the image to generate OR
-the action the image generation tool will take. Valid values are:
-       SPI_X-LOADER - Generates an image for SPI flash (byte swapped)
-       XIP_X-LOADER - Generates a single stage u-boot for NOR/QSPI XiP
-       ISSW - Generates an image for all other boot modes
-
-<INPUT_FILE> is the full path and filename of the public world boot loader
-binary file (depending on the boot media, this is usually either
-u-boot-spl.bin or u-boot.bin).
-
-<OUTPUT_FILE> is the full path and filename of the final secure image. The
-output binary images should be used in place of the standard non-secure
-binary images (see the platform-specific user's guides and releases notes
-for how the non-secure images are typically used)
+Booting of U-Boot SPL
+=====================
+
+       When CONFIG_TI_SECURE_DEVICE is set, the U-Boot SPL build process
+       requires the presence and use of these tools in order to create a
+       viable boot image. The build process will look for the environment
+       variable TI_SECURE_DEV_PKG, which should be the path of the installed
+       SECDEV package. If the TI_SECURE_DEV_PKG variable is not defined or
+       if it is defined but doesn't point to a valid SECDEV package, a
+       warning is issued during the build to indicate that a final secure
+       bootable image was not created.
+
+       Within the SECDEV package exists an image creation script:
+
+       ${TI_SECURE_DEV_PKG}/scripts/create-boot-image.sh
+
+       This is called as part of the SPL/u-boot build process. As the secure
+       boot image formats and requirements differ between secure SOC from TI,
+       the purpose of this script is to abstract these details as much as
+       possible.
+
+       The script is basically the only required interface to the TI SECDEV
+       package for creating a bootable SPL image for secure TI devices.
+
+       Invoking the script for AM33xx Secure Devices
+       =============================================
+
+       create-boot-image.sh \
+               <IMAGE_FLAG> <INPUT_FILE> <OUTPUT_FILE> <SPL_LOAD_ADDR>
+
+       <IMAGE_FLAG> is a value that specifies the type of the image to
+       generate OR the action the image generation tool will take. Valid
+       values are:
+               SPI_X-LOADER - Generates an image for SPI flash (byte swapped)
+               X-LOADER - Generates an image for non-XIP flash
+               MLO - Generates an image for SD/MMC/eMMC media
+               2ND - Generates an image for USB, UART and Ethernet
+               XIP_X-LOADER - Generates a single stage u-boot for NOR/QSPI XiP
+
+       <INPUT_FILE> is the full path and filename of the public world boot
+       loaderbinary file (depending on the boot media, this is usually
+       either u-boot-spl.bin or u-boot.bin).
+
+       <OUTPUT_FILE> is the full path and filename of the final secure
+       image. The output binary images should be used in place of the standard
+       non-secure binary images (see the platform-specific user's guides and
+       releases notes for how the non-secure images are typically used)
+       u-boot-spl_HS_SPI_X-LOADER - byte swapped boot image for SPI flash
+       u-boot-spl_HS_X-LOADER - boot image for NAND or SD/MMC/eMMC rawmode
+       u-boot-spl_HS_MLO - boot image for SD/MMC/eMMC media
+       u-boot-spl_HS_2ND - boot image for USB, UART and Ethernet
+       u-boot_HS_XIP_X-LOADER - boot image for NOR or QSPI Xip flash
+
+       <SPL_LOAD_ADDR> is the address at which SOC ROM should load the
+       <INPUT_FILE>
+
+       Invoking the script for AM43xx Secure Devices
+       =============================================
+
+       create-boot-image.sh \
+               <IMAGE_FLAG> <INPUT_FILE> <OUTPUT_FILE> <SPL_LOAD_ADDR>
+
+       <IMAGE_FLAG> is a value that specifies the type of the image to
+       generate OR the action the image generation tool will take. Valid
+       values are:
+               SPI_X-LOADER - Generates an image for SPI flash (byte
+                       swapped)
+               XIP_X-LOADER - Generates a single stage u-boot for
+                       NOR/QSPI XiP
+               ISSW - Generates an image for all other boot modes
+
+       <INPUT_FILE> is the full path and filename of the public world boot
+       loaderbinary file (depending on the boot media, this is usually
+       either u-boot-spl.bin or u-boot.bin).
+
+       <OUTPUT_FILE> is the full path and filename of the final secure
+       image. The output binary images should be used in place of the standard
+       non-secure binary images (see the platform-specific user's guides and
+       releases notes for how the non-secure images are typically used)
        u-boot-spl_HS_SPI_X-LOADER - byte swapped boot image for SPI flash
        u-boot_HS_XIP_X-LOADER - boot image for NOR or QSPI flash
        u-boot-spl_HS_ISSW - boot image for all other boot media
 
-<SPL_LOAD_ADDR> is the address at which SOC ROM should load the <INPUT_FILE>
+       <SPL_LOAD_ADDR> is the address at which SOC ROM should load the
+       <INPUT_FILE>
 
-Invoking the script for DRA7xx/AM57xx Secure Devices
-====================================================
+       Invoking the script for DRA7xx/AM57xx Secure Devices
+       ====================================================
 
-create-boot-image.sh <IMAGE_TYPE> <INPUT_FILE> <OUTPUT_FILE>
+       create-boot-image.sh \
+               <IMAGE_TYPE> <INPUT_FILE> <OUTPUT_FILE> <SPL_LOAD_ADDR>
 
-<IMAGE_TYPE> is a value that specifies the type of the image to generate OR
-the action the image generation tool will take. Valid values are:
-       X-LOADER - Generates an image for NOR or QSPI boot modes
-       MLO - Generates an image for SD/MMC/eMMC boot modes
-       ULO - Generates an image for USB/UART peripheral boot modes
-       Note: ULO is not yet used by the u-boot build process
+       <IMAGE_TYPE> is a value that specifies the type of the image to
+       generate OR the action the image generation tool will take. Valid
+       values are:
+               X-LOADER - Generates an image for NOR or QSPI boot modes
+               MLO - Generates an image for SD/MMC/eMMC boot modes
+               ULO - Generates an image for USB/UART peripheral boot modes
 
-<INPUT_FILE> is the full path and filename of the public world boot loader
-binary file (for this platform, this is always u-boot-spl.bin).
+       <INPUT_FILE> is the full path and filename of the public world boot
+       loader binary file (for this platform, this is always u-boot-spl.bin).
 
-<OUTPUT_FILE> is the full path and filename of the final secure image. The
-output binary images should be used in place of the standard non-secure
-binary images (see the platform-specific user's guides and releases notes
-for how the non-secure images are typically used)
+       <OUTPUT_FILE> is the full path and filename of the final secure image.
+       The output binary images should be used in place of the standard
+       non-secure binary images (see the platform-specific user's guides
+       and releases notes for how the non-secure images are typically used)
        u-boot-spl_HS_MLO - boot image for SD/MMC/eMMC. This image is
                copied to a file named MLO, which is the name that
                the device ROM bootloader requires for loading from
                the FAT partition of an SD card (same as on
                non-secure devices)
+       u-boot-spl_HS_ULO - boot image for USB/UART peripheral boot modes
        u-boot-spl_HS_X-LOADER - boot image for all other flash memories
                including QSPI and NOR flash
+
+       <SPL_LOAD_ADDR> is the address at which SOC ROM should load the
+       <INPUT_FILE>
+
+       Invoking the script for Keystone2 Secure Devices
+       ================================================
+
+       create-boot-image.sh \
+               <UNUSED> <INPUT_FILE> <OUTPUT_FILE> <UNUSED>
+
+       <UNUSED> is currently ignored and reserved for future use.
+
+       <INPUT_FILE> is the full path and filename of the public world boot
+       loader binary file (only u-boot.bin is currently supported on
+       Keystone2 devices, u-boot-spl.bin is not currently supported).
+
+       <OUTPUT_FILE> is the full path and filename of the final secure image.
+       The output binary images should be used in place of the standard
+       non-secure binary images (see the platform-specific user's guides
+       and releases notes for how the non-secure images are typically used)
+       u-boot_HS_MLO - signed and encrypted boot image that can be used to
+               boot from all media. Secure boot from SPI NOR flash is not
+               currently supported.
+
+       Invoking the script for K3 Secure Devices
+       =========================================
+
+       The signing steps required to produce a bootable SPL image on secure
+       K3 TI devices are the same as those performed on non-secure devices.
+       The only difference is the key is not checked on non-secure devices so
+       a dummy key is used when building U-Boot for those devices. For secure
+       K3 TI devices simply use the real hardware key for your device. This
+       real key can be set with the Kconfig option "K3_KEY". The environment
+       variable TI_SECURE_DEV_PKG is also searched for real keys when the
+       build targets secure devices.
+
+Booting of Primary U-Boot (u-boot.img)
+======================================
+
+       The SPL image is responsible for loading the next stage boot loader,
+       which is the main u-boot image. For secure TI devices, the SPL will
+       be authenticated, as described above, as part of the particular
+       device's ROM boot process. In order to continue the secure boot
+       process, the authenticated SPL must authenticate the main u-boot
+       image that it loads.
+
+       The configurations for secure TI platforms are written to make the boot
+       process use the FIT image format for the u-boot.img (CONFIG_SPL_FRAMEWORK
+       and CONFIG_SPL_LOAD_FIT). With these configurations the binary
+       components that the SPL loads include a specific DTB image and u-boot
+       image. These DTB image may be one of many available to the boot
+       process. In order to secure these components so that they can be
+       authenticated by the SPL as they are loaded from the FIT image, the
+       build procedure for secure TI devices will secure these images before
+       they are integrated into the FIT image. When those images are extracted
+       from the FIT image at boot time, they are post-processed to verify that
+       they are still secure. The outlined security-related SPL post-processing
+       is enabled through the CONFIG_SPL_FIT_IMAGE_POST_PROCESS option which
+       must be enabled for the secure boot scheme to work. In order to allow
+       verifying proper operation of the secure boot chain in case of successful
+       authentication messages like "Authentication passed" are output by the
+       SPL to the console for each blob that got extracted from the FIT image.
+
+       The exact details of the how the images are secured is handled by the
+       SECDEV package. Within the SECDEV package exists a script to process
+       an input binary image:
+
+       ${TI_SECURE_DEV_PKG}/scripts/secure-binary-image.sh
+
+       This is called as part of the u-boot build process. As the secure
+       image formats and requirements can differ between the various secure
+       SOCs from TI, this script in the SECDEV package abstracts these
+       details. This script is essentially the only required interface to the
+       TI SECDEV package for creating a u-boot.img image for secure TI
+       devices.
+
+       The SPL/u-boot code contains calls to dedicated secure ROM functions
+       to perform the validation on the secured images. The details of the
+       interface to those functions is shown in the code. The summary
+       is that they are accessed by invoking an ARM secure monitor call to
+       the device's secure ROM (fixed read-only-memory that is secure and
+       only accessible when the ARM core is operating in the secure mode).
+
+       Invoking the secure-binary-image script for Secure Devices
+       ==========================================================
+
+       secure-binary-image.sh <INPUT_FILE> <OUTPUT_FILE>
+
+       <INPUT_FILE> is the full path and filename of the input binary image
+
+       <OUTPUT_FILE> is the full path and filename of the output secure image.