msc { hscale = "1.5", wordwraparcs = on; a [label="Normal world"], b [label="Secure Monitor"], c [label="Trusted OS entry"], d [label="Trusted OS"]; ||| ; --- [ label = "Running in non-secure world (SCR_NS set)" ]; ... ; --- [ label = "IRQ and FIQ masked,\nFIQ received" ]; b=>b [ label = "Save non-secure context" ]; b=>b [ label = "Restore secure context" ]; b>>c [ label = "eret: FIQ" ]; --- [ label = "FIQ unmasked" ]; d=>d [ label = "process received FIQ" ]; --- [ label = "FIQ masked" ]; c=>b [ label = "smc: return" ]; b=>b [ label = "Save secure context" ]; b=>b [ label = "Restore non-secure context" ]; b>>a [ label = "eret: return to Normal world" ]; --- [ label = "IRQ and FIQ unmasked" ]; ... ; }