SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
#
# Copyright (C) 2018 STMicroelectronics - All Rights Reserved
#

U-Boot on STMicroelectronics STM32MP1
======================================

1. Summary
==========
This is a quick instruction for setup stm32mp1 boards.

2. Supported devices
====================
U-Boot supports one STMP32MP1 SoCs: STM32MP157

The STM32MP157 is a Cortex-A MPU aimed at various applications.
It features:
- Dual core Cortex-A7 application core
- 2D/3D image composition with GPU
- Standard memories interface support
- Standard connectivity, widely inherited from the STM32 MCU family
- Comprehensive security support

Everything is supported in Linux but U-Boot is limited to:
1. UART
2. SDCard/MMC controller (SDMMC)

And the necessary drivers
1. I2C
2. STPMU1
3. Clock, Reset

Currently the following boards are supported:
+ stm32mp157c-ed1

3. Boot Sequences
=================

BootRom => FSBL in SYSRAM => SSBL in DDR => OS (Linux Kernel)

with FSBL = First Stage Bootloader
     SSBL = Second Stage Bootloader

One boot configuration is supported:

   The "Basic" boot chain (defconfig_file : stm32mp15_basic_defconfig)
   BootRom => FSBL = U-Boot SPL => SSBL = U-Boot
   SPL has limited security initialisation
   U-Boot is running in secure mode and provide a secure monitor to the kernel
   with only PSCI support (Power State Coordination Interface defined by ARM)

All the STM32MP1 board supported by U-Boot use the same generic board
stm32mp1 which support all the bootable devices.

Each board is configurated only with the associated device tree.

4. Device Tree Selection
========================

You need to select the appropriate device tree for your board,
the supported device trees for stm32mp157 are:

+ ed1: daughter board with pmic stpmu1
  dts: stm32mp157c-ed1

5. Build Procedure
==================

1. Install required tools for U-Boot

   + install package needed in U-Boot makefile
     (libssl-dev, swig, libpython-dev...)
   + install ARMv7 toolchain for 32bit Cortex-A (from Linaro,
     from SDK for STM32MP1, or any crosstoolchains from your distribution)

2. Set the cross compiler:

	# export CROSS_COMPILE=/path/to/toolchain/arm-linux-gnueabi-
	(you can use any gcc cross compiler compatible with U-Boot)

3. Select the output directory (optional)

	# export KBUILD_OUTPUT=/path/to/output

	for example: use one output directory for each configuration
	# export KBUILD_OUTPUT=stm32mp15_basic

4. Configure the U-Boot:

	# make <defconfig_file>

	- For basic boot mode: "stm32mp15_basic_defconfig"

5. Configure the device-tree and build the U-Boot image:

	# make DEVICE_TREE=<name> all


  example:
     basic boot on ed1
	# export KBUILD_OUTPUT=stm32mp15_basic
	# make stm32mp15_basic_defconfig
	# make DEVICE_TREE=stm32mp157c-ed1 all

6. Output files

  BootRom and ATF expect binaries with STM32 image header
  SPL expects file with U-Boot uImage header

  So in the output directory (selected by KBUILD_OUTPUT),
  you can found the needed files:

   + FSBL = spl/u-boot-spl.stm32
   + SSBL = u-boot.img

6. Switch Setting for Boot Mode
===============================

You can select the boot mode, on the board ed1 with the switch SW1

 -----------------------------------
  Boot Mode   BOOT2   BOOT1   BOOT0
 -----------------------------------
  Reserved	0	0	0
  NOR		0	0	1
  SD-Card	1	1	1
  SD-Card	1	0	1
  eMMC		0	1	0
  NAND		0	1	1
  Recovery	1	1	0
  Recovery	0	0	0

Recovery is a boot from serial link (UART/USB) and it is used with
STM32CubeProgrammer tool to load executable in RAM and to update the flash
devices available on the board (NOR/NAND/eMMC/SDCARD).
The communication between HOST and board is based on
- for UARTs : the uart protocol used with all MCU STM32
- for USB : based on USB DFU 1.1 (without the ST extensions used on MCU STM32)

7. Prepare an SDCard
===================

The minimal requirements for STMP32MP1 boot up to U-Boot are:
- GPT partitioning (with gdisk or with sgdisk)
- 2 fsbl partitions, named fsbl1 and fsbl2, size at least 256KiB
- one ssbl partition for U-Boot

Then the minimal GPT partition is:
   ----- ------- --------- -------------
  | Num | Name  | Size    |  Content    |
   ----- ------- -------- --------------
  |  1  | fsbl1 | 256 KiB |  ATF or SPL |
  |  2  | fsbl2 | 256 KiB |  ATF or SPL |
  |  3  | ssbl  | enought |  U-Boot     |
  |  *  |  -    |  -      |  Boot/Rootfs|
   ----- ------- --------- -------------

(*) add bootable partition for extlinux.conf
    following Generic Distribution
    (doc/README.distro for use)

  according the used card reader select the block device
  (/dev/sdx or /dev/mmcblk0)
  in the next example I use /dev/mmcblk0

for example: with gpt table with 128 entries

  a) remove previous formatting
	# sgdisk -o /dev/<SDCard dev>

  b) create minimal image
	# sgdisk --resize-table=128 -a 1 \
		-n 1:34:545		-c 1:fsbl1 \
		-n 2:546:1057		-c 2:fsbl2 \
		-n 3:1058:5153		-c 3:ssbl \
		-p /dev/<SDCard dev>

	you can add other partition for kernel (rootfs for example)

  c) copy the FSBL (2 times) and SSBL file on the correct partition.
     in this example in partition 1 to 3

     for basic boot mode : <SDCard dev> = /dev/mmcblk0
	# dd if=u-boot-spl.stm32 of=/dev/mmcblk0p1
	# dd if=u-boot-spl.stm32 of=/dev/mmcblk0p2
	# dd if=u-boot.img of=/dev/mmcblk0p3

To boot from SDCard, select BootPinMode = 1 1 1 and reset.

8. Prepare eMMC
===============
You can use U-Boot to copy binary in eMMC.

In the next example, you need to boot from SDCARD and the images (u-boot-spl.stm32, u-boot.img)
are presents on SDCARD (mmc 0) in ext4 partition 4 (bootfs).

To boot from SDCard, select BootPinMode = 1 1 1 and reset.

Then you update the eMMC with the next U-Boot command :

a) prepare GPT on eMMC,
	example with 2 partitions, bootfs and roots:

	# setenv emmc_part "name=ssbl,size=2MiB;name=bootfs,type=linux,bootable,size=64MiB;name=rootfs,type=linux,size=512"
	# gpt write mmc 1 ${emmc_part}

b) copy SPL on eMMC on firts boot partition
	(SPL max size is 256kB, with LBA 512, 0x200)

	# ext4load mmc 0:4 0xC0000000 u-boot-spl.stm32
	# mmc dev 1
	# mmc partconf 1 1 1 1
	# mmc write ${fileaddr} 0 200
	# mmc partconf 1 1 1 0

b) copy U-Boot in first GPT partition of eMMC

	# ext4load mmc 0:4 0xC0000000 u-boot.img
	# mmc dev 1
	# part start mmc 1 1 partstart
	# part size mmc 1 1 partsize
	# mmc write ${fileaddr} ${partstart} ${partsize}

To boot from eMMC, select BootPinMode = 0 1 0 and reset.
