@@ -47,6 +47,13 @@ static u64 sys_reg_to_index(const struct sys_reg_desc *reg);
47
47
static int set_id_reg (struct kvm_vcpu * vcpu , const struct sys_reg_desc * rd ,
48
48
u64 val );
49
49
50
+ static bool undef_access (struct kvm_vcpu * vcpu , struct sys_reg_params * p ,
51
+ const struct sys_reg_desc * r )
52
+ {
53
+ kvm_inject_undefined (vcpu );
54
+ return false;
55
+ }
56
+
50
57
static bool bad_trap (struct kvm_vcpu * vcpu ,
51
58
struct sys_reg_params * params ,
52
59
const struct sys_reg_desc * r ,
@@ -484,6 +491,9 @@ static bool access_gic_sre(struct kvm_vcpu *vcpu,
484
491
struct sys_reg_params * p ,
485
492
const struct sys_reg_desc * r )
486
493
{
494
+ if (!kvm_has_gicv3 (vcpu -> kvm ))
495
+ return undef_access (vcpu , p , r );
496
+
487
497
if (p -> is_write )
488
498
return ignore_write (vcpu , p );
489
499
@@ -1344,14 +1354,6 @@ static int set_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r,
1344
1354
.reset = reset_pmevtyper, \
1345
1355
.access = access_pmu_evtyper, .reg = (PMEVTYPER0_EL0 + n), }
1346
1356
1347
- static bool undef_access (struct kvm_vcpu * vcpu , struct sys_reg_params * p ,
1348
- const struct sys_reg_desc * r )
1349
- {
1350
- kvm_inject_undefined (vcpu );
1351
-
1352
- return false;
1353
- }
1354
-
1355
1357
/* Macro to expand the AMU counter and type registers*/
1356
1358
#define AMU_AMEVCNTR0_EL0 (n ) { SYS_DESC(SYS_AMEVCNTR0_EL0(n)), undef_access }
1357
1359
#define AMU_AMEVTYPER0_EL0 (n ) { SYS_DESC(SYS_AMEVTYPER0_EL0(n)), undef_access }
@@ -2454,6 +2456,8 @@ static const struct sys_reg_desc sys_reg_descs[] = {
2454
2456
{ SYS_DESC (SYS_SPSR_EL1 ), access_spsr },
2455
2457
{ SYS_DESC (SYS_ELR_EL1 ), access_elr },
2456
2458
2459
+ { SYS_DESC (SYS_ICC_PMR_EL1 ), undef_access },
2460
+
2457
2461
{ SYS_DESC (SYS_AFSR0_EL1 ), access_vm_reg , reset_unknown , AFSR0_EL1 },
2458
2462
{ SYS_DESC (SYS_AFSR1_EL1 ), access_vm_reg , reset_unknown , AFSR1_EL1 },
2459
2463
{ SYS_DESC (SYS_ESR_EL1 ), access_vm_reg , reset_unknown , ESR_EL1 },
@@ -2508,18 +2512,31 @@ static const struct sys_reg_desc sys_reg_descs[] = {
2508
2512
{ SYS_DESC (SYS_VBAR_EL1 ), access_rw , reset_val , VBAR_EL1 , 0 },
2509
2513
{ SYS_DESC (SYS_DISR_EL1 ), NULL , reset_val , DISR_EL1 , 0 },
2510
2514
2511
- { SYS_DESC (SYS_ICC_IAR0_EL1 ), write_to_read_only },
2512
- { SYS_DESC (SYS_ICC_EOIR0_EL1 ), read_from_write_only },
2513
- { SYS_DESC (SYS_ICC_HPPIR0_EL1 ), write_to_read_only },
2514
- { SYS_DESC (SYS_ICC_DIR_EL1 ), read_from_write_only },
2515
- { SYS_DESC (SYS_ICC_RPR_EL1 ), write_to_read_only },
2515
+ { SYS_DESC (SYS_ICC_IAR0_EL1 ), undef_access },
2516
+ { SYS_DESC (SYS_ICC_EOIR0_EL1 ), undef_access },
2517
+ { SYS_DESC (SYS_ICC_HPPIR0_EL1 ), undef_access },
2518
+ { SYS_DESC (SYS_ICC_BPR0_EL1 ), undef_access },
2519
+ { SYS_DESC (SYS_ICC_AP0R0_EL1 ), undef_access },
2520
+ { SYS_DESC (SYS_ICC_AP0R1_EL1 ), undef_access },
2521
+ { SYS_DESC (SYS_ICC_AP0R2_EL1 ), undef_access },
2522
+ { SYS_DESC (SYS_ICC_AP0R3_EL1 ), undef_access },
2523
+ { SYS_DESC (SYS_ICC_AP1R0_EL1 ), undef_access },
2524
+ { SYS_DESC (SYS_ICC_AP1R1_EL1 ), undef_access },
2525
+ { SYS_DESC (SYS_ICC_AP1R2_EL1 ), undef_access },
2526
+ { SYS_DESC (SYS_ICC_AP1R3_EL1 ), undef_access },
2527
+ { SYS_DESC (SYS_ICC_DIR_EL1 ), undef_access },
2528
+ { SYS_DESC (SYS_ICC_RPR_EL1 ), undef_access },
2516
2529
{ SYS_DESC (SYS_ICC_SGI1R_EL1 ), access_gic_sgi },
2517
2530
{ SYS_DESC (SYS_ICC_ASGI1R_EL1 ), access_gic_sgi },
2518
2531
{ SYS_DESC (SYS_ICC_SGI0R_EL1 ), access_gic_sgi },
2519
- { SYS_DESC (SYS_ICC_IAR1_EL1 ), write_to_read_only },
2520
- { SYS_DESC (SYS_ICC_EOIR1_EL1 ), read_from_write_only },
2521
- { SYS_DESC (SYS_ICC_HPPIR1_EL1 ), write_to_read_only },
2532
+ { SYS_DESC (SYS_ICC_IAR1_EL1 ), undef_access },
2533
+ { SYS_DESC (SYS_ICC_EOIR1_EL1 ), undef_access },
2534
+ { SYS_DESC (SYS_ICC_HPPIR1_EL1 ), undef_access },
2535
+ { SYS_DESC (SYS_ICC_BPR1_EL1 ), undef_access },
2536
+ { SYS_DESC (SYS_ICC_CTLR_EL1 ), undef_access },
2522
2537
{ SYS_DESC (SYS_ICC_SRE_EL1 ), access_gic_sre },
2538
+ { SYS_DESC (SYS_ICC_IGRPEN0_EL1 ), undef_access },
2539
+ { SYS_DESC (SYS_ICC_IGRPEN1_EL1 ), undef_access },
2523
2540
2524
2541
{ SYS_DESC (SYS_CONTEXTIDR_EL1 ), access_vm_reg , reset_val , CONTEXTIDR_EL1 , 0 },
2525
2542
{ SYS_DESC (SYS_TPIDR_EL1 ), NULL , reset_unknown , TPIDR_EL1 },
@@ -3394,6 +3411,7 @@ static const struct sys_reg_desc cp15_regs[] = {
3394
3411
/* TTBCR2 */
3395
3412
{ AA32 (HI ), Op1 ( 0 ), CRn ( 2 ), CRm ( 0 ), Op2 ( 3 ), access_vm_reg , NULL , TCR_EL1 },
3396
3413
{ Op1 ( 0 ), CRn ( 3 ), CRm ( 0 ), Op2 ( 0 ), access_vm_reg , NULL , DACR32_EL2 },
3414
+ { CP15_SYS_DESC (SYS_ICC_PMR_EL1 ), undef_access },
3397
3415
/* DFSR */
3398
3416
{ Op1 ( 0 ), CRn ( 5 ), CRm ( 0 ), Op2 ( 0 ), access_vm_reg , NULL , ESR_EL1 },
3399
3417
{ Op1 ( 0 ), CRn ( 5 ), CRm ( 0 ), Op2 ( 1 ), access_vm_reg , NULL , IFSR32_EL2 },
@@ -3443,8 +3461,28 @@ static const struct sys_reg_desc cp15_regs[] = {
3443
3461
/* AMAIR1 */
3444
3462
{ AA32 (HI ), Op1 ( 0 ), CRn (10 ), CRm ( 3 ), Op2 ( 1 ), access_vm_reg , NULL , AMAIR_EL1 },
3445
3463
3446
- /* ICC_SRE */
3447
- { Op1 ( 0 ), CRn (12 ), CRm (12 ), Op2 ( 5 ), access_gic_sre },
3464
+ { CP15_SYS_DESC (SYS_ICC_IAR0_EL1 ), undef_access },
3465
+ { CP15_SYS_DESC (SYS_ICC_EOIR0_EL1 ), undef_access },
3466
+ { CP15_SYS_DESC (SYS_ICC_HPPIR0_EL1 ), undef_access },
3467
+ { CP15_SYS_DESC (SYS_ICC_BPR0_EL1 ), undef_access },
3468
+ { CP15_SYS_DESC (SYS_ICC_AP0R0_EL1 ), undef_access },
3469
+ { CP15_SYS_DESC (SYS_ICC_AP0R1_EL1 ), undef_access },
3470
+ { CP15_SYS_DESC (SYS_ICC_AP0R2_EL1 ), undef_access },
3471
+ { CP15_SYS_DESC (SYS_ICC_AP0R3_EL1 ), undef_access },
3472
+ { CP15_SYS_DESC (SYS_ICC_AP1R0_EL1 ), undef_access },
3473
+ { CP15_SYS_DESC (SYS_ICC_AP1R1_EL1 ), undef_access },
3474
+ { CP15_SYS_DESC (SYS_ICC_AP1R2_EL1 ), undef_access },
3475
+ { CP15_SYS_DESC (SYS_ICC_AP1R3_EL1 ), undef_access },
3476
+ { CP15_SYS_DESC (SYS_ICC_DIR_EL1 ), undef_access },
3477
+ { CP15_SYS_DESC (SYS_ICC_RPR_EL1 ), undef_access },
3478
+ { CP15_SYS_DESC (SYS_ICC_IAR1_EL1 ), undef_access },
3479
+ { CP15_SYS_DESC (SYS_ICC_EOIR1_EL1 ), undef_access },
3480
+ { CP15_SYS_DESC (SYS_ICC_HPPIR1_EL1 ), undef_access },
3481
+ { CP15_SYS_DESC (SYS_ICC_BPR1_EL1 ), undef_access },
3482
+ { CP15_SYS_DESC (SYS_ICC_CTLR_EL1 ), undef_access },
3483
+ { CP15_SYS_DESC (SYS_ICC_SRE_EL1 ), access_gic_sre },
3484
+ { CP15_SYS_DESC (SYS_ICC_IGRPEN0_EL1 ), undef_access },
3485
+ { CP15_SYS_DESC (SYS_ICC_IGRPEN1_EL1 ), undef_access },
3448
3486
3449
3487
{ Op1 ( 0 ), CRn (13 ), CRm ( 0 ), Op2 ( 1 ), access_vm_reg , NULL , CONTEXTIDR_EL1 },
3450
3488
0 commit comments