phyCORE-AM62x

The phyCORE-AM62x is a SoM (System on Module) featuring TI’s AM62x SoC. It can be used in combination with different carrier boards. This module can come with different sizes and models for DDR, eMMC, SPI NOR Flash and various SoCs from the AM62x family.

A development Kit, called phyBOARD-Lyra is used as a carrier board reference design around the AM62x SoM.

Quickstart

  • Download sources and TI firmware blobs

  • Build Trusted Firmware-A

  • Build OP-TEE

  • Build U-Boot for the R5

  • Build U-Boot for the A53

  • Create bootable uSD Card

  • Boot

Sources

Note

The TI Firmware required for functionality of the system can be one of the following combination (see platform specific boot diagram for further information as to which component runs on which processor):

  • TIFS - TI Foundational Security Firmware - Consists of purely firmware meant to run on the security enclave.

  • DM - Device Management firmware also called TI System Control Interface server (TISCI Server) - This component purely plays the role of managing device resources such as power, clock, interrupts, dma etc. This firmware runs on a dedicated or multi-use microcontroller outside the security enclave.

OR

  • SYSFW - System firmware - consists of both TIFS and DM both running on the security enclave.

Build procedure

Setup the environment variables:

Generic environment variables

S/w Component

Env Variable

Description

All Software

CC32

Cross compiler for ARMv7 (ARM 32bit), typically arm-linux-gnueabihf-

All Software

CC64

Cross compiler for ARMv8 (ARM 64bit), typically aarch64-linux-gnu-

All Software

LNX_FW_PATH

Path to TI Linux firmware repository

All Software

TFA_PATH

Path to source of Trusted Firmware-A

All Software

OPTEE_PATH

Path to source of OP-TEE

Board specific environment variables

S/w Component

Env Variable

Description

U-Boot

UBOOT_CFG_CORTEXR

Defconfig for Cortex-R (Boot processor).

U-Boot

UBOOT_CFG_CORTEXA

Defconfig for Cortex-A (MPU processor).

Trusted Firmware-A

TFA_BOARD

Platform name used for building TF-A for Cortex-A Processor.

Trusted Firmware-A

TFA_EXTRA_ARGS

Any extra arguments used for building TF-A.

OP-TEE

OPTEE_PLATFORM

Platform name used for building OP-TEE for Cortex-A Processor.

OP-TEE

OPTEE_EXTRA_ARGS

Any extra arguments used for building OP-TEE.

Set the variables corresponding to this platform:

export CC32=arm-linux-gnueabihf-
export CC64=aarch64-linux-gnu-
export LNX_FW_PATH=path/to/ti-linux-firmware
export TFA_PATH=path/to/trusted-firmware-a
export OPTEE_PATH=path/to/optee_os
$ export UBOOT_CFG_CORTEXR=phycore_am62x_r5_defconfig
$ export UBOOT_CFG_CORTEXA=phycore_am62x_a53_defconfig
$ export TFA_BOARD=lite
$ # we don't use any extra TFA parameters
$ unset TFA_EXTRA_ARGS
$ export OPTEE_PLATFORM=k3-am62x
$ export OPTEE_EXTRA_ARGS="CFG_WITH_SOFTWARE_PRNG=y"
  1. Trusted Firmware-A:

# inside trusted-firmware-a source
make CROSS_COMPILE=$CC64 ARCH=aarch64 PLAT=k3 SPD=opteed $TFA_EXTRA_ARGS \
     TARGET_BOARD=$TFA_BOARD
  1. OP-TEE:

# inside optee_os source
make CROSS_COMPILE=$CC32 CROSS_COMPILE64=$CC64 CFG_ARM64_core=y $OPTEE_EXTRA_ARGS \
      PLATFORM=$OPTEE_PLATFORM
  1. U-Boot:

  • 3.1 R5:

# inside u-boot source
make $UBOOT_CFG_CORTEXR
make CROSS_COMPILE=$CC32 BINMAN_INDIRS=$LNX_FW_PATH
  • 3.2 A53:

# inside u-boot source
make $UBOOT_CFG_CORTEXA
make CROSS_COMPILE=$CC64 BINMAN_INDIRS=$LNX_FW_PATH \
       BL31=$TFA_PATH/build/k3/$TFA_BOARD/release/bl31.bin \
       TEE=$OPTEE_PATH/out/arm-plat-k3/core/tee-raw.bin

Note

It is also possible to pick up a custom DM binary by adding TI_DM argument pointing to the file. If not provided, it defaults to picking up the DM binary from BINMAN_INDIRS. This is only applicable to devices that utilize split firmware.

uSD Card creation

Use fdisk to partition the uSD card. The layout should look similar to:

$ sudo fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 7.56 GiB, 8120172544 bytes, 15859712 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6583d9a3

Device         Boot  Start     End Sectors   Size Id Type
/dev/mmcblk0p1 *      2048  264191  262144   128M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      264192 1934953 1670762 815.8M 83 Linux

Once partitioned, the boot partition has to be formatted with a FAT filesystem. Assuming the uSD card is /dev/mmcblk0:

$ mkfs.vfat /dev/mmcblk0p1

To boot from a micro SD card on a HSFS device simply copy the following artifacts to the FAT partition:

  • tiboot3.bin from R5 build

  • tispl.bin from Cortex-A build

  • u-boot.img from Cortex-A build

Boot

Put the uSD card in the slot on the board and apply power. Check the serial console for output.

Flash to SPI NOR

Below commands can be used to flash the SPI NOR flash; assuming tiboot3.bin, tispl.bin and u-boot.img are stored on the uSD card.

sf probe
fatload mmc 1 ${loadaddr} tiboot3.bin
sf update $loadaddr 0x0 $filesize
fatload mmc 1 ${loadaddr} tispl.bin
sf update $loadaddr 0x80000 $filesize
fatload mmc 1 ${loadaddr} u-boot.img
sf update $loadaddr 0x280000 $filesize

Boot Modes

The phyCORE-AM62x development kit supports booting from many different interfaces. By default, the development kit is set to boot from the micro-SD card. To change the boot device, DIP switches S5 and S6 can be used. Boot switches should be changed with power off.

Boot Modes

Switch Label

SW5: 12345678

SW6: 12345678

uSD

11000010

01000000

eMMC

11010010

00000000

OSPI

11010000

10000000

UART

11011100

00000000

Further Information

Please see AM62 Platforms chapter for further AM62 SoC related documentation and https://docs.phytec.com/phycore-am62x for vendor documentation.