doc: ti: document R5 falcon mode for AM62 platforms

This patch adds user documentation for R5 falcon mode for AM62
platforms. The main section is added to am62x_sk.rst and other documents
just include the relevant sections. Steps to build falcon support, usage
and the modified R5 memory map have been documented.

Two svg images have also been added for reference, one for the modified
tifalcon.bin and other for the fitImage format specific to R5 falcon
mode.

Signed-off-by: Anshul Dalal <anshuld@ti.com>
This commit is contained in:
Anshul Dalal 2025-10-31 13:07:57 +05:30 committed by Tom Rini
parent 2da694254d
commit 489ec1ee14
5 changed files with 846 additions and 0 deletions

View File

@ -187,6 +187,37 @@ https://www.ti.com/lit/pdf/spruj16 under the `Boot Mode Pins` section.
For SW2 and SW1, the switch state in the "ON" position = 1. For SW2 and SW1, the switch state in the "ON" position = 1.
Falcon Mode
-----------
Falcon Mode on AM62ax platforms bypasses the A53 SPL and U-Boot with the overall
boot flow as below:
.. include:: am62x_sk.rst
:start-after: .. am62x_evm_falcon_start_boot_flow
:end-before: .. am62x_evm_falcon_end_boot_flow
Build Process
^^^^^^^^^^^^^
.. include:: am62x_sk.rst
:start-after: .. am62x_evm_falcon_start_build_process
:end-before: .. am62x_evm_falcon_end_build_process
Usage
^^^^^
.. include:: am62x_sk.rst
:start-after: .. am62x_evm_falcon_start_usage
:end-before: .. am62x_evm_falcon_end_usage
R5 SPL Memory Map
^^^^^^^^^^^^^^^^^
.. include:: am62x_sk.rst
:start-after: .. am62x_evm_falcon_start_r5_memory_map
:end-before: .. am62x_evm_falcon_end_r5_memory_map
Debugging U-Boot Debugging U-Boot
---------------- ----------------

View File

@ -290,6 +290,37 @@ https://www.ti.com/lit/pdf/spruj83 under the `Boot Mode Pins` section.
For SW2 and SW1, the switch state in the "ON" position = 1. For SW2 and SW1, the switch state in the "ON" position = 1.
Falcon Mode
-----------
Falcon Mode on AM62px platforms bypasses the A53 SPL and U-Boot with the overall
boot flow as below:
.. include:: am62x_sk.rst
:start-after: .. am62x_evm_falcon_start_boot_flow
:end-before: .. am62x_evm_falcon_end_boot_flow
Build Process
^^^^^^^^^^^^^
.. include:: am62x_sk.rst
:start-after: .. am62x_evm_falcon_start_build_process
:end-before: .. am62x_evm_falcon_end_build_process
Usage
^^^^^
.. include:: am62x_sk.rst
:start-after: .. am62x_evm_falcon_start_usage
:end-before: .. am62x_evm_falcon_end_usage
R5 SPL Memory Map
^^^^^^^^^^^^^^^^^
.. include:: am62x_sk.rst
:start-after: .. am62x_evm_falcon_start_r5_memory_map
:end-before: .. am62x_evm_falcon_end_r5_memory_map
Debugging U-Boot Debugging U-Boot
---------------- ----------------

View File

@ -526,6 +526,325 @@ Next, based on NET_VCI_STRING string mentioned in respective defconfig file `tib
fetches `tispl.bin` and then `tispl.bin` fetches `u-boot.img` from TFTP server which fetches `tispl.bin` and then `tispl.bin` fetches `u-boot.img` from TFTP server which
completes Ethernet boot on the device. completes Ethernet boot on the device.
Falcon Mode
-----------
Falcon Mode on AM62x platforms bypasses the A53 SPL and U-Boot with the overall
boot flow as below:
.. am62x_evm_falcon_start_boot_flow
**Normal boot flow:**
.. code-block::
| tiboot3.bin | tispl.bin | u-boot.img | Image |
|-------------+----------------------------+------------+---------|
R5 Core | SPL | | | |
---------| \ | | | |
A53 Core | ------> TFA -> OP-TEE -> A53 SPL --> U-Boot --> Kernel |
**With falcon mode:**
.. code-block::
| tiboot3.bin | tifalcon.bin | fitImage |
|-------------+------------------+----------|
R5 Core | SPL | | |
---------| \ | | |
A53 Core | ------> TFA -> OP-TEE --> Kernel |
.. am62x_evm_falcon_end_boot_flow
Build Process
^^^^^^^^^^^^^
.. am62x_evm_falcon_start_build_process
Enabling falcon mode requires re-building TFA, U-Boot and the kernel
``fitImage`` as follows:
0. Setup environment variables:
"""""""""""""""""""""""""""""""
Refer to the build procedure above for setting up the environment variables.
1. Trusted Firmware-A:
""""""""""""""""""""""
The R5 SPL in falcon mode loads the kernel at ``0x82000000`` and the
corresponding DTB at ``0x88000000``. Therefore TFA needs to be rebuild with
changes to the respective addresses.
.. prompt:: bash $
# Change load addresses for the kernel and DTB
export TFA_EXTRA_ARGS="PRELOADED_BL33_BASE=0x82000000 K3_HW_CONFIG_BASE=0x88000000"
.. include:: k3.rst
:start-after: .. k3_rst_include_start_build_steps_tfa
:end-before: .. k3_rst_include_end_build_steps_tfa
2. U-Boot:
""""""""""
* **2.1 R5:**
.. prompt:: bash $
# use the common falcon config fragment for all K3 platforms
export $UBOOT_FALCON_CFG_FRAGMENTR="k3_r5_falcon.config"
export UBOOT_CFG_CORTEXR="${UBOOT_CFG_CORTEXR} ${UBOOT_FALCON_CFG_FRAGMENTR}"
.. include:: k3.rst
:start-after: .. k3_rst_include_start_build_steps_spl_r5
:end-before: .. k3_rst_include_end_build_steps_spl_r5
* **2.2 A53:**
After rebuilding TFA, the binary needs to be repackaged inside the tispl
binaries:
.. include:: k3.rst
:start-after: .. k3_rst_include_start_build_steps_uboot
:end-before: .. k3_rst_include_end_build_steps_uboot
3. fitImage:
""""""""""""
.. warning::
The ``fitImage`` available by default under ``boot/fitImage`` in rootfs of
the standard SDK release is not compatible with falcon mode.
For authenticated boot in falcon mode, the compute heavy authentication
required for the ``fitImage`` is offloaded from the slower R5 core to TIFS. This
requires ``fitImage`` to package the necessary binaries (kernel and dtb) with a
pre-signed x509 certificate.
**fitImage for falcon mode:**
.. image:: img/fitImage_falcon.svg
:alt: fitImage for falcon boot image format
* **Sources**
* **Core Secdev K3**
| **source:** https://git.ti.com/cgit/security-development-tools/core-secdev-k3
| **branch:** master
**Follow the steps below to create a falcon compatible fitImage:**
**3.1 Environment setup**
.. prompt:: bash $
export DTB=path/to/dtb
export IMAGE=path/to/kernel-image
**3.2 fitImage creation**
An Image tree source (*its*) file describes the structure and contents of the
final image produced by the ``mkimage`` tool.
To create the ``fitImage`` for falcon mode, create a file ``fitImage.its``
with the following contents inside the ``core-secdev-k3`` source directory,:
.. code-block:: dts
/dts-v1/;
/ {
description = "Kernel fitImage";
#address-cells = <1>;
images {
kernel-sec {
description = "Linux kernel";
data = /incbin/("Image.sec");
type = "kernel";
arch = "arm64";
os = "linux";
compression = "none";
load = <0x82000000>;
entry = <0x82000000>;
};
fdt-sec {
description = "Flattened Device Tree blob";
data = /incbin/("falcon.dtb.sec");
type = "flat_dt";
arch = "arm64";
compression = "none";
load = <0x88000000>;
entry = <0x88000000>;
};
};
configurations {
default = "conf-falcon";
conf-falcon {
description = "Pre-signed Linux kernel, FDT blob";
kernel = "kernel-sec";
fdt = "fdt-sec";
};
};
};
Sign the kernel and dtb using ``secure-binary-image.sh`` and create the
``fitImage`` using mkimage:
.. prompt:: bash $
# inside core-secdev-k3 source
cp $IMAGE Image
cp $DTB falcon.dtb
./scripts/secure-binary-image.sh Image Image.sec
./scripts/secure-binary-image.sh falcon.dtb falcon.dtb.sec
mkimage -f fitImage.its fitImage
.. am62x_evm_falcon_end_build_process
Usage
^^^^^
.. am62x_evm_falcon_start_usage
Falcon Mode makes use of a cut down variant of the tispl binary called
``tifalcon.bin`` with lacks the Cortex-A SPL and it's DTBs. This file should
be present alongside the existing ``tispl.bin`` after building U-Boot for the
Cortex-A core.
- **tifalcon.bin**
.. image:: img/tifsstub_dm_tifalcon.bin.svg
:alt: tifalcon.bin image format
The R5 SPL requires both ``tifalcon.bin`` and the ``fitImage`` (created
in previous steps) to be present in the second partition of the MMC device
specified by the ``mmcdev`` environment variable. By default, ``mmcdev`` is
set to 1, which implies that the SD card is the boot media. Additionally, the
``bootpart`` environment variable, which defaults to 1:2, specifies that the
second partition of the SD card should be used as the root file system for the
kernel.
To use eMMC instead of SD as the boot media, rebuild the R5 SPL with the
following diff:
.. code-block:: diff
diff --git a/board/ti/<soc>/<soc>.env b/board/ti/<soc>/<soc>.env
index 82b9f0741bb..73d59ac425c 100644
--- a/board/ti/<soc>/<soc>.env
+++ b/board/ti/<soc>/<soc>.env
@@ -17,8 +17,8 @@ run_kern=booti ${loadaddr} ${rd_spec} ${fdtaddr}
boot_targets=mmc1 mmc0 usb pxe dhcp
boot=mmc
-mmcdev=1
-bootpart=1:2
+mmcdev=0
+bootpart=0:1
bootdir=/boot
rd_spec=-
**List of files required on SD/eMMC for Falcon Mode:**
.. list-table::
:widths: 8 8 8 25
:header-rows: 1
* - File
- Copy path on SD/eMMC
- Partition
- Description
* - ``tifalcon.bin``
- ``/boot/tifalcon.bin``
- rootfs (ext4)
- tispl binary without SPL for the A core and DTB
* - ``fitImage``
- ``/boot/fitImage``
- rootfs (ext4)
- kernel and dtb fitImage with pre-signed binaries
.. note::
Falcon mode requires the boot binaries to be present in the root file system
of either eMMC or SD, even when using raw eMMC boot mode to load
``tiboot3.bin``.
.. am62x_evm_falcon_end_usage
R5 SPL Memory Map
^^^^^^^^^^^^^^^^^
.. am62x_evm_falcon_start_r5_memory_map
Standard Boot:
""""""""""""""
.. code-block::
0x80000000 +===============================+ Start of DDR
512KiB | TFA reserved memory space | CONFIG_K3_ATF_LOAD_ADDR
| |
0x80080000 +-------------------------------+ PRELOADED_BL33_BASE in TFA
29.5MiB | A53 SPL + DTB + | CONFIG_SPL_LOAD_FIT_ADDRESS
| Download region for FIT in DFU|
0x81e00000 +-------------------------------+
| R5 U-Boot SPL Stack + Heap |
2MiB | (size defined by |
| SPL_STACK_R_MALLOC_SIMPLE_LEN)|
0x82000000 +-------------------------------+ CONFIG_SPL_STACK_R_ADDR
112MiB | Unused |
0x89000000 +-------------------------------+
331MiB | Device Manager (DM) Load Addr |
0x9db00000 +-------------------------------+
12MiB | DM Reserved |
0x9e700000 +-------------------------------+
1MiB | Unused |
0x9e800000 +-------------------------------+ BL32_BASE in TFA
24MiB | OPTEE |
0xa0000000 +===============================+ End of DDR (512MiB)
Falcon Mode:
""""""""""""
.. code-block::
0x80000000 +===============================+ Start of DDR
512KiB | TFA reserved memory space | CONFIG_K3_ATF_LOAD_ADDR
0x80080000 +-------------------------------+
31.5MiB | Unused |
0x82000000 +-------------------------------+ PRELOADED_BL33_BASE in TFA
| | CONFIG_SYS_LOAD_ADDR
57MiB | Kernel + initramfs Image | CONFIG_SPL_LOAD_FIT_ADDRESS
| |
0x85900000 +-------------------------------+
| |
| R5 U-Boot SPL Stack + Heap |
39MiB | (size defined by |
| SPL_STACK_R_MALLOC_SIMPLE_LEN)|
| |
0x88000000 +-------------------------------+ CONFIG_SPL_STACK_R_ADDR
| | K3_HW_CONFIG_BASE in TFA
16MiB | Kernel DTB | CONFIG_SPL_PAYLOAD_ARGS_ADDR
| |
0x89000000 +-------------------------------+
331MiB | Device Manager (DM) Load Addr |
0x9db00000 +-------------------------------+
12MiB | DM Reserved |
0x9e700000 +-------------------------------+
1MiB | Unused |
0x9e800000 +-------------------------------+ BL32_BASE in TFA
24MiB | OPTEE |
0xa0000000 +===============================+ End of DDR (512MiB)
.. am62x_evm_falcon_end_r5_memory_map
Debugging U-Boot Debugging U-Boot
---------------- ----------------

View File

@ -0,0 +1,180 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause -->
<!-- Copyright (C) 2025 Texas Instruments Incorporated - https://www.ti.com/ -->
<svg
version="1.1"
width="231"
height="220"
viewBox="-0.5 -0.5 231 220"
id="svg72"
sodipodi:docname="fitImage_falcon.svg"
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview74"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="2.9"
inkscape:cx="83.62069"
inkscape:cy="131.72414"
inkscape:window-width="1918"
inkscape:window-height="1078"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="g62"
inkscape:showpageshadow="2"
inkscape:deskcolor="#d1d1d1" />
<defs
id="defs2">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 104.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="231 : 104.5 : 1"
inkscape:persp3d-origin="115.5 : 46 : 1"
id="perspective1" />
</defs>
<g
id="g62">
<rect
x="-0.06279549"
y="-0.062792346"
width="230.12561"
height="219.12558"
rx="34.518837"
ry="27.33382"
fill="#d5e8d4"
stroke="#82b366"
pointer-events="all"
id="rect4"
style="display:inline;fill:#dbe4f4;fill-opacity:1;stroke:#8166b3;stroke-width:0.888796;stroke-dasharray:none;stroke-opacity:1" />
<text
x="115.15599"
y="156.49472"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text8-8-7-6-6"
style="display:inline"
inkscape:label="x509 cert">x509 Certificate</text>
<text
x="115.15598"
y="85.615631"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text8-8-7-6-6-1"
style="display:inline"
inkscape:label="x509 cert">x509 Certificate</text>
<text
x="114.532"
y="42.263863"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text8-8-7-6-6-5"
style="display:inline"
inkscape:label="x509 cert">Fit Header</text>
<text
x="114.78398"
y="106.884"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text8-8-7-6-6-5-5"
style="display:inline"
inkscape:label="x509 cert">Kernel Image</text>
<rect
style="display:none;fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1.00157;stroke-dasharray:none;stroke-opacity:1"
id="rect1"
width="171.46796"
height="210.89911"
x="36.799908"
y="21.652758"
transform="translate(-7.533886,15.237117)" />
<text
xml:space="preserve"
style="font-size:21.3333px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#db8c8c;fill-opacity:1;stroke:#000000;stroke-width:1.13386"
x="90.327087"
y="177.15775"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
x="90.327087"
y="177.15775" /></text>
<text
xml:space="preserve"
style="font-size:21.3333px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#db8c8c;fill-opacity:1;stroke:#000000;stroke-width:1.13386"
x="106.45526"
y="214.93161"
id="text2"><tspan
sodipodi:role="line"
id="tspan2"
x="106.45526"
y="214.93161" /></text>
<g
id="g62-6"
transform="translate(-5.6022949,-9.676433)">
<text
x="120.33229"
y="188.7475"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text8-8-7-6-6-5-2"
style="display:inline"
inkscape:label="x509 cert">DTB</text>
</g>
<rect
style="fill:#db8c8c;fill-opacity:0;stroke:#000000;stroke-width:1.13386"
id="rect2"
width="82.644012"
height="17.6518"
x="73.677986"
y="94.992081" />
<rect
style="fill:#db8c8c;fill-opacity:0;stroke:#000000;stroke-width:1.13386;stroke-dasharray:none"
id="rect2-7"
width="32.336376"
height="18.068098"
x="98.83181"
y="165.66302" />
<rect
style="fill:#db8c8c;fill-opacity:0;stroke:#000000;stroke-width:1.77036;stroke-dasharray:none"
id="rect3"
width="152.43475"
height="70.500725"
x="38.782627"
y="127.54861" />
<rect
style="fill:#db8c8c;fill-opacity:0;stroke:#000000;stroke-width:1.77036;stroke-dasharray:none"
id="rect3-9"
width="152.43475"
height="70.500732"
x="38.782623"
y="56.777336" />
<rect
style="fill:#db8c8c;fill-opacity:0;stroke:#000000;stroke-width:1.78506;stroke-dasharray:none"
id="rect5"
width="152.41736"
height="36.60006"
x="38.791306"
y="20.211617" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -0,0 +1,285 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause -->
<!-- Copyright (C) 2025 Texas Instruments Incorporated - https://www.ti.com/ -->
<svg
version="1.1"
width="231"
height="280"
viewBox="-0.5 -0.5 231 280"
id="svg72"
sodipodi:docname="tifsstub_dm_tifalcon.bin.svg"
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<sodipodi:namedview
id="namedview74"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="2.3561254"
inkscape:cx="175.5"
inkscape:cy="151.30774"
inkscape:window-width="1920"
inkscape:window-height="1080"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="g62"
inkscape:showpageshadow="2"
inkscape:deskcolor="#d1d1d1" />
<defs
id="defs2">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 104.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="231 : 104.5 : 1"
inkscape:persp3d-origin="115.5 : 46 : 1"
id="perspective1" />
</defs>
<g
id="g62">
<rect
x="-0.0064085587"
y="-0.0064054145"
width="230.01283"
height="278.39682"
rx="34.501923"
ry="34.727341"
fill="#d5e8d4"
stroke="#82b366"
pointer-events="all"
id="rect4"
style="stroke-width:1.00331" />
<rect
x="40"
y="30"
width="160"
height="60"
fill="none"
stroke="#000000"
pointer-events="all"
id="rect6" />
<g
transform="translate(-0.5,-0.5)"
id="g12">
<switch
id="switch10">
<foreignObject
style="overflow: visible; text-align: left;"
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 60px; margin-left: 41px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: center;"
data-drawio-colors="color: rgb(0, 0, 0); ">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">FIT Header</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="120"
y="64"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text8">FIT Header</text>
</switch>
</g>
<rect
x="40"
y="160"
width="160"
height="50"
fill="none"
stroke="#000000"
pointer-events="all"
id="rect14" />
<g
transform="translate(-0.5,-0.5)"
id="g20">
<switch
id="switch18">
<foreignObject
style="overflow: visible; text-align: left;"
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 185px; margin-left: 41px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: center;"
data-drawio-colors="color: rgb(0, 0, 0); ">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">TIFS Stub<xhtml:br />
(GP, HS-FS, HS-SE)</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="120"
y="189"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text16">TIFS Stub...</text>
</switch>
</g>
<rect
x="40"
y="90"
width="160"
height="30"
fill="none"
stroke="#000000"
pointer-events="all"
id="rect22" />
<g
transform="translate(-0.5,-0.5)"
id="g28">
<switch
id="switch26">
<foreignObject
style="overflow: visible; text-align: left;"
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 105px; margin-left: 41px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: center;"
data-drawio-colors="color: rgb(0, 0, 0); ">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">TF-A</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="120"
y="109"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text24">TF-A</text>
</switch>
</g>
<rect
x="40"
y="120"
width="160"
height="40"
fill="none"
stroke="#000000"
pointer-events="all"
id="rect30" />
<g
transform="translate(-0.5,-0.5)"
id="g36">
<switch
id="switch34">
<foreignObject
style="overflow: visible; text-align: left;"
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 140px; margin-left: 41px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: center;"
data-drawio-colors="color: rgb(0, 0, 0); ">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">OP-TEE</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="120"
y="144"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text32">OP-TEE</text>
</switch>
</g>
<rect
x="40"
y="210"
width="160"
height="40"
fill="none"
stroke="#000000"
pointer-events="all"
id="rect38" />
<g
transform="translate(-0.5,-0.5)"
id="g44">
<switch
id="switch42">
<foreignObject
style="overflow: visible; text-align: left;"
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 158px; height: 1px; padding-top: 230px; margin-left: 41px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: center;"
data-drawio-colors="color: rgb(0, 0, 0); ">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">R5 DM FW</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="120"
y="234"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text40">R5 DM FW</text>
</switch>
</g>
</g>
<switch
id="switch70">
<g
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
id="g64" />
<a
transform="translate(0,-5)"
xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems"
target="_blank"
id="a68">
<text
text-anchor="middle"
font-size="10px"
x="50%"
y="100%"
id="text66">Text is not SVG - cannot display</text>
</a>
</switch>
</svg>

After

Width:  |  Height:  |  Size: 9.2 KiB