board: stm32mp1: update readme
[platform/kernel/u-boot.git] / board / st / stm32mp1 / README
1 SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
2 #
3 # Copyright (C) 2018 STMicroelectronics - All Rights Reserved
4 #
5
6 U-Boot on STMicroelectronics STM32MP15x
7 =======================================
8
9 1. Summary
10 ==========
11 This is a quick instruction for setup stm32mp1 boards.
12
13 2. Supported devices
14 ====================
15 U-Boot supports STMP32MP15x SoCs: STM32MP157, STM32MP153 and STM32MP151
16
17 The STM32MP15x is a Cortex-A MPU aimed at various applications.
18 It features:
19 - Dual core Cortex-A7 application core (Single on STM32MP151)
20 - 2D/3D image composition with GPU (only on STM32MP157)
21 - Standard memories interface support
22 - Standard connectivity, widely inherited from the STM32 MCU family
23 - Comprehensive security support
24
25 Everything is supported in Linux but U-Boot is limited to:
26 1. UART
27 2. SDCard/MMC controller (SDMMC)
28 3. NAND controller (FMC)
29 4. NOR controller (QSPI)
30 5. USB controller (OTG DWC2)
31 6. Ethernet controller
32
33 And the necessary drivers
34 1. I2C
35 2. STPMIC1 (PMIC and regulator)
36 3. Clock, Reset, Sysreset
37 4. Fuse
38
39 Currently the following boards are supported:
40 + stm32mp157a-avenger96.dts
41 + stm32mp157a-dk1.dts
42 + stm32mp157c-dk2.dts
43 + stm32mp157c-ed1.dts
44 + stm32mp157c-ev1.dts
45
46 3. Boot Sequences
47 =================
48
49 BootRom => FSBL in SYSRAM => SSBL in DDR => OS (Linux Kernel)
50
51 with FSBL = First Stage Bootloader
52      SSBL = Second Stage Bootloader
53
54 3 boot configurations are supported:
55
56 1) The "Trusted" boot chain (defconfig_file : stm32mp15_trusted_defconfig)
57    BootRom => FSBL = Trusted Firmware-A (TF-A) => SSBL = U-Boot
58    TF-A performs a full initialization of Secure peripherals and installs a
59    secure monitor.
60    U-Boot is running in normal world and uses TF-A monitor
61    to access to secure resources.
62
63 2) The "Trusted" boot chain with OP-TEE
64    (defconfig_file : stm32mp15_optee_defconfig)
65    BootRom => FSBL = Trusted Firmware-A (TF-A) => SSBL = U-Boot
66    TF-A performs a full initialization of Secure peripherals and installs OP-TEE
67    from specific partitions (teeh, teed, teex).
68    U-Boot is running in normal world and uses OP-TEE monitor to access
69    to secure resources.
70
71 3) The "Basic" boot chain (defconfig_file : stm32mp15_basic_defconfig)
72    BootRom => FSBL = U-Boot SPL => SSBL = U-Boot
73    SPL has limited security initialisation
74    U-Boot is running in secure mode and provide a secure monitor to the kernel
75    with only PSCI support (Power State Coordination Interface defined by ARM).
76
77 All the STM32MP15x boards supported by U-Boot use the same generic board
78 stm32mp1 which support all the bootable devices.
79
80 Each board is configurated only with the associated device tree.
81
82 4. Device Tree Selection
83 ========================
84
85 You need to select the appropriate device tree for your board,
86 the supported device trees for stm32mp157 are:
87
88 + ev1: eval board with pmic stpmic1 (ev1 = mother board + daughter ed1)
89   dts: stm32mp157c-ev1
90
91 + ed1: daughter board with pmic stpmic1
92   dts: stm32mp157c-ed1
93
94 + dk1: Discovery board
95   dts: stm32mp157a-dk1
96
97 + dk2: Discovery board = dk1 with a BT/WiFI combo and a DSI panel
98   dts: stm32mp157c-dk2
99
100 + avenger96: Avenger96 board from Arrow Electronics
101   dts: stm32mp157a-avenger96
102
103 5. Build Procedure
104 ==================
105
106 1. Install required tools for U-Boot
107
108    + install package needed in U-Boot makefile
109      (libssl-dev, swig, libpython-dev...)
110    + install ARMv7 toolchain for 32bit Cortex-A (from Linaro,
111      from SDK for STM32MP15x, or any crosstoolchains from your distribution)
112
113 2. Set the cross compiler:
114
115         # export CROSS_COMPILE=/path/to/toolchain/arm-linux-gnueabi-
116         (you can use any gcc cross compiler compatible with U-Boot)
117
118 3. Select the output directory (optional)
119
120         # export KBUILD_OUTPUT=/path/to/output
121
122         for example: use one output directory for each configuration
123         # export KBUILD_OUTPUT=stm32mp15_trusted
124         # export KBUILD_OUTPUT=stm32mp15_optee
125         # export KBUILD_OUTPUT=stm32mp15_basic
126
127         you can build outside of code directory:
128         # export KBUILD_OUTPUT=../build/stm32mp15_trusted
129
130 4. Configure U-Boot:
131
132         # make <defconfig_file>
133
134         - For trusted boot mode : "stm32mp15_trusted_defconfig"
135         - For trusted with OP-TEE boot mode : "stm32mp15_optee_defconfig"
136         - For basic boot mode: "stm32mp15_basic_defconfig"
137
138 5. Configure the device-tree and build the U-Boot image:
139
140         # make DEVICE_TREE=<name> all
141
142   example:
143   a) trusted boot on ev1
144         # export KBUILD_OUTPUT=stm32mp15_trusted
145         # make stm32mp15_trusted_defconfig
146         # make DEVICE_TREE=stm32mp157c-ev1 all
147
148   b) trusted with OP-TEE boot on dk2
149         # export KBUILD_OUTPUT=stm32mp15_optee
150         # make stm32mp15_optee_defconfig
151         # make DEVICE_TREE=stm32mp157c-dk2 all
152
153   c) basic boot on ev1
154         # export KBUILD_OUTPUT=stm32mp15_basic
155         # make stm32mp15_basic_defconfig
156         # make DEVICE_TREE=stm32mp157c-ev1 all
157
158   d) basic boot on ed1
159         # export KBUILD_OUTPUT=stm32mp15_basic
160         # make stm32mp15_basic_defconfig
161         # make DEVICE_TREE=stm32mp157c-ed1 all
162
163   e) basic boot on dk1
164         # export KBUILD_OUTPUT=stm32mp15_basic
165         # make stm32mp15_basic_defconfig
166         # make DEVICE_TREE=stm32mp157a-dk1 all
167
168   f) basic boot on avenger96
169         # export KBUILD_OUTPUT=stm32mp15_basic
170         # make stm32mp15_basic_defconfig
171         # make DEVICE_TREE=stm32mp157a-avenger96 all
172
173 6. Output files
174
175   BootRom and TF-A expect binaries with STM32 image header
176   SPL expects file with U-Boot uImage header
177
178   So in the output directory (selected by KBUILD_OUTPUT),
179   you can found the needed files:
180
181   a) For Trusted boot (with or without OP-TEE)
182    + FSBL = tf-a.stm32 (provided by TF-A compilation)
183    + SSBL = u-boot.stm32
184
185   b) For Basic boot
186    + FSBL = spl/u-boot-spl.stm32
187    + SSBL = u-boot.img
188
189 6. Switch Setting for Boot Mode
190 ===============================
191
192 You can select the boot mode, on the board with one switch :
193
194 - on the daugther board ed1 with the switch SW1 : BOOT0, BOOT1, BOOT2
195
196  -----------------------------------
197   Boot Mode   BOOT2   BOOT1   BOOT0
198  -----------------------------------
199   Reserved      0       0       0
200   NOR           0       0       1
201   SD-Card       1       0       1
202   eMMC          0       1       0
203   NAND          0       1       1
204   Recovery      1       1       0
205   Recovery      0       0       0
206
207 - on board DK1/DK2 with the switch SW1 : BOOT0, BOOT2
208   (BOOT1 forced to 0, NOR not supported)
209
210  --------------------------
211   Boot Mode   BOOT2  BOOT0
212  --------------------------
213   Reserved      1      0
214   SD-Card       1      1
215   Recovery      0      0
216
217 - Boot mode of Avenger96 can be selected using switch S3
218
219  -----------------------------------
220   Boot Mode   BOOT2   BOOT1   BOOT0
221  -----------------------------------
222   Recovery      0       0       0
223   NOR           0       0       1
224   SD-Card       1       0       1
225   eMMC          0       1       0
226   NAND          0       1       1
227   Reserved      1       0       0
228   Recovery      1       1       0
229   SD-Card       1       1       1
230
231 Recovery is a boot from serial link (UART/USB) and it is used with
232 STM32CubeProgrammer tool to load executable in RAM and to update the flash
233 devices available on the board (NOR/NAND/eMMC/SDCARD).
234 The communication between HOST and board is based on
235 - for UARTs : the uart protocol used with all MCU STM32
236 - for USB : based on USB DFU 1.1 (without the ST extensions used on MCU STM32)
237
238 7. Prepare an SDCard
239 ===================
240
241 The minimal requirements for STMP32MP1 boot up to U-Boot are:
242 - GPT partitioning (with gdisk or with sgdisk)
243 - 2 fsbl partitions, named fsbl1 and fsbl2, size at least 256KiB
244 - one ssbl partition for U-Boot
245
246 Then the minimal GPT partition is:
247    ----- ------- --------- --------------
248   | Num | Name  | Size    |  Content     |
249    ----- ------- -------- ---------------
250   |  1  | fsbl1 | 256 KiB |  TF-A or SPL |
251   |  2  | fsbl2 | 256 KiB |  TF-A or SPL |
252   |  3  | ssbl  | enought |  U-Boot      |
253   |  *  |  -    |  -      |  Boot/Rootfs |
254    ----- ------- --------- --------------
255
256 (*) add bootable partition for extlinux.conf
257     following Generic Distribution
258     (doc/README.distro for use)
259
260   according the used card reader select the block device
261   (/dev/sdx or /dev/mmcblk0)
262   in the next example I use /dev/mmcblk0
263
264 for example: with gpt table with 128 entries
265
266   a) remove previous formatting
267         # sgdisk -o /dev/<SDCard dev>
268
269   b) create minimal image
270         # sgdisk --resize-table=128 -a 1 \
271                 -n 1:34:545             -c 1:fsbl1 \
272                 -n 2:546:1057           -c 2:fsbl2 \
273                 -n 3:1058:5153          -c 3:ssbl \
274                 -p /dev/<SDCard dev>
275
276         you can add other partitions for kernel
277         one partition rootfs for example:
278                 -n 4:5154:              -c 4:rootfs \
279
280   c) copy the FSBL (2 times) and SSBL file on the correct partition.
281      in this example in partition 1 to 3
282
283      for basic boot mode : <SDCard dev> = /dev/mmcblk0
284         # dd if=u-boot-spl.stm32 of=/dev/mmcblk0p1
285         # dd if=u-boot-spl.stm32 of=/dev/mmcblk0p2
286         # dd if=u-boot.img of=/dev/mmcblk0p3
287
288      for trusted boot mode :
289         # dd if=tf-a.stm32 of=/dev/mmcblk0p1
290         # dd if=tf-a.stm32 of=/dev/mmcblk0p2
291         # dd if=u-boot.stm32 of=/dev/mmcblk0p3
292
293 To boot from SDCard, select BootPinMode = 1 0 1 and reset.
294
295 8. Prepare eMMC
296 ===============
297 You can use U-Boot to copy binary in eMMC.
298
299 In the next example, you need to boot from SDCARD and the images (u-boot-spl.stm32, u-boot.img)
300 are presents on SDCARD (mmc 0) in ext4 partition 4 (bootfs).
301
302 To boot from SDCard, select BootPinMode = 1 0 1 and reset.
303
304 Then you update the eMMC with the next U-Boot command :
305
306 a) prepare GPT on eMMC,
307         example with 2 partitions, bootfs and roots:
308
309         # setenv emmc_part "name=ssbl,size=2MiB;name=bootfs,type=linux,bootable,size=64MiB;name=rootfs,type=linux,size=512"
310         # gpt write mmc 1 ${emmc_part}
311
312 b) copy SPL on eMMC on firts boot partition
313         (SPL max size is 256kB, with LBA 512, 0x200)
314
315         # ext4load mmc 0:4 0xC0000000 u-boot-spl.stm32
316         # mmc dev 1
317         # mmc partconf 1 1 1 1
318         # mmc write ${fileaddr} 0 200
319         # mmc partconf 1 1 1 0
320
321 c) copy U-Boot in first GPT partition of eMMC
322
323         # ext4load mmc 0:4 0xC0000000 u-boot.img
324         # mmc dev 1
325         # part start mmc 1 1 partstart
326         # mmc write ${fileaddr} ${partstart} ${filesize}
327
328 To boot from eMMC, select BootPinMode = 0 1 0 and reset.
329
330 9. MAC Address
331 ==============
332
333 Please read doc/README.enetaddr for the implementation guidelines for mac id
334 usage. Basically, environment has precedence over board specific storage.
335
336 For STMicroelectonics board, it is retrieved in STM32MP15x otp :
337 - OTP_57[31:0] = MAC_ADDR[31:0]
338 - OTP_58[15:0] = MAC_ADDR[47:32]
339
340 To program a MAC address on virgin OTP words above, you can use the fuse command
341 on bank 0 to access to internal OTP:
342
343     Prerequisite: check if a MAC address isn't yet programmed in OTP
344
345     1- check OTP: their value must be equal to 0
346
347        STM32MP> fuse sense 0 57 2
348        Sensing bank 0:
349        Word 0x00000039: 00000000 00000000
350
351     2- check environment variable
352
353        STM32MP> env print ethaddr
354        ## Error: "ethaddr" not defined
355
356     Example to set mac address "12:34:56:78:9a:bc"
357
358     1- Write OTP
359        STM32MP> fuse prog -y 0 57 0x78563412 0x0000bc9a
360
361     2- Read OTP
362        STM32MP> fuse sense 0 57 2
363        Sensing bank 0:
364        Word 0x00000039: 78563412 0000bc9a
365
366     3- next REBOOT :
367        ### Setting environment from OTP MAC address = "12:34:56:78:9a:bc"
368
369     4 check env update
370        STM32MP> env print ethaddr
371        ethaddr=12:34:56:78:9a:bc
372
373 warning:: This MAC address provisioning can't be executed twice on the same
374           board as the OTP are protected. It is already done for the board
375           provided by STMicroelectronics.
376
377 10. Coprocessor firmware
378 ========================
379
380 U-Boot can boot the coprocessor before the kernel (coprocessor early boot).
381
382 A/ Manuallly by using rproc commands (update the bootcmd)
383      Configurations
384         # env set name_copro "rproc-m4-fw.elf"
385         # env set dev_copro 0
386         # env set loadaddr_copro 0xC1000000
387
388      Load binary from bootfs partition (number 4) on SDCard (mmc 0)
389         # ext4load mmc 0:4 ${loadaddr_copro} ${name_copro}
390         => ${filesize} updated with the size of the loaded file
391
392      Start M4 firmware with remote proc command
393         # rproc init
394         # rproc load ${dev_copro} ${loadaddr_copro} ${filesize}
395         # rproc start ${dev_copro}
396
397 B/ Automatically by using FIT feature and generic DISTRO bootcmd
398
399    see examples in this directory :
400
401    Generate FIT including kernel + device tree + M4 firmware
402    with cfg with M4 boot
403         $> mkimage -f fit_copro_kernel_dtb.its fit_copro_kernel_dtb.itb
404
405     Then using DISTRO configuration file: see extlinux.conf to select
406     the correct configuration
407         => stm32mp157c-ev1-m4
408         => stm32mp157c-dk2-m4
409
410 11. DFU support
411 ===============
412
413 The DFU is supported on ST board.
414 The env variable dfu_alt_info is automatically build, and all
415 the memory present on the ST boards are exported.
416
417 The mode is started by
418
419 STM32MP> dfu 0
420
421 On EV1 board:
422
423 STM32MP> dfu 0 list
424
425 DFU alt settings list:
426 dev: RAM alt: 0 name: uImage layout: RAM_ADDR
427 dev: RAM alt: 1 name: devicetree.dtb layout: RAM_ADDR
428 dev: RAM alt: 2 name: uramdisk.image.gz layout: RAM_ADDR
429 dev: eMMC alt: 3 name: sdcard_fsbl1 layout: RAW_ADDR
430 dev: eMMC alt: 4 name: sdcard_fsbl2 layout: RAW_ADDR
431 dev: eMMC alt: 5 name: sdcard_ssbl layout: RAW_ADDR
432 dev: eMMC alt: 6 name: sdcard_bootfs layout: RAW_ADDR
433 dev: eMMC alt: 7 name: sdcard_vendorfs layout: RAW_ADDR
434 dev: eMMC alt: 8 name: sdcard_rootfs layout: RAW_ADDR
435 dev: eMMC alt: 9 name: sdcard_userfs layout: RAW_ADDR
436 dev: eMMC alt: 10 name: emmc_fsbl1 layout: RAW_ADDR
437 dev: eMMC alt: 11 name: emmc_fsbl2 layout: RAW_ADDR
438 dev: eMMC alt: 12 name: emmc_ssbl layout: RAW_ADDR
439 dev: eMMC alt: 13 name: emmc_bootfs layout: RAW_ADDR
440 dev: eMMC alt: 14 name: emmc_vendorfs layout: RAW_ADDR
441 dev: eMMC alt: 15 name: emmc_rootfs layout: RAW_ADDR
442 dev: eMMC alt: 16 name: emmc_userfs layout: RAW_ADDR
443 dev: MTD alt: 17 name: nor_fsbl1 layout: RAW_ADDR
444 dev: MTD alt: 18 name: nor_fsbl2 layout: RAW_ADDR
445 dev: MTD alt: 19 name: nor_ssbl layout: RAW_ADDR
446 dev: MTD alt: 20 name: nor_env layout: RAW_ADDR
447 dev: MTD alt: 21 name: nand_fsbl layout: RAW_ADDR
448 dev: MTD alt: 22 name: nand_ssbl1 layout: RAW_ADDR
449 dev: MTD alt: 23 name: nand_ssbl2 layout: RAW_ADDR
450 dev: MTD alt: 24 name: nand_UBI layout: RAW_ADDR
451 dev: VIRT alt: 25 name: OTP layout: RAW_ADDR
452 dev: VIRT alt: 26 name: PMIC layout: RAW_ADDR
453
454 All the supported device are exported for dfu-util tool:
455
456 $> dfu-util -l
457 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=26, name="PMIC", serial="002700333338511934383330"
458 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=25, name="OTP", serial="002700333338511934383330"
459 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=24, name="nand_UBI", serial="002700333338511934383330"
460 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=23, name="nand_ssbl2", serial="002700333338511934383330"
461 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=22, name="nand_ssbl1", serial="002700333338511934383330"
462 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=21, name="nand_fsbl", serial="002700333338511934383330"
463 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=20, name="nor_env", serial="002700333338511934383330"
464 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=19, name="nor_ssbl", serial="002700333338511934383330"
465 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=18, name="nor_fsbl2", serial="002700333338511934383330"
466 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=17, name="nor_fsbl1", serial="002700333338511934383330"
467 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=16, name="emmc_userfs", serial="002700333338511934383330"
468 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=15, name="emmc_rootfs", serial="002700333338511934383330"
469 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=14, name="emmc_vendorfs", serial="002700333338511934383330"
470 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=13, name="emmc_bootfs", serial="002700333338511934383330"
471 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=12, name="emmc_ssbl", serial="002700333338511934383330"
472 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=11, name="emmc_fsbl2", serial="002700333338511934383330"
473 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=10, name="emmc_fsbl1", serial="002700333338511934383330"
474 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=9, name="sdcard_userfs", serial="002700333338511934383330"
475 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=8, name="sdcard_rootfs", serial="002700333338511934383330"
476 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=7, name="sdcard_vendorfs", serial="002700333338511934383330"
477 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=6, name="sdcard_bootfs", serial="002700333338511934383330"
478 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=5, name="sdcard_ssbl", serial="002700333338511934383330"
479 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=4, name="sdcard_fsbl2", serial="002700333338511934383330"
480 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=3, name="sdcard_fsbl1", serial="002700333338511934383330"
481 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=2, name="uramdisk.image.gz", serial="002700333338511934383330"
482 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=1, name="devicetree.dtb", serial="002700333338511934383330"
483 Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=0, name="uImage", serial="002700333338511934383330"
484
485 You can update the boot device:
486
487 #SDCARD
488 $> dfu-util -d 0483:5720 -a 3 -D tf-a-stm32mp157c-ev1-trusted.stm32
489 $> dfu-util -d 0483:5720 -a 4 -D tf-a-stm32mp157c-ev1-trusted.stm32
490 $> dfu-util -d 0483:5720 -a 5 -D u-boot-stm32mp157c-ev1-trusted.img
491 $> dfu-util -d 0483:5720 -a 6 -D st-image-bootfs-openstlinux-weston-stm32mp1.ext4
492 $> dfu-util -d 0483:5720 -a 7 -D st-image-vendorfs-openstlinux-weston-stm32mp1.ext4
493 $> dfu-util -d 0483:5720 -a 8 -D st-image-weston-openstlinux-weston-stm32mp1.ext4
494 $> dfu-util -d 0483:5720 -a 9 -D st-image-userfs-openstlinux-weston-stm32mp1.ext4
495
496 #EMMC
497 $> dfu-util -d 0483:5720 -a 10 -D tf-a-stm32mp157c-ev1-trusted.stm32
498 $> dfu-util -d 0483:5720 -a 11 -D tf-a-stm32mp157c-ev1-trusted.stm32
499 $> dfu-util -d 0483:5720 -a 12 -D u-boot-stm32mp157c-ev1-trusted.img
500 $> dfu-util -d 0483:5720 -a 13 -D st-image-bootfs-openstlinux-weston-stm32mp1.ext4
501 $> dfu-util -d 0483:5720 -a 14 -D st-image-vendorfs-openstlinux-weston-stm32mp1.ext4
502 $> dfu-util -d 0483:5720 -a 15 -D st-image-weston-openstlinux-weston-stm32mp1.ext4
503 $> dfu-util -d 0483:5720 -a 16 -D st-image-userfs-openstlinux-weston-stm32mp1.ext4
504
505 #NOR
506 $> dfu-util -d 0483:5720 -a 17 -D tf-a-stm32mp157c-ev1-trusted.stm32
507 $> dfu-util -d 0483:5720 -a 18 -D tf-a-stm32mp157c-ev1-trusted.stm32
508 $> dfu-util -d 0483:5720 -a 19 -D u-boot-stm32mp157c-ev1-trusted.img
509
510 #NAND (UBI partition used for NAND only boot or NOR + NAND boot)
511 $> dfu-util -d 0483:5720 -a 21 -D tf-a-stm32mp157c-ev1-trusted.stm32
512 $> dfu-util -d 0483:5720 -a 22 -D u-boot-stm32mp157c-ev1-trusted.img
513 $> dfu-util -d 0483:5720 -a 23 -D u-boot-stm32mp157c-ev1-trusted.img
514 $> dfu-util -d 0483:5720 -a 24 -D st-image-weston-openstlinux-weston-stm32mp1_nand_4_256_multivolume.ubi
515
516 And you can also dump the OTP and the PMIC NVM with:
517
518 $> dfu-util -d 0483:5720 -a 25 -U otp.bin
519 $> dfu-util -d 0483:5720 -a 26 -U pmic.bin