@@ -242,6 +242,25 @@ static bool access_vm_reg(struct kvm_vcpu *vcpu,
242
242
return true;
243
243
}
244
244
245
+ static bool access_actlr (struct kvm_vcpu * vcpu ,
246
+ struct sys_reg_params * p ,
247
+ const struct sys_reg_desc * r )
248
+ {
249
+ if (p -> is_write )
250
+ return ignore_write (vcpu , p );
251
+
252
+ p -> regval = vcpu_read_sys_reg (vcpu , ACTLR_EL1 );
253
+
254
+ if (p -> is_aarch32 ) {
255
+ if (r -> Op2 & 2 )
256
+ p -> regval = upper_32_bits (p -> regval );
257
+ else
258
+ p -> regval = lower_32_bits (p -> regval );
259
+ }
260
+
261
+ return true;
262
+ }
263
+
245
264
/*
246
265
* Trap handler for the GICv3 SGI generation system register.
247
266
* Forward the request to the VGIC emulation.
@@ -615,6 +634,12 @@ static void reset_amair_el1(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r)
615
634
vcpu_write_sys_reg (vcpu , amair , AMAIR_EL1 );
616
635
}
617
636
637
+ static void reset_actlr (struct kvm_vcpu * vcpu , const struct sys_reg_desc * r )
638
+ {
639
+ u64 actlr = read_sysreg (actlr_el1 );
640
+ vcpu_write_sys_reg (vcpu , actlr , ACTLR_EL1 );
641
+ }
642
+
618
643
static void reset_mpidr (struct kvm_vcpu * vcpu , const struct sys_reg_desc * r )
619
644
{
620
645
u64 mpidr ;
@@ -1518,6 +1543,7 @@ static const struct sys_reg_desc sys_reg_descs[] = {
1518
1543
ID_UNALLOCATED (7 ,7 ),
1519
1544
1520
1545
{ SYS_DESC (SYS_SCTLR_EL1 ), access_vm_reg , reset_val , SCTLR_EL1 , 0x00C50078 },
1546
+ { SYS_DESC (SYS_ACTLR_EL1 ), access_actlr , reset_actlr , ACTLR_EL1 },
1521
1547
{ SYS_DESC (SYS_CPACR_EL1 ), NULL , reset_val , CPACR_EL1 , 0 },
1522
1548
{ SYS_DESC (SYS_ZCR_EL1 ), NULL , reset_val , ZCR_EL1 , 0 , .visibility = sve_visibility },
1523
1549
{ SYS_DESC (SYS_TTBR0_EL1 ), access_vm_reg , reset_unknown , TTBR0_EL1 },
@@ -1957,6 +1983,8 @@ static const struct sys_reg_desc cp14_64_regs[] = {
1957
1983
static const struct sys_reg_desc cp15_regs [] = {
1958
1984
{ Op1 ( 0 ), CRn ( 0 ), CRm ( 0 ), Op2 ( 1 ), access_ctr },
1959
1985
{ Op1 ( 0 ), CRn ( 1 ), CRm ( 0 ), Op2 ( 0 ), access_vm_reg , NULL , c1_SCTLR },
1986
+ { Op1 ( 0 ), CRn ( 1 ), CRm ( 0 ), Op2 ( 1 ), access_actlr },
1987
+ { Op1 ( 0 ), CRn ( 1 ), CRm ( 0 ), Op2 ( 3 ), access_actlr },
1960
1988
{ Op1 ( 0 ), CRn ( 2 ), CRm ( 0 ), Op2 ( 0 ), access_vm_reg , NULL , c2_TTBR0 },
1961
1989
{ Op1 ( 0 ), CRn ( 2 ), CRm ( 0 ), Op2 ( 1 ), access_vm_reg , NULL , c2_TTBR1 },
1962
1990
{ Op1 ( 0 ), CRn ( 2 ), CRm ( 0 ), Op2 ( 2 ), access_vm_reg , NULL , c2_TTBCR },
0 commit comments