summaryrefslogtreecommitdiff
path: root/documentation/images/interrupt_handling/irq_fiq.msc
blob: 509836033897ccb29431f474c4637d61809d7a88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
msc {
	hscale = "1.5", wordwraparcs = on;

	a [label="Normal world"], b [label="Secure Monitor"],
	c [label="Trusted OS entry"], d [label="Trusted OS"];


	--- [ label = "IRQ and FIQ unmasked" ];
	d=>d [ label = "process" ];
	--- [ label = "IRQ and FIQ masked,\nIRQ received" ];
	d=>d [ label = "suspend thread" ];
	d=>c [ label = "forward IRQ" ];
	c=>b [ label = "smc: forward IRQ" ];
	b=>b [ label = "Save secure context" ];
	b=>b [ label = "Restore non-secure context" ];
	--- [ label = "IRQ and FIQ unmasked" ];
	b>>a [ label = "eret: IRQ forwarded" ];
	--- [ label = "FIQ unmasked, IRQ received" ];
	a=>a [ label = "process IRQ" ];
	--- [ 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 = "FIQ unmasked,\nIRQ still being processed" ];
	a=>a [ label = "process IRQ" ];
	a=>b [ label = "smc: return from IRQ" ];
	--- [ label = "IRQ and FIQ masked" ];
	b=>b [ label = "Save non-secure context" ];
	b=>b [ label = "Restore secure context" ];
	b>>c [ label = "eret: return from IRQ" ];
	c=>c [ label = "find thread" ];
	c>>d [ label = "resume execution"];
	--- [ label = "IRQ and FIQ unmasked" ];
	d=>d [ label = "process" ];
}