xref: /arm-trusted-firmware/docs/resources/diagrams/plantuml/tfa_dfd.puml (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu/'
2*91f16700Schasinglulu ' Copyright (c) 2021, Arm Limited. All rights reserved.
3*91f16700Schasinglulu '
4*91f16700Schasinglulu ' SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu '/
6*91f16700Schasinglulu
7*91f16700Schasinglulu/'
8*91f16700SchasingluluTF-A Data Flow Diagram
9*91f16700Schasinglulu'/
10*91f16700Schasinglulu
11*91f16700Schasinglulu@startuml
12*91f16700Schasingluludigraph tfa_dfd {
13*91f16700Schasinglulu
14*91f16700Schasinglulu    # Arrange nodes from left to right
15*91f16700Schasinglulu    rankdir="LR"
16*91f16700Schasinglulu
17*91f16700Schasinglulu    # Allow arrows to end on cluster boundaries
18*91f16700Schasinglulu    compound=true
19*91f16700Schasinglulu
20*91f16700Schasinglulu    # Default settings for edges and nodes
21*91f16700Schasinglulu    edge [minlen=2 color="#8c1b07"]
22*91f16700Schasinglulu    node [fillcolor="#ffb866" style=filled shape=box fixedsize=true width=1.6 height=0.7]
23*91f16700Schasinglulu
24*91f16700Schasinglulu    # Nodes outside of the trust boundary
25*91f16700Schasinglulu    nsec [label="Non-secure\nClients"]
26*91f16700Schasinglulu    sec [label="Secure\nClients"]
27*91f16700Schasinglulu    dbg [label="Debug & Trace"]
28*91f16700Schasinglulu    uart [label="UART"]
29*91f16700Schasinglulu    nvm [label="Non-volatile\nMemory"]
30*91f16700Schasinglulu
31*91f16700Schasinglulu    # Trust boundary cluster
32*91f16700Schasinglulu    subgraph cluster_trusted{
33*91f16700Schasinglulu        graph [style=dashed color="#f22430"]
34*91f16700Schasinglulu
35*91f16700Schasinglulu        # HW IPs cluster
36*91f16700Schasinglulu        subgraph cluster_ip{
37*91f16700Schasinglulu            label ="Hardware IPs";
38*91f16700Schasinglulu            graph [style=filled color="#000000" fillcolor="#ffd29e"]
39*91f16700Schasinglulu
40*91f16700Schasinglulu            rank="same"
41*91f16700Schasinglulu            gic [label="GIC" width=1.2 height=0.5]
42*91f16700Schasinglulu            tzc [label="TZ\nController" width=1.2 height=0.5]
43*91f16700Schasinglulu            etc [label="..." shape=none style=none height=0.5]
44*91f16700Schasinglulu        }
45*91f16700Schasinglulu
46*91f16700Schasinglulu        # TF-A cluster
47*91f16700Schasinglulu        subgraph cluster_tfa{
48*91f16700Schasinglulu            label ="TF-A";
49*91f16700Schasinglulu            graph [style=filled color="#000000" fillcolor="#faf9cd"]
50*91f16700Schasinglulu
51*91f16700Schasinglulu            bl1 [label="Boot ROM\n(BL1)" fillcolor="#ddffb3"];
52*91f16700Schasinglulu            bl2 [label="Trusted Boot\nFirmware\n(BL2)" fillcolor="#ddffb3" height=1]
53*91f16700Schasinglulu            bl31 [label="TF-A Runtime\n(BL31)" fillcolor="#ddffb3"]
54*91f16700Schasinglulu        }
55*91f16700Schasinglulu    }
56*91f16700Schasinglulu
57*91f16700Schasinglulu    # Interactions between nodes
58*91f16700Schasinglulu    nvm -> bl31 [lhead=cluster_tfa label="DF1"]
59*91f16700Schasinglulu    uart -> bl31 [dir="both" lhead=cluster_tfa label="DF2"]
60*91f16700Schasinglulu    dbg -> bl2 [dir="both" lhead=cluster_tfa label="DF3"]
61*91f16700Schasinglulu    sec -> bl2 [dir="both" lhead=cluster_tfa label="DF4"]
62*91f16700Schasinglulu    nsec -> bl1 [dir="both" lhead=cluster_tfa, label="DF5"]
63*91f16700Schasinglulu    bl2 ->  tzc [dir="both" ltail=cluster_tfa lhead=cluster_ip label="DF6" minlen=1]
64*91f16700Schasinglulu}
65*91f16700Schasinglulu
66*91f16700Schasinglulu@enduml
67