|
@@ -498,13 +498,16 @@ static const struct sys_reg_desc sys_reg_descs[] = {
|
|
|
static const struct sys_reg_desc cp14_regs[] = {
|
|
|
};
|
|
|
|
|
|
+/* Trapped cp14 64bit registers */
|
|
|
+static const struct sys_reg_desc cp14_64_regs[] = {
|
|
|
+};
|
|
|
+
|
|
|
/*
|
|
|
* Trapped cp15 registers. TTBR0/TTBR1 get a double encoding,
|
|
|
* depending on the way they are accessed (as a 32bit or a 64bit
|
|
|
* register).
|
|
|
*/
|
|
|
static const struct sys_reg_desc cp15_regs[] = {
|
|
|
- { Op1( 0), CRn( 0), CRm( 2), Op2( 0), access_vm_reg, NULL, c2_TTBR0 },
|
|
|
{ Op1( 0), CRn( 1), CRm( 0), Op2( 0), access_sctlr, NULL, c1_SCTLR },
|
|
|
{ Op1( 0), CRn( 2), CRm( 0), Op2( 0), access_vm_reg, NULL, c2_TTBR0 },
|
|
|
{ Op1( 0), CRn( 2), CRm( 0), Op2( 1), access_vm_reg, NULL, c2_TTBR1 },
|
|
@@ -545,6 +548,10 @@ static const struct sys_reg_desc cp15_regs[] = {
|
|
|
{ Op1( 0), CRn(10), CRm( 3), Op2( 1), access_vm_reg, NULL, c10_AMAIR1 },
|
|
|
{ Op1( 0), CRn(13), CRm( 0), Op2( 1), access_vm_reg, NULL, c13_CID },
|
|
|
|
|
|
+};
|
|
|
+
|
|
|
+static const struct sys_reg_desc cp15_64_regs[] = {
|
|
|
+ { Op1( 0), CRn( 0), CRm( 2), Op2( 0), access_vm_reg, NULL, c2_TTBR0 },
|
|
|
{ Op1( 1), CRn( 0), CRm( 2), Op2( 0), access_vm_reg, NULL, c2_TTBR1 },
|
|
|
};
|
|
|
|
|
@@ -770,7 +777,7 @@ int kvm_handle_cp15_64(struct kvm_vcpu *vcpu, struct kvm_run *run)
|
|
|
|
|
|
target_specific = get_target_table(vcpu->arch.target, false, &num);
|
|
|
return kvm_handle_cp_64(vcpu,
|
|
|
- cp15_regs, ARRAY_SIZE(cp15_regs),
|
|
|
+ cp15_64_regs, ARRAY_SIZE(cp15_64_regs),
|
|
|
target_specific, num);
|
|
|
}
|
|
|
|
|
@@ -788,7 +795,7 @@ int kvm_handle_cp15_32(struct kvm_vcpu *vcpu, struct kvm_run *run)
|
|
|
int kvm_handle_cp14_64(struct kvm_vcpu *vcpu, struct kvm_run *run)
|
|
|
{
|
|
|
return kvm_handle_cp_64(vcpu,
|
|
|
- cp14_regs, ARRAY_SIZE(cp14_regs),
|
|
|
+ cp14_64_regs, ARRAY_SIZE(cp14_64_regs),
|
|
|
NULL, 0);
|
|
|
}
|
|
|
|