blob: 5f3c46cf9f9ee76766353032bdd0622dba6ccbcf [file] [log] [blame]
Neha Malcom Francis507be122023-07-22 00:14:43 +05301.. SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
2.. sectionauthor:: Neha Francis <n-francis@ti.com>
3
4AM65x Platforms
5===============
6
7Introduction:
8-------------
9The AM65x family of SoCs is the first device family from K3 Multicore
10SoC architecture, targeted for broad market and industrial control with
11aim to meet the complex processing needs of modern embedded products.
12
13The device is built over three domains, each containing specific processing
14cores, voltage domains and peripherals:
15
161. Wake-up (WKUP) domain:
17 * Device Management and Security Controller (DMSC)
18
192. Microcontroller (MCU) domain:
20 * Dual Core ARM Cortex-R5F processor
21
223. MAIN domain:
23 * Quad core 64-bit ARM Cortex-A53
24
25More info can be found in TRM: http://www.ti.com/lit/pdf/spruid7
26
Nishanth Menon4981d9a2023-07-27 13:59:00 -050027Platform information:
28
29* https://www.ti.com/tool/TMDX654GPEVM
30
Neha Malcom Francis507be122023-07-22 00:14:43 +053031Boot Flow:
32----------
33On AM65x family devices, ROM supports boot only via MCU(R5). This means that
34bootloader has to run on R5 core. In order to meet this constraint, and for
35the following reasons the boot flow is designed as mentioned:
36
371. Need to move away from R5 asap, so that we want to start *any*
38firmware on the R5 cores for example autosar can be loaded to receive CAN
39response and other safety operations to be started. This operation is
40very time critical and is applicable for all automotive use cases.
41
422. U-Boot on A53 should start other remotecores for various
43applications. This should happen before running Linux.
44
453. In production boot flow, we might not like to use full U-Boot,
46instead use Falcon boot flow to reduce boot time.
47
Nishanth Menond683f502023-07-27 13:58:46 -050048.. image:: img/boot_diagram_am65.svg
Neha Malcom Francis507be122023-07-22 00:14:43 +053049
50- Here DMSC acts as master and provides all the critical services. R5/A53
51 requests DMSC to get these services done as shown in the above diagram.
52
53Sources:
54--------
Neha Malcom Francis507be122023-07-22 00:14:43 +053055
Nishanth Menonee91e482023-07-27 13:58:44 -050056.. include:: k3.rst
57 :start-after: .. k3_rst_include_start_boot_sources
58 :end-before: .. k3_rst_include_end_boot_sources
Neha Malcom Francis507be122023-07-22 00:14:43 +053059
60Build procedure:
61----------------
Nishanth Menonb7ee22f2023-07-27 13:58:48 -0500620. Setup the environment variables:
Neha Malcom Francis507be122023-07-22 00:14:43 +053063
Nishanth Menonb7ee22f2023-07-27 13:58:48 -050064.. include:: k3.rst
65 :start-after: .. k3_rst_include_start_common_env_vars_desc
66 :end-before: .. k3_rst_include_end_common_env_vars_desc
Neha Malcom Francis507be122023-07-22 00:14:43 +053067
Nishanth Menonb7ee22f2023-07-27 13:58:48 -050068.. include:: k3.rst
69 :start-after: .. k3_rst_include_start_board_env_vars_desc
70 :end-before: .. k3_rst_include_end_board_env_vars_desc
Neha Malcom Francis507be122023-07-22 00:14:43 +053071
Nishanth Menonb7ee22f2023-07-27 13:58:48 -050072Set the variables corresponding to this platform:
Neha Malcom Francis507be122023-07-22 00:14:43 +053073
Nishanth Menonb7ee22f2023-07-27 13:58:48 -050074.. include:: k3.rst
75 :start-after: .. k3_rst_include_start_common_env_vars_defn
76 :end-before: .. k3_rst_include_end_common_env_vars_defn
Neha Malcom Francis507be122023-07-22 00:14:43 +053077.. code-block:: bash
78
Nishanth Menonb7ee22f2023-07-27 13:58:48 -050079 $ export UBOOT_CFG_CORTEXR=am65x_evm_r5_defconfig
80 $ export UBOOT_CFG_CORTEXA=am65x_evm_a53_defconfig
81 $ export TFA_BOARD=generic
82 $ # we dont use any extra TFA parameters
83 $ unset TFA_EXTRA_ARGS
84 $ export OPTEE_PLATFORM=k3-am65x
85 $ # we dont use any extra OP-TEE parameters
86 $ unset OPTEE_EXTRA_ARGS
87
88.. am65x_evm_rst_include_start_build_steps
89
901. Trusted Firmware-A:
91
92.. include:: k3.rst
93 :start-after: .. k3_rst_include_start_build_steps_tfa
94 :end-before: .. k3_rst_include_end_build_steps_tfa
95
96
972. OP-TEE:
98
99.. include:: k3.rst
100 :start-after: .. k3_rst_include_start_build_steps_optee
101 :end-before: .. k3_rst_include_end_build_steps_optee
Neha Malcom Francis507be122023-07-22 00:14:43 +0530102
1033. U-Boot:
104
105* 4.1 R5:
106
Nishanth Menonb7ee22f2023-07-27 13:58:48 -0500107.. include:: k3.rst
108 :start-after: .. k3_rst_include_start_build_steps_spl_r5
109 :end-before: .. k3_rst_include_end_build_steps_spl_r5
Neha Malcom Francis507be122023-07-22 00:14:43 +0530110
111* 4.2 A53:
112
Nishanth Menonb7ee22f2023-07-27 13:58:48 -0500113.. include:: k3.rst
114 :start-after: .. k3_rst_include_start_build_steps_uboot
115 :end-before: .. k3_rst_include_end_build_steps_uboot
116.. am65x_evm_rst_include_end_build_steps
Neha Malcom Francis507be122023-07-22 00:14:43 +0530117
118Target Images
119--------------
Tom Rinifdf45032023-07-25 12:44:16 -0400120In order to boot we need tiboot3.bin, sysfw.itb, tispl.bin and u-boot.img.
121Each SoC variant (GP and HS) requires a different source for these files.
Neha Malcom Francis507be122023-07-22 00:14:43 +0530122
123- GP
124
125 * tiboot3-am65x_sr2-gp-evm.bin, sysfw-am65x_sr2-gp-evm.itb from step 4.1
126 * tispl.bin_unsigned, u-boot.img_unsigned from step 4.2
127
128- HS
129
130 * tiboot3-am65x_sr2-hs-evm.bin, sysfw-am65x_sr2-hs-evm.itb from step 4.1
131 * tispl.bin, u-boot.img from step 4.2
132
133Image formats:
134--------------
135
Nishanth Menon91834942023-07-27 13:58:51 -0500136- tiboot3.bin
Neha Malcom Francis507be122023-07-22 00:14:43 +0530137
Nishanth Menon91834942023-07-27 13:58:51 -0500138.. image:: img/no_multi_cert_tiboot3.bin.svg
Neha Malcom Francis507be122023-07-22 00:14:43 +0530139
140- tispl.bin
141
Nishanth Menon91834942023-07-27 13:58:51 -0500142.. image:: img/nodm_tispl.bin.svg
Neha Malcom Francis507be122023-07-22 00:14:43 +0530143
144- sysfw.itb
145
Nishanth Menon91834942023-07-27 13:58:51 -0500146.. image:: img/sysfw.itb.svg
Neha Malcom Francis507be122023-07-22 00:14:43 +0530147
148eMMC:
149-----
150ROM supports booting from eMMC from boot0 partition offset 0x0
151
152Flashing images to eMMC:
153
154The following commands can be used to download tiboot3.bin, tispl.bin,
155u-boot.img, and sysfw.itb from an SD card and write them to the eMMC boot0
156partition at respective addresses.
157
158.. code-block:: text
159
160 => mmc dev 0 1
161 => fatload mmc 1 ${loadaddr} tiboot3.bin
162 => mmc write ${loadaddr} 0x0 0x400
163 => fatload mmc 1 ${loadaddr} tispl.bin
164 => mmc write ${loadaddr} 0x400 0x1000
165 => fatload mmc 1 ${loadaddr} u-boot.img
166 => mmc write ${loadaddr} 0x1400 0x2000
167 => fatload mmc 1 ${loadaddr} sysfw.itb
168 => mmc write ${loadaddr} 0x3600 0x800
169
170To give the ROM access to the boot partition, the following commands must be
171used for the first time:
172
173.. code-block:: text
174
175 => mmc partconf 0 1 1 1
176 => mmc bootbus 0 1 0 0
177
178To create a software partition for the rootfs, the following command can be
179used:
180
181.. code-block:: text
182
183 => gpt write mmc 0 ${partitions}
184
185eMMC layout:
186
Nishanth Menonef930a72023-07-27 13:58:58 -0500187.. image:: img/emmc_am65x_evm_boot0.svg
Neha Malcom Francis507be122023-07-22 00:14:43 +0530188
189Kernel image and DT are expected to be present in the /boot folder of rootfs.
190To boot kernel from eMMC, use the following commands:
191
192.. code-block:: text
193
194 => setenv mmcdev 0
195 => setenv bootpart 0
196 => boot
197
198OSPI:
199-----
200ROM supports booting from OSPI from offset 0x0.
201
202Flashing images to OSPI:
203
204Below commands can be used to download tiboot3.bin, tispl.bin, u-boot.img,
205and sysfw.itb over tftp and then flash those to OSPI at their respective
206addresses.
207
208.. code-block:: text
209
210 => sf probe
211 => tftp ${loadaddr} tiboot3.bin
212 => sf update $loadaddr 0x0 $filesize
213 => tftp ${loadaddr} tispl.bin
214 => sf update $loadaddr 0x80000 $filesize
215 => tftp ${loadaddr} u-boot.img
216 => sf update $loadaddr 0x280000 $filesize
217 => tftp ${loadaddr} sysfw.itb
218 => sf update $loadaddr 0x6C0000 $filesize
219
220Flash layout for OSPI:
221
Nishanth Menon2bb20e42023-07-27 13:58:57 -0500222.. image:: img/ospi_sysfw.svg
Neha Malcom Francis507be122023-07-22 00:14:43 +0530223
224Kernel Image and DT are expected to be present in the /boot folder of UBIFS
225ospi.rootfs just like in SD card case. U-Boot looks for UBI volume named
226"rootfs" for rootfs.
227
228To boot kernel from OSPI, at the U-Boot prompt:
229
230.. code-block:: text
231
232 => setenv boot ubi
233 => boot
234
235UART:
236-----
237ROM supports booting from MCU_UART0 via X-Modem protocol. The entire UART-based
238boot process up to U-Boot (proper) prompt goes through different stages and uses
239different UART peripherals as follows:
240
Nishanth Menonf0206802023-07-27 13:58:56 -0500241.. list-table:: ROM UART Boot Responsibilities
242 :widths: 16 16 16 16
243 :header-rows: 1
244
245 * - Who
246 - Loading What
247 - Hardware Module
248 - Protocol
249
250 * - Boot ROM
251 - tiboot3.bin
252 - MCU_UART0
253 - X-Modem(*)
254
255 * - R5 SPL
256 - sysfw.itb
257 - MCU_UART0
258 - Y-Modem(*)
259
260 * - R5 SPL
261 - tispl.bin
262 - MAIN_UART0
263 - Y-Modem
Neha Malcom Francis507be122023-07-22 00:14:43 +0530264
Nishanth Menonf0206802023-07-27 13:58:56 -0500265 * - A53 SPL
266 - u-boot.img
267 - MAIN_UART0
268 - Y-Modem
Neha Malcom Francis507be122023-07-22 00:14:43 +0530269
270Note that in addition to X/Y-Modem related protocol timeouts the DMSC
271watchdog timeout of 3min (typ.) needs to be observed until System Firmware
272is fully loaded (from sysfw.itb) and started.
273
274Example bash script sequence for running on a Linux host PC feeding all boot
275artifacts needed to the device:
276
277.. code-block:: text
278
279 MCU_DEV=/dev/ttyUSB1
280 MAIN_DEV=/dev/ttyUSB0
281
282 stty -F $MCU_DEV 115200 cs8 -cstopb -parenb
283 stty -F $MAIN_DEV 115200 cs8 -cstopb -parenb
284
285 sb --xmodem tiboot3.bin > $MCU_DEV < $MCU_DEV
286 sb --ymodem sysfw.itb > $MCU_DEV < $MCU_DEV
287 sb --ymodem tispl.bin > $MAIN_DEV < $MAIN_DEV
288 sleep 1
289 sb --xmodem u-boot.img > $MAIN_DEV < $MAIN_DEV
Jason Kacinesb0fdee92023-08-03 01:29:22 -0500290
291Debugging U-Boot
292----------------
293
294See :ref:`Common Debugging environment - OpenOCD<k3_rst_refer_openocd>`: for
295detailed setup information.
296
297.. warning::
298
299 **OpenOCD support since**: v0.12.0
300
301 If the default package version of OpenOCD in your development
302 environment's distribution needs to be updated, it might be necessary to
303 build OpenOCD from the source.
304
305.. include:: k3.rst
306 :start-after: .. k3_rst_include_start_openocd_connect_XDS110
307 :end-before: .. k3_rst_include_end_openocd_connect_XDS110
308
309To start OpenOCD and connect to the board
310
311.. code-block:: bash
312
313 openocd -f board/ti_am654evm.cfg