5
5
// Author(s):
6
6
// - Andre Richter <andre.o.richter@gmail.com>
7
7
// - Bradley Landherr <landhb@users.noreply.github.com>
8
+ // - Javier Alvarez <javier.alvarez@allthingsembedded.com>
8
9
9
10
//! Hypervisor Configuration Register - EL2
10
11
//!
@@ -18,6 +19,53 @@ use tock_registers::{
18
19
19
20
register_bitfields ! { u64 ,
20
21
pub HCR_EL2 [
22
+ ///
23
+ /// Controls the use of instructions related to Pointer Authentication:
24
+ ///
25
+ /// - In EL0, when HCR_EL2.TGE==0 or HCR_EL2.E2H==0, and the associated SCTLR_EL1.En<N><M>==1.
26
+ /// - In EL1, the associated SCTLR_EL1.En<N><M>==1.
27
+ ///
28
+ /// Traps are reported using EC syndrome value 0x09. The Pointer Authentication instructions
29
+ /// trapped are:
30
+ ///
31
+ /// AUTDA, AUTDB, AUTDZA, AUTDZB, AUTIA, AUTIA1716, AUTIASP, AUTIAZ, AUTIB, AUTIB1716,
32
+ /// AUTIBSP, AUTIBZ, AUTIZA, AUTIZB, PACGA, PACDA, PACDB, PACDZA, PACDZB, PACIA,
33
+ /// PACIA1716, PACIASP, PACIAZ, PACIB, PACIB1716, PACIBSP, PACIBZ, PACIZA, PACIZB.
34
+ /// RETAA, RETAB, BRAA, BRAB, BLRAA, BLRAB, BRAAZ, BRABZ, BLRAAZ, BLRABZ.
35
+ /// ERETAA, ERETAB, LDRAA, and LDRAB.
36
+ API OFFSET ( 41 ) NUMBITS ( 1 ) [
37
+ EnableTrapPointerAuthInstToEl2 = 0 ,
38
+ DisableTrapPointerAuthInstToEl2 = 1
39
+ ] ,
40
+ ///
41
+ /// Trap registers holding "key" values for Pointer Authentication. Traps accesses to the
42
+ /// following registers from EL1 to EL2, when EL2 is enabled in the current Security state,
43
+ /// reported using EC syndrome value 0x18:
44
+ ///
45
+ /// APIAKeyLo_EL1, APIAKeyHi_EL1, APIBKeyLo_EL1, APIBKeyHi_EL1, APDAKeyLo_EL1,
46
+ /// APDAKeyHi_EL1, APDBKeyLo_EL1, APDBKeyHi_EL1, APGAKeyLo_EL1, and APGAKeyHi_EL1.
47
+ ///
48
+ APK OFFSET ( 40 ) NUMBITS ( 1 ) [
49
+ EnableTrapPointerAuthKeyRegsToEl2 = 0 ,
50
+ DisableTrapPointerAuthKeyRegsToEl2 = 1 ,
51
+ ] ,
52
+
53
+ /// Route synchronous External abort exceptions to EL2.
54
+ /// if 0: This control does not cause exceptions to be routed from EL0 and EL1 to EL2.
55
+ /// if 1: Route synchronous External abort exceptions from EL0 and EL1 to EL2, when EL2 is
56
+ /// enabled in the current Security state, if not routed to EL3.
57
+ TEA OFFSET ( 37 ) NUMBITS ( 1 ) [
58
+ DisableTrapSyncExtAborts = 0 ,
59
+ EnableTrapSyncExtAborts = 1 ,
60
+ ] ,
61
+
62
+ /// EL2 Host. Enables a configuration where a Host Operating System is running in EL2, and
63
+ /// the Host Operating System's applications are running in EL0.
64
+ E2H OFFSET ( 34 ) NUMBITS ( 1 ) [
65
+ DisableOsAtEl2 = 0 ,
66
+ EnableOsAtEl2 = 1
67
+ ] ,
68
+
21
69
/// Execution state control for lower Exception levels:
22
70
///
23
71
/// 0 Lower levels are all AArch32.
@@ -39,6 +87,40 @@ register_bitfields! {u64,
39
87
EL1IsAarch64 = 1
40
88
] ,
41
89
90
+ /// Trap General Exceptions, from EL0.
91
+ ///
92
+ /// If enabled:
93
+ /// - When EL2 is not enabled in the current Security state, this control has no effect on
94
+ /// execution at EL0.
95
+ ///
96
+ /// - When EL2 is enabled in the current Security state, in all cases:
97
+ ///
98
+ /// - All exceptions that would be routed to EL1 are routed to EL2.
99
+ /// - If EL1 is using AArch64, the SCTLR_EL1.M field is treated as being 0 for all
100
+ /// purposes other than returning the result of a direct read of SCTLR_EL1.
101
+ /// - If EL1 is using AArch32, the SCTLR.M field is treated as being 0 for all
102
+ /// purposes other than returning the result of a direct read of SCTLR.
103
+ /// - All virtual interrupts are disabled.
104
+ /// - Any IMPLEMENTATION DEFINED mechanisms for signaling virtual interrupts are
105
+ /// disabled.
106
+ /// - An exception return to EL1 is treated as an illegal exception return.
107
+ /// - The MDCR_EL2.{TDRA, TDOSA, TDA, TDE} fields are treated as being 1 for all
108
+ /// purposes other than returning the result of a direct read of MDCR_EL2.
109
+ ///
110
+ /// - In addition, when EL2 is enabled in the current Security state, if:
111
+ ///
112
+ /// - HCR_EL2.E2H is 0, the Effective values of the HCR_EL2.{FMO, IMO, AMO} fields
113
+ /// are 1.
114
+ /// - HCR_EL2.E2H is 1, the Effective values of the HCR_EL2.{FMO, IMO, AMO} fields
115
+ /// are 0.
116
+ ///
117
+ /// - For further information on the behavior of this bit when E2H is 1, see 'Behavior of
118
+ /// HCR_EL2.E2H'.
119
+ TGE OFFSET ( 27 ) NUMBITS ( 1 ) [
120
+ DisableTrapGeneralExceptions = 0 ,
121
+ EnableTrapGeneralExceptions = 1 ,
122
+ ] ,
123
+
42
124
/// Default Cacheability.
43
125
///
44
126
/// 0 This control has no effect on the Non-secure EL1&0 translation regime.
@@ -69,6 +151,72 @@ register_bitfields! {u64,
69
151
/// field behaves as 0 for all purposes other than a direct read of the value of this field.
70
152
DC OFFSET ( 12 ) NUMBITS ( 1 ) [ ] ,
71
153
154
+ /// Physical SError interrupt routing.
155
+ /// - If bit is 1 when executing at any Exception level, and EL2 is enabled in the current
156
+ /// Security state:
157
+ /// - Physical SError interrupts are taken to EL2, unless they are routed to EL3.
158
+ /// - When the value of HCR_EL2.TGE is 0, then virtual SError interrupts are enabled.
159
+ AMO OFFSET ( 5 ) NUMBITS ( 1 ) [ ] ,
160
+
161
+ /// Physical IRQ Routing.
162
+ ///
163
+ /// If this bit is 0:
164
+ /// - When executing at Exception levels below EL2, and EL2 is enabled in the current
165
+ /// Security state:
166
+ /// - When the value of HCR_EL2.TGE is 0, Physical IRQ interrupts are not taken to EL2.
167
+ /// - When the value of HCR_EL2.TGE is 1, Physical IRQ interrupts are taken to EL2
168
+ /// unless they are routed to EL3.
169
+ /// - Virtual IRQ interrupts are disabled.
170
+ ///
171
+ /// If this bit is 1:
172
+ /// - When executing at any Exception level, and EL2 is enabled in the current Security
173
+ /// state:
174
+ /// - Physical IRQ interrupts are taken to EL2, unless they are routed to EL3.
175
+ /// - When the value of HCR_EL2.TGE is 0, then Virtual IRQ interrupts are enabled.
176
+ ///
177
+ /// If EL2 is enabled in the current Security state, and the value of HCR_EL2.TGE is 1:
178
+ /// - Regardless of the value of the IMO bit, physical IRQ Interrupts target EL2 unless
179
+ /// they are routed to EL3.
180
+ /// - When FEAT_VHE is not implemented, or if HCR_EL2.E2H is 0, this field behaves as 1
181
+ /// for all purposes other than a direct read of the value of this bit.
182
+ /// - When FEAT_VHE is implemented and HCR_EL2.E2H is 1, this field behaves as 0 for all
183
+ /// purposes other than a direct read of the value of this bit.
184
+ ///
185
+ /// For more information, see 'Asynchronous exception routing'.
186
+ IMO OFFSET ( 4 ) NUMBITS ( 1 ) [
187
+ DisableVirtualIRQ = 0 ,
188
+ EnableVirtualIRQ = 1 ,
189
+ ] ,
190
+
191
+ /// Physical FIQ Routing.
192
+ /// If this bit is 0:
193
+ /// - When executing at Exception levels below EL2, and EL2 is enabled in the current
194
+ /// Security state:
195
+ /// - When the value of HCR_EL2.TGE is 0, Physical FIQ interrupts are not taken to EL2.
196
+ /// - When the value of HCR_EL2.TGE is 1, Physical FIQ interrupts are taken to EL2
197
+ /// unless they are routed to EL3.
198
+ /// - Virtual FIQ interrupts are disabled.
199
+ ///
200
+ /// If this bit is 1:
201
+ /// - When executing at any Exception level, and EL2 is enabled in the current Security
202
+ /// state:
203
+ /// - Physical FIQ interrupts are taken to EL2, unless they are routed to EL3.
204
+ /// - When HCR_EL2.TGE is 0, then Virtual FIQ interrupts are enabled.
205
+ ///
206
+ /// If EL2 is enabled in the current Security state and the value of HCR_EL2.TGE is 1:
207
+ /// - Regardless of the value of the FMO bit, physical FIQ Interrupts target EL2 unless
208
+ /// they are routed to EL3.
209
+ /// - When FEAT_VHE is not implemented, or if HCR_EL2.E2H is 0, this field behaves as 1
210
+ /// for all purposes other than a direct read of the value of this bit.
211
+ /// - When FEAT_VHE is implemented and HCR_EL2.E2H is 1, this field behaves as 0 for all
212
+ /// purposes other than a direct read of the value of this bit.
213
+ ///
214
+ /// For more information, see 'Asynchronous exception routing'.
215
+ FMO OFFSET ( 3 ) NUMBITS ( 1 ) [
216
+ DisableVirtualFIQ = 0 ,
217
+ EnableVirtualFIQ = 1 ,
218
+ ] ,
219
+
72
220
/// Set/Way Invalidation Override. Causes Non-secure EL1 execution of the data cache
73
221
/// invalidate by set/way instructions to perform a data cache clean and invalidate by
74
222
/// set/way:
0 commit comments