16
16
17
17
enum trap_behaviour {
18
18
BEHAVE_HANDLE_LOCALLY = 0 ,
19
+
19
20
BEHAVE_FORWARD_READ = BIT (0 ),
20
21
BEHAVE_FORWARD_WRITE = BIT (1 ),
21
- BEHAVE_FORWARD_ANY = BEHAVE_FORWARD_READ | BEHAVE_FORWARD_WRITE ,
22
+ BEHAVE_FORWARD_RW = BEHAVE_FORWARD_READ | BEHAVE_FORWARD_WRITE ,
22
23
};
23
24
24
25
struct trap_bits {
@@ -138,7 +139,7 @@ static const struct trap_bits coarse_trap_bits[] = {
138
139
.index = HCR_EL2 ,
139
140
.value = HCR_TID2 ,
140
141
.mask = HCR_TID2 ,
141
- .behaviour = BEHAVE_FORWARD_ANY ,
142
+ .behaviour = BEHAVE_FORWARD_RW ,
142
143
},
143
144
[CGT_HCR_TID3 ] = {
144
145
.index = HCR_EL2 ,
@@ -162,37 +163,37 @@ static const struct trap_bits coarse_trap_bits[] = {
162
163
.index = HCR_EL2 ,
163
164
.value = HCR_TIDCP ,
164
165
.mask = HCR_TIDCP ,
165
- .behaviour = BEHAVE_FORWARD_ANY ,
166
+ .behaviour = BEHAVE_FORWARD_RW ,
166
167
},
167
168
[CGT_HCR_TACR ] = {
168
169
.index = HCR_EL2 ,
169
170
.value = HCR_TACR ,
170
171
.mask = HCR_TACR ,
171
- .behaviour = BEHAVE_FORWARD_ANY ,
172
+ .behaviour = BEHAVE_FORWARD_RW ,
172
173
},
173
174
[CGT_HCR_TSW ] = {
174
175
.index = HCR_EL2 ,
175
176
.value = HCR_TSW ,
176
177
.mask = HCR_TSW ,
177
- .behaviour = BEHAVE_FORWARD_ANY ,
178
+ .behaviour = BEHAVE_FORWARD_RW ,
178
179
},
179
180
[CGT_HCR_TPC ] = { /* Also called TCPC when FEAT_DPB is implemented */
180
181
.index = HCR_EL2 ,
181
182
.value = HCR_TPC ,
182
183
.mask = HCR_TPC ,
183
- .behaviour = BEHAVE_FORWARD_ANY ,
184
+ .behaviour = BEHAVE_FORWARD_RW ,
184
185
},
185
186
[CGT_HCR_TPU ] = {
186
187
.index = HCR_EL2 ,
187
188
.value = HCR_TPU ,
188
189
.mask = HCR_TPU ,
189
- .behaviour = BEHAVE_FORWARD_ANY ,
190
+ .behaviour = BEHAVE_FORWARD_RW ,
190
191
},
191
192
[CGT_HCR_TTLB ] = {
192
193
.index = HCR_EL2 ,
193
194
.value = HCR_TTLB ,
194
195
.mask = HCR_TTLB ,
195
- .behaviour = BEHAVE_FORWARD_ANY ,
196
+ .behaviour = BEHAVE_FORWARD_RW ,
196
197
},
197
198
[CGT_HCR_TVM ] = {
198
199
.index = HCR_EL2 ,
@@ -204,7 +205,7 @@ static const struct trap_bits coarse_trap_bits[] = {
204
205
.index = HCR_EL2 ,
205
206
.value = HCR_TDZ ,
206
207
.mask = HCR_TDZ ,
207
- .behaviour = BEHAVE_FORWARD_ANY ,
208
+ .behaviour = BEHAVE_FORWARD_RW ,
208
209
},
209
210
[CGT_HCR_TRVM ] = {
210
211
.index = HCR_EL2 ,
@@ -216,205 +217,205 @@ static const struct trap_bits coarse_trap_bits[] = {
216
217
.index = HCR_EL2 ,
217
218
.value = HCR_TLOR ,
218
219
.mask = HCR_TLOR ,
219
- .behaviour = BEHAVE_FORWARD_ANY ,
220
+ .behaviour = BEHAVE_FORWARD_RW ,
220
221
},
221
222
[CGT_HCR_TERR ] = {
222
223
.index = HCR_EL2 ,
223
224
.value = HCR_TERR ,
224
225
.mask = HCR_TERR ,
225
- .behaviour = BEHAVE_FORWARD_ANY ,
226
+ .behaviour = BEHAVE_FORWARD_RW ,
226
227
},
227
228
[CGT_HCR_APK ] = {
228
229
.index = HCR_EL2 ,
229
230
.value = 0 ,
230
231
.mask = HCR_APK ,
231
- .behaviour = BEHAVE_FORWARD_ANY ,
232
+ .behaviour = BEHAVE_FORWARD_RW ,
232
233
},
233
234
[CGT_HCR_NV ] = {
234
235
.index = HCR_EL2 ,
235
236
.value = HCR_NV ,
236
237
.mask = HCR_NV ,
237
- .behaviour = BEHAVE_FORWARD_ANY ,
238
+ .behaviour = BEHAVE_FORWARD_RW ,
238
239
},
239
240
[CGT_HCR_NV_nNV2 ] = {
240
241
.index = HCR_EL2 ,
241
242
.value = HCR_NV ,
242
243
.mask = HCR_NV | HCR_NV2 ,
243
- .behaviour = BEHAVE_FORWARD_ANY ,
244
+ .behaviour = BEHAVE_FORWARD_RW ,
244
245
},
245
246
[CGT_HCR_NV1_nNV2 ] = {
246
247
.index = HCR_EL2 ,
247
248
.value = HCR_NV | HCR_NV1 ,
248
249
.mask = HCR_NV | HCR_NV1 | HCR_NV2 ,
249
- .behaviour = BEHAVE_FORWARD_ANY ,
250
+ .behaviour = BEHAVE_FORWARD_RW ,
250
251
},
251
252
[CGT_HCR_AT ] = {
252
253
.index = HCR_EL2 ,
253
254
.value = HCR_AT ,
254
255
.mask = HCR_AT ,
255
- .behaviour = BEHAVE_FORWARD_ANY ,
256
+ .behaviour = BEHAVE_FORWARD_RW ,
256
257
},
257
258
[CGT_HCR_nFIEN ] = {
258
259
.index = HCR_EL2 ,
259
260
.value = 0 ,
260
261
.mask = HCR_FIEN ,
261
- .behaviour = BEHAVE_FORWARD_ANY ,
262
+ .behaviour = BEHAVE_FORWARD_RW ,
262
263
},
263
264
[CGT_HCR_TID4 ] = {
264
265
.index = HCR_EL2 ,
265
266
.value = HCR_TID4 ,
266
267
.mask = HCR_TID4 ,
267
- .behaviour = BEHAVE_FORWARD_ANY ,
268
+ .behaviour = BEHAVE_FORWARD_RW ,
268
269
},
269
270
[CGT_HCR_TICAB ] = {
270
271
.index = HCR_EL2 ,
271
272
.value = HCR_TICAB ,
272
273
.mask = HCR_TICAB ,
273
- .behaviour = BEHAVE_FORWARD_ANY ,
274
+ .behaviour = BEHAVE_FORWARD_RW ,
274
275
},
275
276
[CGT_HCR_TOCU ] = {
276
277
.index = HCR_EL2 ,
277
278
.value = HCR_TOCU ,
278
279
.mask = HCR_TOCU ,
279
- .behaviour = BEHAVE_FORWARD_ANY ,
280
+ .behaviour = BEHAVE_FORWARD_RW ,
280
281
},
281
282
[CGT_HCR_ENSCXT ] = {
282
283
.index = HCR_EL2 ,
283
284
.value = 0 ,
284
285
.mask = HCR_ENSCXT ,
285
- .behaviour = BEHAVE_FORWARD_ANY ,
286
+ .behaviour = BEHAVE_FORWARD_RW ,
286
287
},
287
288
[CGT_HCR_TTLBIS ] = {
288
289
.index = HCR_EL2 ,
289
290
.value = HCR_TTLBIS ,
290
291
.mask = HCR_TTLBIS ,
291
- .behaviour = BEHAVE_FORWARD_ANY ,
292
+ .behaviour = BEHAVE_FORWARD_RW ,
292
293
},
293
294
[CGT_HCR_TTLBOS ] = {
294
295
.index = HCR_EL2 ,
295
296
.value = HCR_TTLBOS ,
296
297
.mask = HCR_TTLBOS ,
297
- .behaviour = BEHAVE_FORWARD_ANY ,
298
+ .behaviour = BEHAVE_FORWARD_RW ,
298
299
},
299
300
[CGT_MDCR_TPMCR ] = {
300
301
.index = MDCR_EL2 ,
301
302
.value = MDCR_EL2_TPMCR ,
302
303
.mask = MDCR_EL2_TPMCR ,
303
- .behaviour = BEHAVE_FORWARD_ANY ,
304
+ .behaviour = BEHAVE_FORWARD_RW ,
304
305
},
305
306
[CGT_MDCR_TPM ] = {
306
307
.index = MDCR_EL2 ,
307
308
.value = MDCR_EL2_TPM ,
308
309
.mask = MDCR_EL2_TPM ,
309
- .behaviour = BEHAVE_FORWARD_ANY ,
310
+ .behaviour = BEHAVE_FORWARD_RW ,
310
311
},
311
312
[CGT_MDCR_TDE ] = {
312
313
.index = MDCR_EL2 ,
313
314
.value = MDCR_EL2_TDE ,
314
315
.mask = MDCR_EL2_TDE ,
315
- .behaviour = BEHAVE_FORWARD_ANY ,
316
+ .behaviour = BEHAVE_FORWARD_RW ,
316
317
},
317
318
[CGT_MDCR_TDA ] = {
318
319
.index = MDCR_EL2 ,
319
320
.value = MDCR_EL2_TDA ,
320
321
.mask = MDCR_EL2_TDA ,
321
- .behaviour = BEHAVE_FORWARD_ANY ,
322
+ .behaviour = BEHAVE_FORWARD_RW ,
322
323
},
323
324
[CGT_MDCR_TDOSA ] = {
324
325
.index = MDCR_EL2 ,
325
326
.value = MDCR_EL2_TDOSA ,
326
327
.mask = MDCR_EL2_TDOSA ,
327
- .behaviour = BEHAVE_FORWARD_ANY ,
328
+ .behaviour = BEHAVE_FORWARD_RW ,
328
329
},
329
330
[CGT_MDCR_TDRA ] = {
330
331
.index = MDCR_EL2 ,
331
332
.value = MDCR_EL2_TDRA ,
332
333
.mask = MDCR_EL2_TDRA ,
333
- .behaviour = BEHAVE_FORWARD_ANY ,
334
+ .behaviour = BEHAVE_FORWARD_RW ,
334
335
},
335
336
[CGT_MDCR_E2PB ] = {
336
337
.index = MDCR_EL2 ,
337
338
.value = 0 ,
338
339
.mask = BIT (MDCR_EL2_E2PB_SHIFT ),
339
- .behaviour = BEHAVE_FORWARD_ANY ,
340
+ .behaviour = BEHAVE_FORWARD_RW ,
340
341
},
341
342
[CGT_MDCR_TPMS ] = {
342
343
.index = MDCR_EL2 ,
343
344
.value = MDCR_EL2_TPMS ,
344
345
.mask = MDCR_EL2_TPMS ,
345
- .behaviour = BEHAVE_FORWARD_ANY ,
346
+ .behaviour = BEHAVE_FORWARD_RW ,
346
347
},
347
348
[CGT_MDCR_TTRF ] = {
348
349
.index = MDCR_EL2 ,
349
350
.value = MDCR_EL2_TTRF ,
350
351
.mask = MDCR_EL2_TTRF ,
351
- .behaviour = BEHAVE_FORWARD_ANY ,
352
+ .behaviour = BEHAVE_FORWARD_RW ,
352
353
},
353
354
[CGT_MDCR_E2TB ] = {
354
355
.index = MDCR_EL2 ,
355
356
.value = 0 ,
356
357
.mask = BIT (MDCR_EL2_E2TB_SHIFT ),
357
- .behaviour = BEHAVE_FORWARD_ANY ,
358
+ .behaviour = BEHAVE_FORWARD_RW ,
358
359
},
359
360
[CGT_MDCR_TDCC ] = {
360
361
.index = MDCR_EL2 ,
361
362
.value = MDCR_EL2_TDCC ,
362
363
.mask = MDCR_EL2_TDCC ,
363
- .behaviour = BEHAVE_FORWARD_ANY ,
364
+ .behaviour = BEHAVE_FORWARD_RW ,
364
365
},
365
366
[CGT_CPACR_E0POE ] = {
366
367
.index = CPTR_EL2 ,
367
368
.value = CPACR_ELx_E0POE ,
368
369
.mask = CPACR_ELx_E0POE ,
369
- .behaviour = BEHAVE_FORWARD_ANY ,
370
+ .behaviour = BEHAVE_FORWARD_RW ,
370
371
},
371
372
[CGT_CPTR_TAM ] = {
372
373
.index = CPTR_EL2 ,
373
374
.value = CPTR_EL2_TAM ,
374
375
.mask = CPTR_EL2_TAM ,
375
- .behaviour = BEHAVE_FORWARD_ANY ,
376
+ .behaviour = BEHAVE_FORWARD_RW ,
376
377
},
377
378
[CGT_CPTR_TCPAC ] = {
378
379
.index = CPTR_EL2 ,
379
380
.value = CPTR_EL2_TCPAC ,
380
381
.mask = CPTR_EL2_TCPAC ,
381
- .behaviour = BEHAVE_FORWARD_ANY ,
382
+ .behaviour = BEHAVE_FORWARD_RW ,
382
383
},
383
384
[CGT_HCRX_EnFPM ] = {
384
385
.index = HCRX_EL2 ,
385
386
.value = 0 ,
386
387
.mask = HCRX_EL2_EnFPM ,
387
- .behaviour = BEHAVE_FORWARD_ANY ,
388
+ .behaviour = BEHAVE_FORWARD_RW ,
388
389
},
389
390
[CGT_HCRX_TCR2En ] = {
390
391
.index = HCRX_EL2 ,
391
392
.value = 0 ,
392
393
.mask = HCRX_EL2_TCR2En ,
393
- .behaviour = BEHAVE_FORWARD_ANY ,
394
+ .behaviour = BEHAVE_FORWARD_RW ,
394
395
},
395
396
[CGT_ICH_HCR_TC ] = {
396
397
.index = ICH_HCR_EL2 ,
397
398
.value = ICH_HCR_TC ,
398
399
.mask = ICH_HCR_TC ,
399
- .behaviour = BEHAVE_FORWARD_ANY ,
400
+ .behaviour = BEHAVE_FORWARD_RW ,
400
401
},
401
402
[CGT_ICH_HCR_TALL0 ] = {
402
403
.index = ICH_HCR_EL2 ,
403
404
.value = ICH_HCR_TALL0 ,
404
405
.mask = ICH_HCR_TALL0 ,
405
- .behaviour = BEHAVE_FORWARD_ANY ,
406
+ .behaviour = BEHAVE_FORWARD_RW ,
406
407
},
407
408
[CGT_ICH_HCR_TALL1 ] = {
408
409
.index = ICH_HCR_EL2 ,
409
410
.value = ICH_HCR_TALL1 ,
410
411
.mask = ICH_HCR_TALL1 ,
411
- .behaviour = BEHAVE_FORWARD_ANY ,
412
+ .behaviour = BEHAVE_FORWARD_RW ,
412
413
},
413
414
[CGT_ICH_HCR_TDIR ] = {
414
415
.index = ICH_HCR_EL2 ,
415
416
.value = ICH_HCR_TDIR ,
416
417
.mask = ICH_HCR_TDIR ,
417
- .behaviour = BEHAVE_FORWARD_ANY ,
418
+ .behaviour = BEHAVE_FORWARD_RW ,
418
419
},
419
420
};
420
421
@@ -474,15 +475,15 @@ static enum trap_behaviour check_cnthctl_el1pcten(struct kvm_vcpu *vcpu)
474
475
if (get_sanitized_cnthctl (vcpu ) & (CNTHCTL_EL1PCTEN << 10 ))
475
476
return BEHAVE_HANDLE_LOCALLY ;
476
477
477
- return BEHAVE_FORWARD_ANY ;
478
+ return BEHAVE_FORWARD_RW ;
478
479
}
479
480
480
481
static enum trap_behaviour check_cnthctl_el1pten (struct kvm_vcpu * vcpu )
481
482
{
482
483
if (get_sanitized_cnthctl (vcpu ) & (CNTHCTL_EL1PCEN << 10 ))
483
484
return BEHAVE_HANDLE_LOCALLY ;
484
485
485
- return BEHAVE_FORWARD_ANY ;
486
+ return BEHAVE_FORWARD_RW ;
486
487
}
487
488
488
489
static enum trap_behaviour check_cptr_tta (struct kvm_vcpu * vcpu )
@@ -493,7 +494,7 @@ static enum trap_behaviour check_cptr_tta(struct kvm_vcpu *vcpu)
493
494
val = translate_cptr_el2_to_cpacr_el1 (val );
494
495
495
496
if (val & CPACR_ELx_TTA )
496
- return BEHAVE_FORWARD_ANY ;
497
+ return BEHAVE_FORWARD_RW ;
497
498
498
499
return BEHAVE_HANDLE_LOCALLY ;
499
500
}
0 commit comments