mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 07:04:28 +00:00
doc: board: ti: Move documentation from README to .rst
Make the conversion for all existing TI documentation from README to .rst Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
This commit is contained in:
parent
129048a3b7
commit
7314ba2bf8
11 changed files with 959 additions and 718 deletions
|
@ -1,26 +0,0 @@
|
|||
Summary
|
||||
=======
|
||||
|
||||
This document covers various features of the 'dra7xx_evm' build and some
|
||||
related uses.
|
||||
|
||||
eMMC boot partition use
|
||||
=======================
|
||||
|
||||
It is possible, depending on SYSBOOT configuration to boot from the eMMC
|
||||
boot partitions using (name depending on documentation referenced)
|
||||
Alternative Boot operation mode or Boot Sequence Option 1/2. In this
|
||||
example we load MLO and u-boot.img from the build into DDR and then use
|
||||
'mmc bootbus' to set the required rate (see TRM) and 'mmc partconfig' to
|
||||
set boot0 as the boot device.
|
||||
U-Boot # setenv autoload no
|
||||
U-Boot # usb start
|
||||
U-Boot # dhcp
|
||||
U-Boot # mmc dev 1 1
|
||||
U-Boot # tftp ${loadaddr} dra7xx/MLO
|
||||
U-Boot # mmc write ${loadaddr} 0 100
|
||||
U-Boot # tftp ${loadaddr} dra7xx/u-boot.img
|
||||
U-Boot # mmc write ${loadaddr} 300 400
|
||||
U-Boot # mmc bootbus 1 2 0 2
|
||||
U-Boot # mmc partconf 1 1 1 0
|
||||
U-Boot # mmc rst-function 1 1
|
|
@ -1,194 +0,0 @@
|
|||
U-Boot port for Texas Instruments Keystone II EVM boards
|
||||
========================================================
|
||||
|
||||
Author: Murali Karicheri <m-karicheri2@ti.com>
|
||||
|
||||
This README has information on the U-Boot port for K2HK, K2E, and K2L EVM boards.
|
||||
Documentation for this board can be found at
|
||||
http://www.advantech.com/Support/TI-EVM/EVMK2HX_sd.aspx
|
||||
https://www.einfochips.com/index.php/partnerships/texas-instruments/k2e-evm.html
|
||||
https://www.einfochips.com/index.php/partnerships/texas-instruments/k2l-evm.html
|
||||
|
||||
The K2HK board is based on Texas Instruments Keystone2 family of SoCs: K2H, K2K.
|
||||
More details on these SoCs are available at company websites
|
||||
K2K: http://www.ti.com/product/tci6638k2k
|
||||
K2H: http://www.ti.com/product/tci6638k2h
|
||||
|
||||
The K2E SoC details are available at
|
||||
http://www.ti.com/lit/ds/symlink/66ak2e05.pdf
|
||||
|
||||
The K2L SoC details are available at
|
||||
http://www.ti.com/lit/ds/symlink/tci6630k2l.pdf
|
||||
|
||||
The K2G SoC details are available at
|
||||
http://www.ti.com/lit/ds/symlink/66ak2g02.pdf
|
||||
|
||||
Board configuration:
|
||||
====================
|
||||
|
||||
Some of the peripherals that are configured by U-Boot
|
||||
+------+-------+-------+-----------+-----------+-------+-------+----+
|
||||
| |DDR3 |NAND |MSM SRAM |ETH ports |UART |I2C |SPI |
|
||||
+------+-------+-------+-----------+-----------+-------+-------+----+
|
||||
|K2HK |2 |512MB |6MB |4(2) |2 |3 |3 |
|
||||
|K2E |4 |512MB |2MB |8(2) |2 |3 |3 |
|
||||
|K2L |2 |512MB |2MB |4(2) |4 |3 |3 |
|
||||
|K2G |2 |256MB |1MB |1 |1 |1 |1 |
|
||||
+------+-------+-------+-----------+-----------+-------+-------+----+
|
||||
|
||||
There are only 2 eth port installed on the boards.
|
||||
|
||||
There are separate PLLs to drive clocks to Tetris ARM and Peripherals.
|
||||
To bring up SMP Linux on this board, there is a boot monitor
|
||||
code that will be installed in MSMC SRAM. There is command available
|
||||
to install this image from U-Boot.
|
||||
|
||||
The port related files can be found at following folders
|
||||
keystone2 SoC related files: arch/arm/cpu/armv7/keystone/
|
||||
EVMs board files: board/ti/k2s_evm/
|
||||
|
||||
Board configuration files:
|
||||
include/configs/k2hk_evm.h
|
||||
include/configs/k2e_evm.h
|
||||
include/configs/k2l_evm.h
|
||||
include/configs/k2g_evm.h
|
||||
|
||||
As U-Boot is migrating to Kconfig there is also board defconfig files
|
||||
configs/k2e_evm_defconfig
|
||||
configs/k2hk_evm_defconfig
|
||||
configs/k2l_evm_defconfig
|
||||
configs/k2g_evm_defconfig
|
||||
|
||||
Supported boot modes:
|
||||
- SPI NOR boot
|
||||
- AEMIF NAND boot (K2E, K2L and K2HK)
|
||||
- UART boot
|
||||
- MMC boot (Only on K2G)
|
||||
|
||||
Supported image formats:
|
||||
- u-boot.bin: for loading and running u-boot.bin through
|
||||
Texas Instruments code composure studio (CCS) and for UART boot.
|
||||
- u-boot-spi.gph: gpimage for programming SPI NOR flash for SPI NOR boot
|
||||
- MLO: gpimage for programming NAND flash for NAND boot, MMC boot.
|
||||
|
||||
Build instructions:
|
||||
===================
|
||||
Examples for k2hk, for k2e, k2l and k2g just replace k2hk prefix accordingly.
|
||||
Don't forget to add CROSS_COMPILE.
|
||||
|
||||
To build u-boot.bin, u-boot-spi.gph, MLO:
|
||||
>make k2hk_evm_defconfig
|
||||
>make
|
||||
|
||||
Load and Run U-Boot on keystone EVMs using CCS
|
||||
=========================================
|
||||
|
||||
Need Code Composer Studio (CCS) installed on a PC to load and run u-boot.bin
|
||||
on EVM. See instructions at below link for installing CCS on a Windows PC.
|
||||
http://processors.wiki.ti.com/index.php/MCSDK_UG_Chapter_Getting_Started#
|
||||
Installing_Code_Composer_Studio
|
||||
Use u-boot.bin from the build folder for loading and running U-Boot binary
|
||||
on EVM. Follow instructions at
|
||||
K2HK http://processors.wiki.ti.com/index.php/EVMK2H_Hardware_Setup
|
||||
K2E http://processors.wiki.ti.com/index.php/EVMK2E_Hardware_Setup
|
||||
K2L http://processors.wiki.ti.com/index.php/TCIEVMK2L_Hardware_Setup
|
||||
K2G http://processors.wiki.ti.com/index.php/66AK2G02_GP_EVM_Hardware_Setup
|
||||
|
||||
to configure SW1 dip switch to use "No Boot/JTAG DSP Little Endian Boot Mode"
|
||||
and Power ON the EVM. Follow instructions to connect serial port of EVM to
|
||||
PC and start TeraTerm or Hyper Terminal.
|
||||
|
||||
Start CCS on a Windows machine and Launch Target
|
||||
configuration as instructed at http://processors.wiki.ti.com/index.php/
|
||||
MCSDK_UG_Chapter_Exploring#Loading_and_Running_U-Boot_on_EVM_through_CCS.
|
||||
The instructions provided in the above link uses a script for
|
||||
loading the U-Boot binary on the target EVM. Instead do the following:-
|
||||
|
||||
1. Right click to "Texas Instruments XDS2xx USB Emulator_0/CortexA15_1 core (D
|
||||
is connected: Unknown)" at the debug window (This is created once Target
|
||||
configuration is launched) and select "Connect Target".
|
||||
2. Once target connect is successful, choose Tools->Load Memory option from the
|
||||
top level menu. At the Load Memory window, choose the file u-boot.bin
|
||||
through "Browse" button and click "next >" button. In the next window, enter
|
||||
Start address as 0xc000000, choose Type-size "32 bits" and click "Finish"
|
||||
button.
|
||||
3. Click View -> Registers from the top level menu to view registers window.
|
||||
4. From Registers, window expand "Core Registers" to view PC. Edit PC value
|
||||
to be 0xc000000. From the "Run" top level menu, select "Free Run"
|
||||
5. The U-Boot prompt is shown at the Tera Term/ Hyper terminal console as
|
||||
below and type any key to stop autoboot as instructed :=
|
||||
|
||||
U-Boot 2014.04-rc1-00201-gc215b5a (Mar 21 2014 - 12:47:59)
|
||||
|
||||
I2C: ready
|
||||
Detected SO-DIMM [SQR-SD3T-2G1333SED]
|
||||
DRAM: 1.1 GiB
|
||||
NAND: 512 MiB
|
||||
Net: K2HK_EMAC
|
||||
Warning: K2HK_EMAC using MAC address from net device
|
||||
, K2HK_EMAC1, K2HK_EMAC2, K2HK_EMAC3
|
||||
Hit any key to stop autoboot: 0
|
||||
|
||||
SPI NOR Flash programming instructions
|
||||
======================================
|
||||
U-Boot image can be flashed to first 512KB of the NOR flash using following
|
||||
instructions:
|
||||
|
||||
1. Start CCS and run U-Boot as described above.
|
||||
2. Suspend Target. Select Run -> Suspend from top level menu
|
||||
CortexA15_1 (Free Running)"
|
||||
3. Load u-boot-spi.gph binary from build folder on to DDR address 0x87000000
|
||||
through CCS as described in step 2 of "Load and Run U-Boot on K2HK/K2E/K2L
|
||||
EVM using CCS", but using address 0x87000000.
|
||||
4. Free Run the target as described earlier (step 4) to get U-Boot prompt
|
||||
5. At the U-Boot console type following to setup U-Boot environment variables.
|
||||
setenv addr_uboot 0x87000000
|
||||
setenv filesize <size in hex of u-boot-spi.gph rounded to hex 0x10000>
|
||||
run burn_uboot_spi
|
||||
Once U-Boot prompt is available, Power OFF the EVM. Set the SW1 dip switch
|
||||
to "SPI Little Endian Boot mode" as per instruction at
|
||||
http://processors.wiki.ti.com/index.php/*_Hardware_Setup.
|
||||
6. Power ON the EVM. The EVM now boots with U-Boot image on the NOR flash.
|
||||
|
||||
AEMIF NAND Flash programming instructions
|
||||
======================================
|
||||
U-Boot image can be flashed to first 1024KB of the NAND flash using following
|
||||
instructions:
|
||||
|
||||
1. Start CCS and run U-Boot as described above.
|
||||
2. Suspend Target. Select Run -> Suspend from top level menu
|
||||
CortexA15_1 (Free Running)"
|
||||
3. Load MLO binary from build folder on to DDR address 0x87000000
|
||||
through CCS as described in step 2 of "Load and Run U-Boot on K2HK EVM
|
||||
using CCS", but using address 0x87000000.
|
||||
4. Free Run the target as described earlier (step 4) to get U-Boot prompt
|
||||
5. At the U-Boot console type following to setup U-Boot environment variables.
|
||||
setenv filesize <size in hex of MLO rounded to hex 0x10000>
|
||||
run burn_uboot_nand
|
||||
Once U-Boot prompt is available, Power OFF the EVM. Set the SW1 dip switch
|
||||
to "ARM NAND Boot mode" as per instruction at
|
||||
http://processors.wiki.ti.com/index.php/*_Hardware_Setup.
|
||||
6. Power ON the EVM. The EVM now boots with U-Boot image on the NAND flash.
|
||||
|
||||
Load and Run U-Boot on keystone EVMs using UART download
|
||||
========================================================
|
||||
|
||||
Open BMC and regular UART terminals.
|
||||
|
||||
1. On the regular UART port start xmodem transfer of the u-boot.bin
|
||||
2. Using BMC terminal set the ARM-UART bootmode and reboot the EVM
|
||||
BMC> bootmode #4
|
||||
MBC> reboot
|
||||
3. When xmodem is complete you should see the U-Boot starts on the UART port
|
||||
|
||||
Load and Run U-Boot on K2G EVMs using MMC
|
||||
========================================================
|
||||
|
||||
Open BMC and regular UART terminals.
|
||||
|
||||
1. Set the SW3 dip switch to "ARM MMC Boot mode" as per instruction at
|
||||
http://processors.wiki.ti.com/index.php/66AK2G02_GP_EVM_Hardware_Setup
|
||||
2. Create SD card partitions as per steps given in Hardware Setup Guide.
|
||||
3. Copy MLO to Boot Partition.
|
||||
4. Insert SD card and Power on the EVM.
|
||||
The EVM now boots with U-Boot image from SD card.
|
|
@ -1,226 +0,0 @@
|
|||
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> <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
|
||||
|
||||
<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_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.
|
|
@ -1,76 +0,0 @@
|
|||
Testing details-
|
||||
----------------
|
||||
|
||||
This doc simply illustrated the testing details of qspi flash
|
||||
driver with Macronix M25L51235 flash device.
|
||||
|
||||
The test includes
|
||||
- probing the flash device
|
||||
- erasing the flash device
|
||||
- Writing to flash
|
||||
- Reading the contents of the flash.
|
||||
|
||||
Test Log
|
||||
--------
|
||||
|
||||
Hit any key to stop autoboot: 0
|
||||
U-Boot# sf probe 0
|
||||
SF: Detected MX25L51235F with page size 256 Bytes, erase size 64 KiB, total 64 MiB, mapped at 30000000
|
||||
U-Boot# sf erase 0 0x80000
|
||||
SF: 524288 bytes @ 0x0 Erased: OK
|
||||
U-Boot# mw 81000000 0xdededede 0x40000
|
||||
U-Boot# sf write 81000000 0 0x40000
|
||||
SF: 262144 bytes @ 0x0 Written: OK
|
||||
U-Boot# sf read 82000000 0 0x40000
|
||||
SF: 262144 bytes @ 0x0 Read: OK
|
||||
U-Boot# md 0x82000000
|
||||
82000000: dededede dededede dededede dededede ................
|
||||
82000010: dededede dededede dededede dededede ................
|
||||
82000020: dededede dededede dededede dededede ................
|
||||
82000030: dededede dededede dededede dededede ................
|
||||
82000040: dededede dededede dededede dededede ................
|
||||
82000050: dededede dededede dededede dededede ................
|
||||
82000060: dededede dededede dededede dededede ................
|
||||
82000070: dededede dededede dededede dededede ................
|
||||
82000080: dededede dededede dededede dededede ................
|
||||
82000090: dededede dededede dededede dededede ................
|
||||
820000a0: dededede dededede dededede dededede ................
|
||||
820000b0: dededede dededede dededede dededede ................
|
||||
820000c0: dededede dededede dededede dededede ................
|
||||
820000d0: dededede dededede dededede dededede ................
|
||||
820000e0: dededede dededede dededede dededede ................
|
||||
820000f0: dededede dededede dededede dededede ................
|
||||
U-Boot# md 0x82010000
|
||||
82010000: dededede dededede dededede dededede ................
|
||||
82010010: dededede dededede dededede dededede ................
|
||||
82010020: dededede dededede dededede dededede ................
|
||||
82010030: dededede dededede dededede dededede ................
|
||||
82010040: dededede dededede dededede dededede ................
|
||||
82010050: dededede dededede dededede dededede ................
|
||||
82010060: dededede dededede dededede dededede ................
|
||||
82010070: dededede dededede dededede dededede ................
|
||||
82010080: dededede dededede dededede dededede ................
|
||||
82010090: dededede dededede dededede dededede ................
|
||||
820100a0: dededede dededede dededede dededede ................
|
||||
820100b0: dededede dededede dededede dededede ................
|
||||
820100c0: dededede dededede dededede dededede ................
|
||||
820100d0: dededede dededede dededede dededede ................
|
||||
820100e0: dededede dededede dededede dededede ................
|
||||
820100f0: dededede dededede dededede dededede ................
|
||||
U-Boot# md 0x82030000
|
||||
82030000: dededede dededede dededede dededede ................
|
||||
82030010: dededede dededede dededede dededede ................
|
||||
82030020: dededede dededede dededede dededede ................
|
||||
82030030: dededede dededede dededede dededede ................
|
||||
82030040: dededede dededede dededede dededede ................
|
||||
82030050: dededede dededede dededede dededede ................
|
||||
82030060: dededede dededede dededede dededede ................
|
||||
82030070: dededede dededede dededede dededede ................
|
||||
82030080: dededede dededede dededede dededede ................
|
||||
82030090: dededede dededede dededede dededede ................
|
||||
820300a0: dededede dededede dededede dededede ................
|
||||
820300b0: dededede dededede dededede dededede ................
|
||||
820300c0: dededede dededede dededede dededede ................
|
||||
820300d0: dededede dededede dededede dededede ................
|
||||
820300e0: dededede dededede dededede dededede ................
|
||||
820300f0: dededede dededede dededede dededede ................
|
|
@ -1,47 +0,0 @@
|
|||
-------------------------------------------------
|
||||
Simple steps used to test the QSPI at U-Boot
|
||||
-------------------------------------------------
|
||||
|
||||
For #1, build the patched U-Boot and load MLO/u-boot.img
|
||||
|
||||
----------------------------------
|
||||
Boot from another medium like MMC
|
||||
----------------------------------
|
||||
|
||||
U-Boot# mmc dev 0
|
||||
mmc0 is current device
|
||||
U-Boot# fatload mmc 0 0x82000000 MLO
|
||||
reading MLO
|
||||
55872 bytes read in 8 ms (6.7 MiB/s)
|
||||
U-Boot# fatload mmc 0 0x83000000 u-boot.img
|
||||
reading u-boot.img
|
||||
248600 bytes read in 19 ms (12.5 MiB/s)
|
||||
|
||||
--------------------------------------------------
|
||||
Commands to erase/write u-boot/mlo to flash device
|
||||
--------------------------------------------------
|
||||
U-Boot# sf probe 0
|
||||
SF: Detected S25FL256S_64K with page size 256 Bytes, erase size 64 KiB, total 32 MiB, mapped at 5c000000
|
||||
U-Boot# sf erase 0 0x10000
|
||||
SF: 65536 bytes @ 0x0 Erased: OK
|
||||
U-Boot# sf erase 0x20000 0x10000
|
||||
SF: 65536 bytes @ 0x20000 Erased: OK
|
||||
U-Boot# sf erase 0x30000 0x10000
|
||||
SF: 65536 bytes @ 0x30000 Erased: OK
|
||||
U-Boot# sf erase 0x40000 0x10000
|
||||
SF: 65536 bytes @ 0x40000 Erased: OK
|
||||
U-Boot# sf erase 0x50000 0x10000
|
||||
SF: 65536 bytes @ 0x50000 Erased: OK
|
||||
U-Boot# sf erase 0x60000 0x10000
|
||||
SF: 65536 bytes @ 0x60000 Erased: OK
|
||||
U-Boot# sf write 82000000 0 0x10000
|
||||
SF: 65536 bytes @ 0x0 Written: OK
|
||||
U-Boot# sf write 83000000 0x20000 0x60000
|
||||
SF: 393216 bytes @ 0x20000 Written: OK
|
||||
|
||||
For #2, set sysboot to QSPI-1 boot mode(SYSBOOT[5:0] = 100110) and power
|
||||
on. ROM should find the GP header at offset 0 and load/execute SPL. SPL
|
||||
then detects that ROM was in QSPI-1 mode (boot code 10) and attempts to
|
||||
find a U-Boot image header at offset 0x20000 (set in the config file)
|
||||
and proceeds to load that image using the U-Boot image payload offset/size
|
||||
from the header. It will then start U-Boot.
|
|
@ -1,47 +0,0 @@
|
|||
QSPI U-Boot support
|
||||
------------------
|
||||
|
||||
Host processor is connected to serial flash device via qpsi
|
||||
interface. QSPI is a kind of spi module that allows single,
|
||||
dual and quad read access to external spi devices. The module
|
||||
has a memory mapped interface which provide direct interface
|
||||
for accessing data form external spi devices.
|
||||
|
||||
The one QSPI in the device is primarily intended for fast booting
|
||||
from Quad SPI flash devices.
|
||||
|
||||
Usecase
|
||||
-------
|
||||
|
||||
MLO/u-boot.img will be flashed from SD/MMC to the flash device
|
||||
using serial flash erase and write commands. Then, switch settings
|
||||
will be changed to qspi boot. Then, the ROM code will read MLO
|
||||
from the predefined location in the flash, where it was flashed and
|
||||
execute it after storing it in SDRAM. Then, the MLO will read
|
||||
u-boot.img from flash and execute it from SDRAM.
|
||||
|
||||
SPI mode
|
||||
-------
|
||||
SPI mode uses mtd spi framework for transfer and reception of data.
|
||||
Can be used in:
|
||||
1. Normal mode: use single pin for transfers
|
||||
2. Dual Mode: use two pins for transfers.
|
||||
3. Quad mode: use four pin for transfer
|
||||
|
||||
Memory mapped read mode
|
||||
-----------------------
|
||||
In this, SPI controller is configured using configuration port and then
|
||||
controller is switched to memory mapped port for data read.
|
||||
|
||||
Driver
|
||||
------
|
||||
drivers/qspi/ti_qspi.c
|
||||
- Newly created file which is responsible for configuring the
|
||||
qspi controller and also for providing the low level api which
|
||||
is responsible for transferring the datas from host controller
|
||||
to flash device and vice versa.
|
||||
|
||||
Testing
|
||||
-------
|
||||
A seperated file named README.dra_qspi_test has been created which gives all the
|
||||
details about the commands required to test qspi at U-Boot level.
|
|
@ -43,6 +43,180 @@ to look at both `include/configs/am335x_evm.h`,
|
|||
`include/configs/ti_am335x_common.h` and `include/configs/am335x_evm.h` as the
|
||||
migration to Kconfig is not yet complete.
|
||||
|
||||
Secure Boot
|
||||
-----------
|
||||
|
||||
.. secure_boot_include_start_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.
|
||||
|
||||
.. secure_boot_include_end_config_ti_secure_device
|
||||
|
||||
.. secure_boot_include_start_spl_boot
|
||||
|
||||
1. 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:
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: $
|
||||
|
||||
${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.
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: $
|
||||
|
||||
create-boot-image.sh \
|
||||
<IMAGE_FLAG> <INPUT_FILE> <OUTPUT_FILE> <SPL_LOAD_ADDR>
|
||||
|
||||
.. secure_boot_include_end_spl_boot
|
||||
|
||||
<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:
|
||||
|
||||
.. list-table::
|
||||
:widths: 25 25
|
||||
:header-rows: 0
|
||||
|
||||
* - PI_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)
|
||||
|
||||
.. list-table::
|
||||
:widths: 25 25
|
||||
:header-rows: 0
|
||||
|
||||
* - 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>
|
||||
|
||||
.. secure_boot_include_start_primary_u_boot
|
||||
|
||||
2. 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:
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: $
|
||||
|
||||
${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
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: $
|
||||
|
||||
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.
|
||||
|
||||
.. secure_boot_include_end_primary_u_boot
|
||||
|
||||
NAND
|
||||
----
|
||||
|
||||
|
@ -52,41 +226,53 @@ inserted with the files to write in the first SD slot and that mtdparts
|
|||
have been configured correctly for the board. All images are first loaded
|
||||
into memory, then written to NAND.
|
||||
|
||||
Step-1: Building u-boot for NAND boot
|
||||
Set following CONFIGxx options for NAND device.
|
||||
CONFIG_SYS_NAND_PAGE_SIZE number of main bytes in NAND page
|
||||
CONFIG_SYS_NAND_OOBSIZE number of OOB bytes in NAND page
|
||||
CONFIG_SYS_NAND_BLOCK_SIZE number of bytes in NAND erase-block
|
||||
CFG_SYS_NAND_ECCPOS ECC map for NAND page
|
||||
CONFIG_NAND_OMAP_ECCSCHEME (refer doc/README.nand)
|
||||
1. Building u-boot for NAND boot
|
||||
|
||||
Step-2: Flashing NAND via MMC/SD
|
||||
.. list-table:: CONFIGxx options for NAND device
|
||||
:widths: 25 25
|
||||
:header-rows: 1
|
||||
|
||||
.. code-block:: text
|
||||
* - Config
|
||||
- Description
|
||||
* - CONFIG_SYS_NAND_PAGE_SIZE
|
||||
- number of main bytes in NAND page
|
||||
* - CONFIG_SYS_NAND_OOBSIZE
|
||||
- number of OOB bytes in NAND page
|
||||
* - CONFIG_SYS_NAND_BLOCK_SIZE
|
||||
- number of bytes in NAND erase-block
|
||||
* - CFG_SYS_NAND_ECCPOS
|
||||
- ECC map for NAND page
|
||||
* - CONFIG_NAND_OMAP_ECCSCHEME
|
||||
- (refer doc/README.nand)
|
||||
|
||||
# select BOOTSEL to MMC/SD boot and boot from MMC/SD card
|
||||
U-Boot # mmc rescan
|
||||
# erase flash
|
||||
U-Boot # nand erase.chip
|
||||
U-Boot # env default -f -a
|
||||
U-Boot # saveenv
|
||||
# flash MLO. Redundant copies of MLO are kept for failsafe
|
||||
U-Boot # load mmc 0 0x82000000 MLO
|
||||
U-Boot # nand write 0x82000000 0x00000 0x20000
|
||||
U-Boot # nand write 0x82000000 0x20000 0x20000
|
||||
U-Boot # nand write 0x82000000 0x40000 0x20000
|
||||
U-Boot # nand write 0x82000000 0x60000 0x20000
|
||||
# flash u-boot.img
|
||||
U-Boot # load mmc 0 0x82000000 u-boot.img
|
||||
U-Boot # nand write 0x82000000 0x80000 0x60000
|
||||
# flash kernel image
|
||||
U-Boot # load mmc 0 0x82000000 uImage
|
||||
U-Boot # nand write 0x82000000 ${nandsrcaddr} ${nandimgsize}
|
||||
# flash filesystem image
|
||||
U-Boot # load mmc 0 0x82000000 filesystem.img
|
||||
U-Boot # nand write 0x82000000 ${loadaddress} 0x300000
|
||||
2. Flashing NAND via MMC/SD
|
||||
|
||||
Step-3: Set BOOTSEL pin to select NAND boot, and POR the device.
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
# select BOOTSEL to MMC/SD boot and boot from MMC/SD card
|
||||
mmc rescan
|
||||
# erase flash
|
||||
nand erase.chip
|
||||
env default -f -a
|
||||
saveenv
|
||||
# flash MLO. Redundant copies of MLO are kept for failsafe
|
||||
load mmc 0 0x82000000 MLO
|
||||
nand write 0x82000000 0x00000 0x20000
|
||||
nand write 0x82000000 0x20000 0x20000
|
||||
nand write 0x82000000 0x40000 0x20000
|
||||
nand write 0x82000000 0x60000 0x20000
|
||||
# flash u-boot.img
|
||||
load mmc 0 0x82000000 u-boot.img
|
||||
nand write 0x82000000 0x80000 0x60000
|
||||
# flash kernel image
|
||||
load mmc 0 0x82000000 uImage
|
||||
nand write 0x82000000 ${nandsrcaddr} ${nandimgsize}
|
||||
# flash filesystem image
|
||||
load mmc 0 0x82000000 filesystem.img
|
||||
nand write 0x82000000 ${loadaddress} 0x300000
|
||||
|
||||
3. Set BOOTSEL pin to select NAND boot, and POR the device.
|
||||
The device should boot from images flashed on NAND device.
|
||||
|
||||
|
||||
|
@ -107,16 +293,34 @@ Falcon Mode: eMMC
|
|||
|
||||
The recommended layout in this case is:
|
||||
|
||||
.. code-block:: text
|
||||
.. list-table:: eMMC Recommended Layout
|
||||
:widths: 25 25 50
|
||||
:header-rows: 1
|
||||
|
||||
MMC BLOCKS |--------------------------------| LOCATION IN BYTES
|
||||
0x0000 - 0x007F : MBR or GPT table : 0x000000 - 0x020000
|
||||
0x0080 - 0x00FF : ARGS or FDT file : 0x010000 - 0x020000
|
||||
0x0100 - 0x01FF : SPL.backup1 (first copy used) : 0x020000 - 0x040000
|
||||
0x0200 - 0x02FF : SPL.backup2 (second copy used) : 0x040000 - 0x060000
|
||||
0x0300 - 0x06FF : U-Boot : 0x060000 - 0x0e0000
|
||||
0x0700 - 0x08FF : U-Boot Env + Redundant : 0x0e0000 - 0x120000
|
||||
0x0900 - 0x28FF : Kernel : 0x120000 - 0x520000
|
||||
* - MMC Blocks
|
||||
- Description
|
||||
- Location in bytes
|
||||
* - 0x0000 - 0x007F
|
||||
- MBR or GPT table
|
||||
- 0x000000 - 0x020000
|
||||
* - 0x0080 - 0x00FF
|
||||
- ARGS or FDT file
|
||||
- 0x010000 - 0x020000
|
||||
* - 0x0100 - 0x01FF
|
||||
- SPL.backup1 (first copy used)
|
||||
- 0x020000 - 0x040000
|
||||
* - 0x0200 - 0x02FF
|
||||
- SPL.backup2 (second copy used)
|
||||
- 0x040000 - 0x060000
|
||||
* - 0x0300 - 0x06FF
|
||||
- U-Boot
|
||||
- 0x060000 - 0x0e0000
|
||||
* - 0x0700 - 0x08FF
|
||||
- U-Boot Env + Redundant
|
||||
- 0x0e0000 - 0x120000
|
||||
* - 0x0900 - 0x28FF
|
||||
- Kernel
|
||||
- 0x120000 - 0x520000
|
||||
|
||||
Note that when we run 'spl export' it will prepare to boot the kernel.
|
||||
This includes relocation of the uImage from where we loaded it to the entry
|
||||
|
@ -130,27 +334,28 @@ had a FAT partition (such as on a Beaglebone Black) it is not enough to
|
|||
write garbage into the area, you must delete it from the partition table
|
||||
first.
|
||||
|
||||
.. code-block:: text
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
# Ensure we are able to talk with this mmc device
|
||||
U-Boot # mmc rescan
|
||||
U-Boot # tftp 81000000 am335x/MLO
|
||||
# Write to two of the backup locations ROM uses
|
||||
U-Boot # mmc write 81000000 100 100
|
||||
U-Boot # mmc write 81000000 200 100
|
||||
# Write U-Boot to the location set in the config
|
||||
U-Boot # tftp 81000000 am335x/u-boot.img
|
||||
U-Boot # mmc write 81000000 300 400
|
||||
# Load kernel and device tree into memory, perform export
|
||||
U-Boot # tftp 81000000 am335x/uImage
|
||||
U-Boot # run findfdt
|
||||
U-Boot # tftp ${fdtaddr} am335x/${fdtfile}
|
||||
U-Boot # run mmcargs
|
||||
U-Boot # spl export fdt 81000000 - ${fdtaddr}
|
||||
# Write the updated device tree to MMC
|
||||
U-Boot # mmc write ${fdtaddr} 80 80
|
||||
# Write the uImage to MMC
|
||||
U-Boot # mmc write 81000000 900 2000
|
||||
# Ensure we are able to talk with this mmc device
|
||||
mmc rescan
|
||||
tftp 81000000 am335x/MLO
|
||||
# Write to two of the backup locations ROM uses
|
||||
mmc write 81000000 100 100
|
||||
mmc write 81000000 200 100
|
||||
# Write U-Boot to the location set in the config
|
||||
tftp 81000000 am335x/u-boot.img
|
||||
mmc write 81000000 300 400
|
||||
# Load kernel and device tree into memory, perform export
|
||||
tftp 81000000 am335x/uImage
|
||||
run findfdt
|
||||
tftp ${fdtaddr} am335x/${fdtfile}
|
||||
run mmcargs
|
||||
spl export fdt 81000000 - ${fdtaddr}
|
||||
# Write the updated device tree to MMC
|
||||
mmc write ${fdtaddr} 80 80
|
||||
# Write the uImage to MMC
|
||||
mmc write 81000000 900 2000
|
||||
|
||||
Falcon Mode: FAT SD cards
|
||||
-------------------------
|
||||
|
@ -161,28 +366,30 @@ the FAT filesystem (only the uImage MUST be for this to function
|
|||
afterwards) along with a Falcon Mode aware MLO and the FAT partition has
|
||||
already been created and marked bootable:
|
||||
|
||||
.. code-block:: text
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
U-Boot # mmc rescan
|
||||
# Load kernel and device tree into memory, perform export
|
||||
U-Boot # load mmc 0:1 ${loadaddr} uImage
|
||||
U-Boot # run findfdt
|
||||
U-Boot # load mmc 0:1 ${fdtaddr} ${fdtfile}
|
||||
U-Boot # run mmcargs
|
||||
U-Boot # spl export fdt ${loadaddr} - ${fdtaddr}
|
||||
mmc rescan
|
||||
# Load kernel and device tree into memory, perform export
|
||||
load mmc 0:1 ${loadaddr} uImage
|
||||
run findfdt
|
||||
load mmc 0:1 ${fdtaddr} ${fdtfile}
|
||||
run mmcargs
|
||||
spl export fdt ${loadaddr} - ${fdtaddr}
|
||||
|
||||
This will print a number of lines and then end with something like:
|
||||
|
||||
.. code-block:: text
|
||||
.. code-block:: bash
|
||||
|
||||
Using Device Tree in place at 80f80000, end 80f85928
|
||||
Using Device Tree in place at 80f80000, end 80f88928
|
||||
Using Device Tree in place at 80f80000, end 80f85928
|
||||
Using Device Tree in place at 80f80000, end 80f88928
|
||||
|
||||
So then you:
|
||||
|
||||
.. code-block:: text
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
U-Boot # fatwrite mmc 0:1 0x80f80000 args 8928
|
||||
fatwrite mmc 0:1 0x80f80000 args 8928
|
||||
|
||||
Falcon Mode: NAND
|
||||
-----------------
|
||||
|
@ -193,14 +400,15 @@ already located on the NAND somewhere (such as filesystem or mtd partition)
|
|||
along with a Falcon Mode aware MLO written to the correct locations for
|
||||
booting and mtdparts have been configured correctly for the board:
|
||||
|
||||
.. code-block:: text
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
U-Boot # nand read ${loadaddr} kernel
|
||||
U-Boot # load nand rootfs ${fdtaddr} /boot/am335x-evm.dtb
|
||||
U-Boot # run nandargs
|
||||
U-Boot # spl export fdt ${loadaddr} - ${fdtaddr}
|
||||
U-Boot # nand erase.part u-boot-spl-os
|
||||
U-Boot # nand write ${fdtaddr} u-boot-spl-os
|
||||
nand read ${loadaddr} kernel
|
||||
load nand rootfs ${fdtaddr} /boot/am335x-evm.dtb
|
||||
run nandargs
|
||||
spl export fdt ${loadaddr} - ${fdtaddr}
|
||||
nand erase.part u-boot-spl-os
|
||||
nand write ${fdtaddr} u-boot-spl-os
|
||||
|
||||
USB device
|
||||
----------
|
||||
|
@ -217,27 +425,35 @@ The output of the 'dm tree' command shows which driver is bound to which
|
|||
device, so the user can easily configure their platform differently from
|
||||
the command line:
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
dm tree
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
=> dm tree
|
||||
Class Index Probed Driver Name
|
||||
-----------------------------------------------------------
|
||||
[...]
|
||||
misc 0 [ + ] ti-musb-wrapper | |-- usb@47400000
|
||||
usb 0 [ + ] ti-musb-peripheral | | |-- usb@47401000
|
||||
ethernet 1 [ + ] usb_ether | | | `-- usb_ether
|
||||
bootdev 3 [ ] eth_bootdev | | | `-- usb_ether.bootdev
|
||||
usb 0 [ ] ti-musb-host | | `-- usb@47401800
|
||||
Class Index Probed Driver Name
|
||||
-----------------------------------------------------------
|
||||
[...]
|
||||
misc 0 [ + ] ti-musb-wrapper | |-- usb@47400000
|
||||
usb 0 [ + ] ti-musb-peripheral | | |-- usb@47401000
|
||||
ethernet 1 [ + ] usb_ether | | | `-- usb_ether
|
||||
bootdev 3 [ ] eth_bootdev | | | `-- usb_ether.bootdev
|
||||
usb 0 [ ] ti-musb-host | | `-- usb@47401800
|
||||
|
||||
Typically here any network command performed using the usb_ether
|
||||
interface would work, while using other gadgets would fail:
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
fastboot usb 0
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
=> fastboot usb 0
|
||||
All UDC in use (1 available), use the unbind command
|
||||
g_dnl_register: failed!, error: -19
|
||||
exit not allowed from main input shell.
|
||||
All UDC in use (1 available), use the unbind command
|
||||
g_dnl_register: failed!, error: -19
|
||||
exit not allowed from main input shell.
|
||||
|
||||
As hinted by the primary error message, the only controller available
|
||||
(usb@47401000) is currently bound to the usb_ether driver, which makes
|
||||
|
@ -246,20 +462,25 @@ least from a bootloader point of view). The solution here would be to
|
|||
use the unbind command specifying the class and index parameters (as
|
||||
shown above in the 'dm tree' output) to target the driver to unbind:
|
||||
|
||||
.. code-block:: text
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
=> unbind ethernet 1
|
||||
unbind ethernet 1
|
||||
|
||||
The output of the 'dm tree' command now shows the availability of the
|
||||
first USB device controller, the fastboot gadget will now be able to
|
||||
bind with it:
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
dm tree
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
=> dm tree
|
||||
Class Index Probed Driver Name
|
||||
-----------------------------------------------------------
|
||||
[...]
|
||||
misc 0 [ + ] ti-musb-wrapper | |-- usb@47400000
|
||||
usb 0 [ ] ti-musb-peripheral | | |-- usb@47401000
|
||||
usb 0 [ ] ti-musb-host | | `-- usb@47401800
|
||||
Class Index Probed Driver Name
|
||||
-----------------------------------------------------------
|
||||
[...]
|
||||
misc 0 [ + ] ti-musb-wrapper | |-- usb@47400000
|
||||
usb 0 [ ] ti-musb-peripheral | | |-- usb@47401000
|
||||
usb 0 [ ] ti-musb-host | | `-- usb@47401800
|
||||
|
|
188
doc/board/ti/am43xx_evm.rst
Normal file
188
doc/board/ti/am43xx_evm.rst
Normal file
|
@ -0,0 +1,188 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
.. sectionauthor:: Neha Malcom Francis <n-francis@ti.com>
|
||||
|
||||
AM43xx Generation
|
||||
=================
|
||||
|
||||
Secure Boot
|
||||
-----------
|
||||
|
||||
.. include:: am335x_evm.rst
|
||||
:start-after: .. secure_boot_include_start_config_ti_secure_device
|
||||
:end-before: .. secure_boot_include_end_config_ti_secure_device
|
||||
|
||||
.. include:: am335x_evm.rst
|
||||
:start-after: .. secure_boot_include_start_spl_boot
|
||||
:end-before: .. secure_boot_include_end_spl_boot
|
||||
|
||||
<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:
|
||||
|
||||
.. list-table::
|
||||
:widths: 25 25
|
||||
:header-rows: 0
|
||||
|
||||
* - 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)
|
||||
|
||||
.. list-table::
|
||||
:widths: 25 25
|
||||
:header-rows: 0
|
||||
|
||||
* - 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 Xip 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>
|
||||
|
||||
.. include:: am335x_evm.rst
|
||||
:start-after: .. secure_boot_include_start_primary_u_boot
|
||||
:end-before: .. secure_boot_include_end_primary_u_boot
|
||||
|
||||
.. qspi_boot_support_include_start
|
||||
|
||||
QSPI U-Boot support
|
||||
-------------------
|
||||
|
||||
Host processor is connected to serial flash device via qpsi
|
||||
interface. QSPI is a kind of spi module that allows single,
|
||||
dual and quad read access to external spi devices. The module
|
||||
has a memory mapped interface which provide direct interface
|
||||
for accessing data form external spi devices.
|
||||
|
||||
The one QSPI in the device is primarily intended for fast booting
|
||||
from Quad SPI flash devices.
|
||||
|
||||
Usecase
|
||||
^^^^^^^
|
||||
|
||||
MLO/u-boot.img will be flashed from SD/MMC to the flash device
|
||||
using serial flash erase and write commands. Then, switch settings
|
||||
will be changed to qspi boot. Then, the ROM code will read MLO
|
||||
from the predefined location in the flash, where it was flashed and
|
||||
execute it after storing it in SDRAM. Then, the MLO will read
|
||||
u-boot.img from flash and execute it from SDRAM.
|
||||
|
||||
SPI mode
|
||||
^^^^^^^^
|
||||
|
||||
SPI mode uses mtd spi framework for transfer and reception of data.
|
||||
Can be used in:
|
||||
|
||||
#. Normal mode: use single pin for transfers
|
||||
#. Dual Mode: use two pins for transfers.
|
||||
#. Quad mode: use four pin for transfer
|
||||
|
||||
Memory mapped read mode
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In this, SPI controller is configured using configuration port and then
|
||||
controller is switched to memory mapped port for data read.
|
||||
|
||||
Driver
|
||||
^^^^^^
|
||||
|
||||
drivers/qspi/ti_qspi.c
|
||||
- File which is responsible for configuring the
|
||||
qspi controller and also for providing the low level api which
|
||||
is responsible for transferring the datas from host controller
|
||||
to flash device and vice versa.
|
||||
|
||||
.. qspi_boot_support_include_end
|
||||
|
||||
Testing
|
||||
^^^^^^^
|
||||
|
||||
These are the testing details of qspi flash driver with Macronix M25L51235
|
||||
flash device.
|
||||
|
||||
The test includes
|
||||
- probing the flash device
|
||||
- erasing the flash device
|
||||
- Writing to flash
|
||||
- Reading the contents of the flash.
|
||||
|
||||
Test Log
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Hit any key to stop autoboot: 0
|
||||
=> sf probe 0
|
||||
SF: Detected MX25L51235F with page size 256 Bytes, erase size 64 KiB, total 64 MiB, mapped at 30000000
|
||||
=> sf erase 0 0x80000
|
||||
SF: 524288 bytes @ 0x0 Erased: OK
|
||||
=> mw 81000000 0xdededede 0x40000
|
||||
=> sf write 81000000 0 0x40000
|
||||
SF: 262144 bytes @ 0x0 Written: OK
|
||||
=> sf read 82000000 0 0x40000
|
||||
SF: 262144 bytes @ 0x0 Read: OK
|
||||
=> md 0x82000000
|
||||
82000000: dededede dededede dededede dededede ................
|
||||
82000010: dededede dededede dededede dededede ................
|
||||
82000020: dededede dededede dededede dededede ................
|
||||
82000030: dededede dededede dededede dededede ................
|
||||
82000040: dededede dededede dededede dededede ................
|
||||
82000050: dededede dededede dededede dededede ................
|
||||
82000060: dededede dededede dededede dededede ................
|
||||
82000070: dededede dededede dededede dededede ................
|
||||
82000080: dededede dededede dededede dededede ................
|
||||
82000090: dededede dededede dededede dededede ................
|
||||
820000a0: dededede dededede dededede dededede ................
|
||||
820000b0: dededede dededede dededede dededede ................
|
||||
820000c0: dededede dededede dededede dededede ................
|
||||
820000d0: dededede dededede dededede dededede ................
|
||||
820000e0: dededede dededede dededede dededede ................
|
||||
820000f0: dededede dededede dededede dededede ................
|
||||
=> md 0x82010000
|
||||
82010000: dededede dededede dededede dededede ................
|
||||
82010010: dededede dededede dededede dededede ................
|
||||
82010020: dededede dededede dededede dededede ................
|
||||
82010030: dededede dededede dededede dededede ................
|
||||
82010040: dededede dededede dededede dededede ................
|
||||
82010050: dededede dededede dededede dededede ................
|
||||
82010060: dededede dededede dededede dededede ................
|
||||
82010070: dededede dededede dededede dededede ................
|
||||
82010080: dededede dededede dededede dededede ................
|
||||
82010090: dededede dededede dededede dededede ................
|
||||
820100a0: dededede dededede dededede dededede ................
|
||||
820100b0: dededede dededede dededede dededede ................
|
||||
820100c0: dededede dededede dededede dededede ................
|
||||
820100d0: dededede dededede dededede dededede ................
|
||||
820100e0: dededede dededede dededede dededede ................
|
||||
820100f0: dededede dededede dededede dededede ................
|
||||
=> md 0x82030000
|
||||
82030000: dededede dededede dededede dededede ................
|
||||
82030010: dededede dededede dededede dededede ................
|
||||
82030020: dededede dededede dededede dededede ................
|
||||
82030030: dededede dededede dededede dededede ................
|
||||
82030040: dededede dededede dededede dededede ................
|
||||
82030050: dededede dededede dededede dededede ................
|
||||
82030060: dededede dededede dededede dededede ................
|
||||
82030070: dededede dededede dededede dededede ................
|
||||
82030080: dededede dededede dededede dededede ................
|
||||
82030090: dededede dededede dededede dededede ................
|
||||
820300a0: dededede dededede dededede dededede ................
|
||||
820300b0: dededede dededede dededede dededede ................
|
||||
820300c0: dededede dededede dededede dededede ................
|
||||
820300d0: dededede dededede dededede dededede ................
|
||||
820300e0: dededede dededede dededede dededede ................
|
||||
820300f0: dededede dededede dededede dededede ................
|
139
doc/board/ti/dra7xx_evm.rst
Normal file
139
doc/board/ti/dra7xx_evm.rst
Normal file
|
@ -0,0 +1,139 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
.. sectionauthor:: Neha Malcom Francis <n-francis@ti.com>
|
||||
|
||||
DRA7xx Generation
|
||||
=================
|
||||
|
||||
Secure Boot
|
||||
-----------
|
||||
|
||||
.. include:: am335x_evm.rst
|
||||
:start-after: .. secure_boot_include_start_config_ti_secure_device
|
||||
:end-before: .. secure_boot_include_end_config_ti_secure_device
|
||||
|
||||
.. include:: am335x_evm.rst
|
||||
:start-after: .. secure_boot_include_start_spl_boot
|
||||
:end-before: .. secure_boot_include_end_spl_boot
|
||||
|
||||
<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:
|
||||
|
||||
.. list-table::
|
||||
:widths: 25 25
|
||||
:header-rows: 0
|
||||
|
||||
* - X-LOADER
|
||||
- Generates an image for NOR or QSPI boot modes
|
||||
* - MLO
|
||||
- Generates an image for NOR or QSPI 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
|
||||
loaderbinary 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)
|
||||
|
||||
.. list-table::
|
||||
:widths: 25 25
|
||||
:header-rows: 0
|
||||
|
||||
* - u-boot-spl_HS_SPI_X-LOADER
|
||||
- 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>
|
||||
|
||||
.. include:: am335x_evm.rst
|
||||
:start-after: .. secure_boot_include_start_primary_u_boot
|
||||
:end-before: .. secure_boot_include_end_primary_u_boot
|
||||
|
||||
eMMC Boot Partition Use
|
||||
-----------------------
|
||||
|
||||
It is possible, depending on SYSBOOT configuration to boot from the eMMC
|
||||
boot partitions using (name depending on documentation referenced)
|
||||
Alternative Boot operation mode or Boot Sequence Option 1/2. In this
|
||||
example we load MLO and u-boot.img from the build into DDR and then use
|
||||
'mmc bootbus' to set the required rate (see TRM) and 'mmc partconfig' to
|
||||
set boot0 as the boot device.
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
setenv autoload no
|
||||
usb start
|
||||
dhcp
|
||||
mmc dev 1 1
|
||||
tftp ${loadaddr} dra7xx/MLO
|
||||
mmc write ${loadaddr} 0 100
|
||||
tftp ${loadaddr} dra7xx/u-boot.img
|
||||
mmc write ${loadaddr} 300 400
|
||||
mmc bootbus 1 2 0 2
|
||||
mmc partconf 1 1 1 0
|
||||
mmc rst-function 1 1
|
||||
|
||||
.. include:: am43xx_evm.rst
|
||||
:start-after: qspi_boot_support_include_start
|
||||
:end-before: qspi_boot_support_include_end
|
||||
|
||||
Testing
|
||||
^^^^^^^
|
||||
|
||||
Build the patched U-Boot and load MLO/u-boot.img.
|
||||
|
||||
Boot from another medium like MMC
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
=> mmc dev 0
|
||||
mmc0 is current device
|
||||
=> fatload mmc 0 0x82000000 MLO
|
||||
reading MLO
|
||||
55872 bytes read in 8 ms (6.7 MiB/s)
|
||||
=> fatload mmc 0 0x83000000 u-boot.img
|
||||
reading u-boot.img
|
||||
248600 bytes read in 19 ms (12.5 MiB/s)
|
||||
|
||||
Commands to erase/write u-boot/MLO to flash device
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
=> sf probe 0
|
||||
SF: Detected S25FL256S_64K with page size 256 Bytes, erase size 64 KiB, total 32 MiB, mapped at 5c000000
|
||||
=> sf erase 0 0x10000
|
||||
SF: 65536 bytes @ 0x0 Erased: OK
|
||||
=> sf erase 0x20000 0x10000
|
||||
SF: 65536 bytes @ 0x20000 Erased: OK
|
||||
=> sf erase 0x30000 0x10000
|
||||
SF: 65536 bytes @ 0x30000 Erased: OK
|
||||
=> sf erase 0x40000 0x10000
|
||||
SF: 65536 bytes @ 0x40000 Erased: OK
|
||||
=> sf erase 0x50000 0x10000
|
||||
SF: 65536 bytes @ 0x50000 Erased: OK
|
||||
=> sf erase 0x60000 0x10000
|
||||
SF: 65536 bytes @ 0x60000 Erased: OK
|
||||
=> sf write 82000000 0 0x10000
|
||||
SF: 65536 bytes @ 0x0 Written: OK
|
||||
=> sf write 83000000 0x20000 0x60000
|
||||
SF: 393216 bytes @ 0x20000 Written: OK
|
||||
|
||||
Next, set sysboot to QSPI-1 boot mode(SYSBOOT[5:0] = 100110) and power
|
||||
on. ROM should find the GP header at offset 0 and load/execute SPL. SPL
|
||||
then detects that ROM was in QSPI-1 mode (boot code 10) and attempts to
|
||||
find a U-Boot image header at offset 0x20000 (set in the config file)
|
||||
and proceeds to load that image using the U-Boot image payload offset/size
|
||||
from the header. It will then start U-Boot.
|
|
@ -7,4 +7,7 @@ Texas Instruments
|
|||
:maxdepth: 2
|
||||
|
||||
am335x_evm
|
||||
am43xx_evm
|
||||
dra7xx_evm
|
||||
ks2_evm
|
||||
k3
|
||||
|
|
306
doc/board/ti/ks2_evm.rst
Normal file
306
doc/board/ti/ks2_evm.rst
Normal file
|
@ -0,0 +1,306 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
|
||||
.. sectionauthor:: Neha Malcom Francis <n-francis@ti.com>
|
||||
|
||||
Keystone II EVM Generation
|
||||
==========================
|
||||
|
||||
Summary
|
||||
-------
|
||||
|
||||
This README has information on the U-Boot port for K2HK, K2E, and K2L EVM boards.
|
||||
Documentation for this board can be found at:
|
||||
|
||||
- http://www.advantech.com/Support/TI-EVM/EVMK2HX_sd.aspx
|
||||
- https://www.einfochips.com/index.php/partnerships/texas-instruments/k2e-evm.html
|
||||
- https://www.einfochips.com/index.php/partnerships/texas-instruments/k2l-evm.html
|
||||
|
||||
The K2HK board is based on Texas Instruments Keystone2 family of SoCs: K2H, K2K.
|
||||
More details on these SoCs are available at company websites:
|
||||
|
||||
K2K: http://www.ti.com/product/tci6638k2k
|
||||
K2H: http://www.ti.com/product/tci6638k2h
|
||||
|
||||
The K2E SoC details are available at
|
||||
http://www.ti.com/lit/ds/symlink/66ak2e05.pdf
|
||||
|
||||
The K2L SoC details are available at
|
||||
http://www.ti.com/lit/ds/symlink/tci6630k2l.pdf
|
||||
|
||||
The K2G SoC details are available at
|
||||
http://www.ti.com/lit/ds/symlink/66ak2g02.pdf
|
||||
|
||||
Board Configuration
|
||||
-------------------
|
||||
|
||||
Some of the peripherals that are configured by U-Boot
|
||||
|
||||
.. list-table::
|
||||
:widths: 10 10 10 10 10 10 10 10
|
||||
:header-rows: 1
|
||||
|
||||
* -
|
||||
- DDR3
|
||||
- NAND
|
||||
- MSM SRAM
|
||||
- ETH Ports
|
||||
- UART
|
||||
- I2C
|
||||
- SPI
|
||||
* - K2HK
|
||||
- 2
|
||||
- 512MB
|
||||
- 6MB
|
||||
- 4(2)
|
||||
- 2
|
||||
- 3
|
||||
- 3
|
||||
* - K2E
|
||||
- 4
|
||||
- 512MB
|
||||
- 2MB
|
||||
- 8(2)
|
||||
- 2
|
||||
- 3
|
||||
- 3
|
||||
* - K2L
|
||||
- 2
|
||||
- 512MB
|
||||
- 2MB
|
||||
- 4(2)
|
||||
- 4
|
||||
- 3
|
||||
- 3
|
||||
* - K2G
|
||||
- 2
|
||||
- 256MB
|
||||
- 1MB
|
||||
- 1
|
||||
- 1
|
||||
- 1
|
||||
- 1
|
||||
|
||||
There are only 2 eth port installed on the boards.
|
||||
|
||||
There are separate PLLs to drive clocks to Tetris ARM and Peripherals.
|
||||
To bring up SMP Linux on this board, there is a boot monitor
|
||||
code that will be installed in MSMC SRAM. There is command available
|
||||
to install this image from U-Boot.
|
||||
|
||||
The port related files can be found at following folders:
|
||||
- keystone2 SoC related files: arch/arm/cpu/armv7/keystone/
|
||||
- EVMs board files: board/ti/k2s_evm/
|
||||
|
||||
Board configuration files:
|
||||
- include/configs/k2hk_evm.h
|
||||
- include/configs/k2e_evm.h
|
||||
- include/configs/k2l_evm.h
|
||||
- include/configs/k2g_evm.h
|
||||
|
||||
As U-Boot is migrating to Kconfig there is also board defconfig files
|
||||
- configs/k2e_evm_defconfig
|
||||
- configs/k2hk_evm_defconfig
|
||||
- configs/k2l_evm_defconfig
|
||||
- configs/k2g_evm_defconfig
|
||||
|
||||
Supported boot modes:
|
||||
- SPI NOR boot
|
||||
- AEMIF NAND boot (K2E, K2L and K2HK)
|
||||
- UART boot
|
||||
- MMC boot (Only on K2G)
|
||||
|
||||
Supported image formats:
|
||||
- u-boot.bin: for loading and running u-boot.bin through Texas Instruments Code
|
||||
Composer Studio (CCS) and for UART boot.
|
||||
- u-boot-spi.gph: gpimage for programming SPI NOR flash for SPI NOR boot
|
||||
- MLO: gpimage for programming NAND flash for NAND boot, MMC boot.
|
||||
|
||||
Build Instructions
|
||||
------------------
|
||||
|
||||
Examples for k2hk, for k2e, k2l and k2g just replace k2hk prefix accordingly.
|
||||
Don't forget to add CROSS_COMPILE.
|
||||
|
||||
To build u-boot.bin, u-boot-spi.gph, MLO:
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: $
|
||||
|
||||
make k2hk_evm_defconfig
|
||||
make
|
||||
|
||||
Load and Run U-Boot on Keystone EVMs using CCS
|
||||
----------------------------------------------
|
||||
|
||||
Need Code Composer Studio (CCS) installed on a PC to load and run u-boot.bin
|
||||
on EVM? See instructions at below link for installing CCS on a Windows PC.
|
||||
|
||||
`<http://processors.wiki.ti.com/index.php/MCSDK_UG_Chapter_Getting_Started#Installing_Code_Composer_Studio>`_
|
||||
|
||||
Use u-boot.bin from the build folder for loading and running U-Boot binary
|
||||
on EVM. Follow instructions at:
|
||||
|
||||
- K2HK http://processors.wiki.ti.com/index.php/EVMK2H_Hardware_Setup
|
||||
- K2E http://processors.wiki.ti.com/index.php/EVMK2E_Hardware_Setup
|
||||
- K2L http://processors.wiki.ti.com/index.php/TCIEVMK2L_Hardware_Setup
|
||||
- K2G http://processors.wiki.ti.com/index.php/66AK2G02_GP_EVM_Hardware_Setup
|
||||
|
||||
to configure SW1 dip switch to use "No Boot/JTAG DSP Little Endian Boot Mode"
|
||||
and Power ON the EVM. Follow instructions to connect serial port of EVM to
|
||||
PC and start TeraTerm or Hyper Terminal.
|
||||
|
||||
Start CCS on a Windows machine and Launch Target configuration as instructed at
|
||||
|
||||
`<http://processors.wiki.ti.com/index.php/MCSDK_UG_Chapter_Exploring#Loading_and_Running_U-Boot_on_EVM_through_CCS>`_
|
||||
|
||||
The instructions provided in the above link uses a script for
|
||||
loading the U-Boot binary on the target EVM. Instead do the following:-
|
||||
|
||||
#. Right click to "Texas Instruments XDS2xx USB Emulator_0/CortexA15_1 core (D
|
||||
is connected: Unknown)" at the debug window (This is created once Target
|
||||
configuration is launched) and select "Connect Target".
|
||||
#. Once target connect is successful, choose Tools->Load Memory option from the
|
||||
top level menu. At the Load Memory window, choose the file u-boot.bin
|
||||
through "Browse" button and click "next >" button. In the next window, enter
|
||||
Start address as 0xc000000, choose Type-size "32 bits" and click "Finish"
|
||||
button.
|
||||
#. Click View -> Registers from the top level menu to view registers window.
|
||||
#. From Registers, window expand "Core Registers" to view PC. Edit PC value
|
||||
to be 0xc000000. From the "Run" top level menu, select "Free Run"
|
||||
#. The U-Boot prompt is shown at the Tera Term/ Hyper terminal console as
|
||||
below and type any key to stop autoboot as instructed.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
U-Boot 2014.04-rc1-00201-gc215b5a (Mar 21 2014 - 12:47:59)
|
||||
|
||||
I2C: ready
|
||||
Detected SO-DIMM [SQR-SD3T-2G1333SED]
|
||||
DRAM: 1.1 GiB
|
||||
NAND: 512 MiB
|
||||
Net: K2HK_EMAC
|
||||
Warning: K2HK_EMAC using MAC address from net device
|
||||
, K2HK_EMAC1, K2HK_EMAC2, K2HK_EMAC3
|
||||
Hit any key to stop autoboot: 0
|
||||
|
||||
SPI NOR Flash Programming Instructions
|
||||
--------------------------------------
|
||||
|
||||
U-Boot image can be flashed to first 512KB of the NOR flash using following
|
||||
instructions:
|
||||
|
||||
1. Start CCS and run U-Boot as described above.
|
||||
2. Suspend Target. Select Run -> Suspend from top level menu
|
||||
CortexA15_1 (Free Running)"
|
||||
3. Load u-boot-spi.gph binary from build folder on to DDR address 0x87000000
|
||||
through CCS as described in step 2 of "Load and Run U-Boot on K2HK/K2E/K2L
|
||||
EVM using CCS", but using address 0x87000000.
|
||||
4. Free Run the target as described earlier (step 4) to get U-Boot prompt
|
||||
5. At the U-Boot console type following to setup U-Boot environment variables.
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
setenv addr_uboot 0x87000000
|
||||
setenv filesize <size in hex of u-boot-spi.gph rounded to hex 0x10000>
|
||||
run burn_uboot_spi
|
||||
|
||||
Once U-Boot prompt is available, power off the EVM. Set the SW1 dip switch to
|
||||
"SPI Little Endian Boot mode" as per instruction at
|
||||
|
||||
`<http://processors.wiki.ti.com/index.php/*_Hardware_Setup>`_
|
||||
|
||||
6. Power ON the EVM. The EVM now boots with U-Boot image on the NOR flash.
|
||||
|
||||
AEMIF NAND Flash programming instructions
|
||||
-----------------------------------------
|
||||
|
||||
U-Boot image can be flashed to first 1024KB of the NAND flash using following
|
||||
instructions:
|
||||
|
||||
1. Start CCS and run U-Boot as described above.
|
||||
2. Suspend Target. Select Run -> Suspend from top level menu
|
||||
CortexA15_1 (Free Running)"
|
||||
3. Load MLO binary from build folder on to DDR address 0x87000000
|
||||
through CCS as described in step 2 of "Load and Run U-Boot on K2HK EVM
|
||||
using CCS", but using address 0x87000000.
|
||||
4. Free Run the target as described earlier (step 4) to get U-Boot prompt
|
||||
5. At the U-Boot console type following to setup U-Boot environment variables.
|
||||
|
||||
.. prompt:: bash
|
||||
:prompts: =>
|
||||
|
||||
setenv filesize <size in hex of MLO rounded to hex 0x10000>
|
||||
run burn_uboot_nand
|
||||
|
||||
Once U-Boot prompt is available, Power OFF the EVM. Set the SW1 dip switch to
|
||||
"ARM NAND Boot mode" as per instruction at
|
||||
|
||||
`<http://processors.wiki.ti.com/index.php/>`_
|
||||
|
||||
under Hardware Setup
|
||||
|
||||
6. Power ON the EVM. The EVM now boots with U-Boot image on the NAND flash.
|
||||
|
||||
Load and Run U-Boot on keystone EVMs using UART download
|
||||
--------------------------------------------------------
|
||||
|
||||
Open BMC and regular UART terminals.
|
||||
|
||||
1. On the regular UART port start xmodem transfer of the u-boot.bin
|
||||
2. Using BMC terminal set the ARM-UART bootmode and reboot the EVM
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
BMC> bootmode #4
|
||||
MBC> reboot
|
||||
|
||||
3. When xmodem is complete you should see the U-Boot starts on the UART port
|
||||
|
||||
Load and Run U-Boot on K2G EVMs using MMC
|
||||
-----------------------------------------
|
||||
|
||||
Open BMC and regular UART terminals.
|
||||
|
||||
1. Set the SW3 dip switch to "ARM MMC Boot mode" as per instruction at
|
||||
|
||||
`<http://processors.wiki.ti.com/index.php/66AK2G02_GP_EVM_Hardware_Setup>`_
|
||||
|
||||
2. Create SD card partitions as per steps given in Hardware Setup Guide.
|
||||
3. Copy MLO to Boot Partition.
|
||||
4. Insert SD card and Power on the EVM.
|
||||
The EVM now boots with U-Boot image from SD card.
|
||||
|
||||
Secure Boot
|
||||
-----------
|
||||
|
||||
.. include:: am335x_evm.rst
|
||||
:start-after: .. secure_boot_include_start_config_ti_secure_device
|
||||
:end-before: .. secure_boot_include_end_config_ti_secure_device
|
||||
|
||||
.. include:: am335x_evm.rst
|
||||
:start-after: .. secure_boot_include_start_spl_boot
|
||||
:end-before: .. secure_boot_include_end_spl_boot
|
||||
|
||||
<IMAGE_FLAG> 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)
|
||||
|
||||
.. list-table::
|
||||
:widths: 10 20
|
||||
:header-rows: 0
|
||||
|
||||
* - 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.
|
||||
|
||||
.. include:: am335x_evm.rst
|
||||
:start-after: .. secure_boot_include_start_primary_u_boot
|
||||
:end-before: .. secure_boot_include_end_primary_u_boot
|
Loading…
Reference in a new issue