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 SPMC Data Flow Diagram 9*91f16700Schasinglulu'/ 10*91f16700Schasinglulu 11*91f16700Schasinglulu@startuml 12*91f16700Schasingluludigraph tfa_dfd { 13*91f16700Schasinglulu 14*91f16700Schasinglulu # Allow arrows to end on cluster boundaries 15*91f16700Schasinglulu compound=true 16*91f16700Schasinglulu 17*91f16700Schasinglulu # Default settings for edges and nodes 18*91f16700Schasinglulu edge [minlen=2 color="#8c1b07"] 19*91f16700Schasinglulu node [fillcolor="#ffb866" style=filled shape=box fixedsize=true width=1.6 height=0.7] 20*91f16700Schasinglulu 21*91f16700Schasinglulu # Nodes outside of the trust boundary 22*91f16700Schasinglulu nsec [label="NS Client"] 23*91f16700Schasinglulu ddr [label="External memory (DDR)"] 24*91f16700Schasinglulu 25*91f16700Schasinglulu # Trust boundary cluster 26*91f16700Schasinglulu subgraph cluster_trusted { 27*91f16700Schasinglulu graph [style=dashed color="#f22430"] 28*91f16700Schasinglulu 29*91f16700Schasinglulu # HW IPs cluster 30*91f16700Schasinglulu subgraph cluster_ip { 31*91f16700Schasinglulu label ="Hardware IPs"; 32*91f16700Schasinglulu graph [style=filled color="#000000" fillcolor="#ffd29e"] 33*91f16700Schasinglulu 34*91f16700Schasinglulu rank="same" 35*91f16700Schasinglulu gic [label="GIC" width=1.2 height=0.5] 36*91f16700Schasinglulu smmu [label="SMMU" width=1.2 height=0.5] 37*91f16700Schasinglulu uart [label="UART" width=1.2 height=0.5] 38*91f16700Schasinglulu pe [label="PE" width=1.2 height=0.5] 39*91f16700Schasinglulu } 40*91f16700Schasinglulu 41*91f16700Schasinglulu # TF-A cluster 42*91f16700Schasinglulu subgraph cluster_tfa { 43*91f16700Schasinglulu label ="EL3 monitor"; 44*91f16700Schasinglulu graph [style=filled color="#000000" fillcolor="#faf9cd"] 45*91f16700Schasinglulu 46*91f16700Schasinglulu bl31 [label="BL31" fillcolor="#ddffb3"]; 47*91f16700Schasinglulu spmd [label="SPMD" fillcolor="#ddffb3" height=1] 48*91f16700Schasinglulu } 49*91f16700Schasinglulu 50*91f16700Schasinglulu # SPMC cluster 51*91f16700Schasinglulu subgraph cluster_spmc { 52*91f16700Schasinglulu label ="SPMC"; 53*91f16700Schasinglulu graph [style=filled color="#000000" fillcolor="#faf9cd"] 54*91f16700Schasinglulu 55*91f16700Schasinglulu spmc [label="SPMC" fillcolor="#ddffb3" height=1] 56*91f16700Schasinglulu } 57*91f16700Schasinglulu bl2 [label="BL2" width=1.2 height=0.5] 58*91f16700Schasinglulu } 59*91f16700Schasinglulu 60*91f16700Schasinglulu # Secure Partitions cluster 61*91f16700Schasinglulu subgraph cluster_sp { 62*91f16700Schasinglulu label ="Secure Partitions"; 63*91f16700Schasinglulu graph [style=filled color="#000000" fillcolor="#faf9cd"] 64*91f16700Schasinglulu 65*91f16700Schasinglulu sp1 [label="SP1" fillcolor="#ddffb3" height=1] 66*91f16700Schasinglulu sp2 [label="SP2" fillcolor="#ddffb3" height=1] 67*91f16700Schasinglulu spn [label="SP..." fillcolor="#ddffb3" height=1] 68*91f16700Schasinglulu } 69*91f16700Schasinglulu 70*91f16700Schasinglulu # Interactions between nodes 71*91f16700Schasinglulu sp1 -> spmc [dir="both" label="DF1"] 72*91f16700Schasinglulu spmc -> spmd [dir="both" label="DF2"] 73*91f16700Schasinglulu spmd -> nsec [dir="both" label="DF3"] 74*91f16700Schasinglulu sp1 -> sp2 [dir="both" label="DF4"] 75*91f16700Schasinglulu spmc -> smmu [lhead=cluster_spmc label="DF5"] 76*91f16700Schasinglulu bl2 -> spmc [lhead=cluster_spmc label="DF6"] 77*91f16700Schasinglulu bl2 -> spn [lhead=cluster_spmc label="DF6"] 78*91f16700Schasinglulu sp1 -> ddr [dir="both" label="DF7"] 79*91f16700Schasinglulu spmc -> ddr [dir="both" label="DF7"] 80*91f16700Schasinglulu} 81*91f16700Schasinglulu 82*91f16700Schasinglulu@enduml 83