1
2
3
4
5
6
7 #ifndef __ARM64_KVM_ARM_H__
8 #define __ARM64_KVM_ARM_H__
9
10 #include <asm/esr.h>
11 #include <asm/memory.h>
12 #include <asm/types.h>
13
14
15 #define HCR_FWB (UL(1) << 46)
16 #define HCR_API (UL(1) << 41)
17 #define HCR_APK (UL(1) << 40)
18 #define HCR_TEA (UL(1) << 37)
19 #define HCR_TERR (UL(1) << 36)
20 #define HCR_TLOR (UL(1) << 35)
21 #define HCR_E2H (UL(1) << 34)
22 #define HCR_ID (UL(1) << 33)
23 #define HCR_CD (UL(1) << 32)
24 #define HCR_RW_SHIFT 31
25 #define HCR_RW (UL(1) << HCR_RW_SHIFT)
26 #define HCR_TRVM (UL(1) << 30)
27 #define HCR_HCD (UL(1) << 29)
28 #define HCR_TDZ (UL(1) << 28)
29 #define HCR_TGE (UL(1) << 27)
30 #define HCR_TVM (UL(1) << 26)
31 #define HCR_TTLB (UL(1) << 25)
32 #define HCR_TPU (UL(1) << 24)
33 #define HCR_TPC (UL(1) << 23)
34 #define HCR_TSW (UL(1) << 22)
35 #define HCR_TAC (UL(1) << 21)
36 #define HCR_TIDCP (UL(1) << 20)
37 #define HCR_TSC (UL(1) << 19)
38 #define HCR_TID3 (UL(1) << 18)
39 #define HCR_TID2 (UL(1) << 17)
40 #define HCR_TID1 (UL(1) << 16)
41 #define HCR_TID0 (UL(1) << 15)
42 #define HCR_TWE (UL(1) << 14)
43 #define HCR_TWI (UL(1) << 13)
44 #define HCR_DC (UL(1) << 12)
45 #define HCR_BSU (3 << 10)
46 #define HCR_BSU_IS (UL(1) << 10)
47 #define HCR_FB (UL(1) << 9)
48 #define HCR_VSE (UL(1) << 8)
49 #define HCR_VI (UL(1) << 7)
50 #define HCR_VF (UL(1) << 6)
51 #define HCR_AMO (UL(1) << 5)
52 #define HCR_IMO (UL(1) << 4)
53 #define HCR_FMO (UL(1) << 3)
54 #define HCR_PTW (UL(1) << 2)
55 #define HCR_SWIO (UL(1) << 1)
56 #define HCR_VM (UL(1) << 0)
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 #define HCR_GUEST_FLAGS (HCR_TSC | HCR_TSW | HCR_TWE | HCR_TWI | HCR_VM | \
77 HCR_TVM | HCR_BSU_IS | HCR_FB | HCR_TAC | \
78 HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW | HCR_TLOR | \
79 HCR_FMO | HCR_IMO)
80 #define HCR_VIRT_EXCP_MASK (HCR_VSE | HCR_VI | HCR_VF)
81 #define HCR_HOST_NVHE_FLAGS (HCR_RW | HCR_API | HCR_APK)
82 #define HCR_HOST_VHE_FLAGS (HCR_RW | HCR_TGE | HCR_E2H)
83
84
85 #define TCR_EL2_RES1 ((1 << 31) | (1 << 23))
86 #define TCR_EL2_TBI (1 << 20)
87 #define TCR_EL2_PS_SHIFT 16
88 #define TCR_EL2_PS_MASK (7 << TCR_EL2_PS_SHIFT)
89 #define TCR_EL2_PS_40B (2 << TCR_EL2_PS_SHIFT)
90 #define TCR_EL2_TG0_MASK TCR_TG0_MASK
91 #define TCR_EL2_SH0_MASK TCR_SH0_MASK
92 #define TCR_EL2_ORGN0_MASK TCR_ORGN0_MASK
93 #define TCR_EL2_IRGN0_MASK TCR_IRGN0_MASK
94 #define TCR_EL2_T0SZ_MASK 0x3f
95 #define TCR_EL2_MASK (TCR_EL2_TG0_MASK | TCR_EL2_SH0_MASK | \
96 TCR_EL2_ORGN0_MASK | TCR_EL2_IRGN0_MASK | TCR_EL2_T0SZ_MASK)
97
98
99 #define VTCR_EL2_RES1 (1U << 31)
100 #define VTCR_EL2_HD (1 << 22)
101 #define VTCR_EL2_HA (1 << 21)
102 #define VTCR_EL2_PS_SHIFT TCR_EL2_PS_SHIFT
103 #define VTCR_EL2_PS_MASK TCR_EL2_PS_MASK
104 #define VTCR_EL2_TG0_MASK TCR_TG0_MASK
105 #define VTCR_EL2_TG0_4K TCR_TG0_4K
106 #define VTCR_EL2_TG0_16K TCR_TG0_16K
107 #define VTCR_EL2_TG0_64K TCR_TG0_64K
108 #define VTCR_EL2_SH0_MASK TCR_SH0_MASK
109 #define VTCR_EL2_SH0_INNER TCR_SH0_INNER
110 #define VTCR_EL2_ORGN0_MASK TCR_ORGN0_MASK
111 #define VTCR_EL2_ORGN0_WBWA TCR_ORGN0_WBWA
112 #define VTCR_EL2_IRGN0_MASK TCR_IRGN0_MASK
113 #define VTCR_EL2_IRGN0_WBWA TCR_IRGN0_WBWA
114 #define VTCR_EL2_SL0_SHIFT 6
115 #define VTCR_EL2_SL0_MASK (3 << VTCR_EL2_SL0_SHIFT)
116 #define VTCR_EL2_T0SZ_MASK 0x3f
117 #define VTCR_EL2_VS_SHIFT 19
118 #define VTCR_EL2_VS_8BIT (0 << VTCR_EL2_VS_SHIFT)
119 #define VTCR_EL2_VS_16BIT (1 << VTCR_EL2_VS_SHIFT)
120
121 #define VTCR_EL2_T0SZ(x) TCR_T0SZ(x)
122
123
124
125
126
127
128
129
130
131
132
133
134
135 #define VTCR_EL2_COMMON_BITS (VTCR_EL2_SH0_INNER | VTCR_EL2_ORGN0_WBWA | \
136 VTCR_EL2_IRGN0_WBWA | VTCR_EL2_RES1)
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167 #ifdef CONFIG_ARM64_64K_PAGES
168
169 #define VTCR_EL2_TGRAN VTCR_EL2_TG0_64K
170 #define VTCR_EL2_TGRAN_SL0_BASE 3UL
171
172 #elif defined(CONFIG_ARM64_16K_PAGES)
173
174 #define VTCR_EL2_TGRAN VTCR_EL2_TG0_16K
175 #define VTCR_EL2_TGRAN_SL0_BASE 3UL
176
177 #else
178
179 #define VTCR_EL2_TGRAN VTCR_EL2_TG0_4K
180 #define VTCR_EL2_TGRAN_SL0_BASE 2UL
181
182 #endif
183
184 #define VTCR_EL2_LVLS_TO_SL0(levels) \
185 ((VTCR_EL2_TGRAN_SL0_BASE - (4 - (levels))) << VTCR_EL2_SL0_SHIFT)
186 #define VTCR_EL2_SL0_TO_LVLS(sl0) \
187 ((sl0) + 4 - VTCR_EL2_TGRAN_SL0_BASE)
188 #define VTCR_EL2_LVLS(vtcr) \
189 VTCR_EL2_SL0_TO_LVLS(((vtcr) & VTCR_EL2_SL0_MASK) >> VTCR_EL2_SL0_SHIFT)
190
191 #define VTCR_EL2_FLAGS (VTCR_EL2_COMMON_BITS | VTCR_EL2_TGRAN)
192 #define VTCR_EL2_IPA(vtcr) (64 - ((vtcr) & VTCR_EL2_T0SZ_MASK))
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257 #define ARM64_VTTBR_X(ipa, levels) ((ipa) - ((levels) * (PAGE_SHIFT - 3)))
258
259 #define VTTBR_CNP_BIT (UL(1))
260 #define VTTBR_VMID_SHIFT (UL(48))
261 #define VTTBR_VMID_MASK(size) (_AT(u64, (1 << size) - 1) << VTTBR_VMID_SHIFT)
262
263
264 #define HSTR_EL2_T(x) (1 << x)
265
266
267 #define CPTR_EL2_TFP_SHIFT 10
268
269
270 #define CPTR_EL2_TCPAC (1 << 31)
271 #define CPTR_EL2_TTA (1 << 20)
272 #define CPTR_EL2_TFP (1 << CPTR_EL2_TFP_SHIFT)
273 #define CPTR_EL2_TZ (1 << 8)
274 #define CPTR_EL2_RES1 0x000032ff
275 #define CPTR_EL2_DEFAULT CPTR_EL2_RES1
276
277
278 #define MDCR_EL2_TPMS (1 << 14)
279 #define MDCR_EL2_E2PB_MASK (UL(0x3))
280 #define MDCR_EL2_E2PB_SHIFT (UL(12))
281 #define MDCR_EL2_TDRA (1 << 11)
282 #define MDCR_EL2_TDOSA (1 << 10)
283 #define MDCR_EL2_TDA (1 << 9)
284 #define MDCR_EL2_TDE (1 << 8)
285 #define MDCR_EL2_HPME (1 << 7)
286 #define MDCR_EL2_TPM (1 << 6)
287 #define MDCR_EL2_TPMCR (1 << 5)
288 #define MDCR_EL2_HPMN_MASK (0x1F)
289
290
291 #define FSC_FAULT ESR_ELx_FSC_FAULT
292 #define FSC_ACCESS ESR_ELx_FSC_ACCESS
293 #define FSC_PERM ESR_ELx_FSC_PERM
294 #define FSC_SEA ESR_ELx_FSC_EXTABT
295 #define FSC_SEA_TTW0 (0x14)
296 #define FSC_SEA_TTW1 (0x15)
297 #define FSC_SEA_TTW2 (0x16)
298 #define FSC_SEA_TTW3 (0x17)
299 #define FSC_SECC (0x18)
300 #define FSC_SECC_TTW0 (0x1c)
301 #define FSC_SECC_TTW1 (0x1d)
302 #define FSC_SECC_TTW2 (0x1e)
303 #define FSC_SECC_TTW3 (0x1f)
304
305
306 #define HPFAR_MASK (~UL(0xf))
307
308
309
310
311
312 #define PAR_TO_HPFAR(par) \
313 (((par) & GENMASK_ULL(PHYS_MASK_SHIFT - 1, 12)) >> 8)
314
315 #define ECN(x) { ESR_ELx_EC_##x, #x }
316
317 #define kvm_arm_exception_class \
318 ECN(UNKNOWN), ECN(WFx), ECN(CP15_32), ECN(CP15_64), ECN(CP14_MR), \
319 ECN(CP14_LS), ECN(FP_ASIMD), ECN(CP10_ID), ECN(PAC), ECN(CP14_64), \
320 ECN(SVC64), ECN(HVC64), ECN(SMC64), ECN(SYS64), ECN(SVE), \
321 ECN(IMP_DEF), ECN(IABT_LOW), ECN(IABT_CUR), \
322 ECN(PC_ALIGN), ECN(DABT_LOW), ECN(DABT_CUR), \
323 ECN(SP_ALIGN), ECN(FP_EXC32), ECN(FP_EXC64), ECN(SERROR), \
324 ECN(BREAKPT_LOW), ECN(BREAKPT_CUR), ECN(SOFTSTP_LOW), \
325 ECN(SOFTSTP_CUR), ECN(WATCHPT_LOW), ECN(WATCHPT_CUR), \
326 ECN(BKPT32), ECN(VECTOR32), ECN(BRK64)
327
328 #define CPACR_EL1_FPEN (3 << 20)
329 #define CPACR_EL1_TTA (1 << 28)
330 #define CPACR_EL1_DEFAULT (CPACR_EL1_FPEN | CPACR_EL1_ZEN_EL1EN)
331
332 #endif