| README on how boot images are created for secure TI devices | 
 |  | 
 | CONFIG_TI_SECURE_DEVICE: | 
 | Secure TI devices require a boot image that is authenticated by ROM | 
 | code to function. Without this, even JTAG remains locked and the | 
 | device is essentially useless. In order to create a valid boot image for | 
 | a secure device from TI, the initial public software image must be signed | 
 | and combined with various headers, certificates, and other binary images. | 
 |  | 
 | Information on the details on the complete boot image format can be obtained | 
 | from Texas Instruments. The tools used to generate boot images for secure | 
 | devices are part of a secure development package (SECDEV) that can be | 
 | downloaded from: | 
 |  | 
 | 	http://www.ti.com/mysecuresoftware (login required) | 
 |  | 
 | The secure development package is access controlled due to NDA and export | 
 | 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. | 
 |  | 
 | 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> | 
 |  | 
 | 	Invoking the script for DRA7xx/AM57xx Secure Devices | 
 | 	==================================================== | 
 |  | 
 | 	create-boot-image.sh <IMAGE_TYPE> <INPUT_FILE> <OUTPUT_FILE> | 
 |  | 
 | 	<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 | 
 |  | 
 | 	<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) | 
 | 	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_X-LOADER - boot image for all other flash memories | 
 | 		including QSPI and NOR flash | 
 |  | 
 | 	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. | 
 |  | 
 | 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: CERT_U-BOOT-NOD" are | 
 | 	output by the SPL to the console for each blob that got extracted from the | 
 | 	FIT image. Note that the last part of this log message is the (truncated) | 
 | 	name of the signing certificate embedded into the blob that got processed. | 
 |  | 
 | 	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. |