.. SPDX-License-Identifier: GPL-2.0-or-later
.. sectionauthor:: Marcel Ziswiler <marcel.ziswiler@toradex.com>

Verdin AM62 Module
==================

- SoM: https://www.toradex.com/computer-on-modules/verdin-arm-family/ti-am62
- Carrier board: https://www.toradex.com/products/carrier-board/verdin-development-board-kit

Quick Start
-----------

- Get the binary-only SYSFW
- Get binary-only TI Linux firmware
- Build the ARM trusted firmware binary
- Build the OPTEE binary
- Build U-Boot for the R5
- Build U-Boot for the A53
- Flash to eMMC
- Boot

For an overview of the TI AM62 SoC boot flow please head over to:
:doc:`../ti/am62x_sk`

Sources:
--------

.. include::  ../ti/k3.rst
    :start-after: .. k3_rst_include_start_boot_sources
    :end-before: .. k3_rst_include_end_boot_sources

.. include::  ../ti/k3.rst
    :start-after: .. k3_rst_include_start_boot_firmwares
    :end-before: .. k3_rst_include_end_tifsstub

Build procedure:
----------------

0. Setup the environment variables:

.. include::  ../ti/k3.rst
    :start-after: .. k3_rst_include_start_common_env_vars_desc
    :end-before: .. k3_rst_include_end_common_env_vars_desc

.. include::  ../ti/k3.rst
    :start-after: .. k3_rst_include_start_board_env_vars_desc
    :end-before: .. k3_rst_include_end_board_env_vars_desc

Set the variables corresponding to this platform:

.. include::  ../ti/k3.rst
    :start-after: .. k3_rst_include_start_common_env_vars_defn
    :end-before: .. k3_rst_include_end_common_env_vars_defn
.. code-block:: bash

 $ export UBOOT_CFG_CORTEXR=verdin-am62_r5_defconfig
 $ export UBOOT_CFG_CORTEXA=verdin-am62_a53_defconfig
 $ export TFA_BOARD=lite
 $ # we don't use any extra TFA parameters
 $ unset TFA_EXTRA_ARGS
 $ export OPTEE_PLATFORM=k3-am62x
 $ # we dont use any extra OPTEE parameters
 $ unset OPTEE_EXTRA_ARGS

.. include::  ../ti/am62x_sk.rst
    :start-after: .. am62x_evm_rst_include_start_build_steps
    :end-before: .. am62x_evm_rst_include_end_build_steps

Flash to eMMC
-------------

.. code-block:: bash

    => mmc dev 0 1
    => fatload mmc 1 ${loadaddr} tiboot3.bin
    => mmc write ${loadaddr} 0x0 0x400
    => fatload mmc 1 ${loadaddr} tispl.bin
    => mmc write ${loadaddr} 0x400 0x1000
    => fatload mmc 1 ${loadaddr} u-boot.img
    => mmc write ${loadaddr} 0x1400 0x2000

As a convenience, instead of having to remember all those addresses and sizes,
one may also use the update U-Boot wrappers:

.. code-block:: bash

    > tftpboot ${loadaddr} tiboot3-am62x-gp-verdin.bin
    > run update_tiboot3

    > tftpboot ${loadaddr} tispl.bin
    > run update_tispl

    > tftpboot ${loadaddr} u-boot.img
    > run update_uboot

Boot
----

Output::

  U-Boot SPL 2023.10-rc1-00210-gb678170a34c (Aug 03 2023 - 00:09:14 +0200)
  SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.1--v09.00.01 (Kool Koala)')
  SPL initial stack usage: 13368 bytes
  Trying to boot from MMC1
  Authentication passed
  Authentication passed
  Authentication passed
  Authentication passed
  Authentication passed
  Starting ATF on ARM64 core...

  NOTICE:  BL31: v2.9(release):v2.9.0-73-g463655cc8
  NOTICE:  BL31: Built : 14:51:42, Jun  5 2023
  I/TC:
  I/TC: OP-TEE version: 3.21.0-168-g322cf9e33 (gcc version 12.2.1 20221205 (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24))) #2 Mon Jun  5 13:04:15 UTC 2023 aarch64
  I/TC: WARNING: This OP-TEE configuration might be insecure!
  I/TC: WARNING: Please check https://optee.readthedocs.io/en/latest/architecture/porting_guidelines.html
  I/TC: Primary CPU initializing
  I/TC: SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.1--v09.00.01 (Kool Koala)')
  I/TC: HUK Initialized
  I/TC: Primary CPU switching to normal world boot

  U-Boot SPL 2023.10-rc1-00210-gb678170a34c (Aug 03 2023 - 00:09:41 +0200)
  SYSFW ABI: 3.1 (firmware rev 0x0009 '9.0.1--v09.00.01 (Kool Koala)')
  SPL initial stack usage: 1840 bytes
  Trying to boot from MMC1
  Authentication passed
  Authentication passed


  U-Boot 2023.10-rc1-00210-gb678170a34c (Aug 03 2023 - 00:09:41 +0200)

  SoC:   AM62X SR1.0 HS-FS
  DRAM:  2 GiB
  Core:  136 devices, 28 uclasses, devicetree: separate
  MMC:   mmc@fa10000: 0, mmc@fa00000: 1
  Loading Environment from MMC... OK
  In:    serial@2800000
  Out:   serial@2800000
  Err:   serial@2800000
  Model: Toradex 0076 Verdin AM62 Quad 2GB WB IT V1.0A
  Serial#: 15037380
  Carrier: Toradex Verdin Development Board V1.1A, Serial# 10754333
  am65_cpsw_nuss ethernet@8000000: K3 CPSW: nuss_ver: 0x6BA01103 cpsw_ver: 0x6BA81103 ale_ver: 0x00290105 Ports:2 mdio_freq:1000000
  Setting variant to wifi
  Net:
  Warning: ethernet@8000000port@1 MAC addresses don't match:
  Address in ROM is		1c:63:49:22:5f:f9
  Address in environment is	00:14:2d:e5:73:c4
  eth0: ethernet@8000000port@1 [PRIME], eth1: ethernet@8000000port@2
  Hit any key to stop autoboot:  0
  Verdin AM62 #
