allow guest user applications read ctr_el0 on Arm64

At present, when doing syscall_kvm test, we need to
enable the function of ESR_ELx_SYS64_ISS_SYS_CTR_READ to
successfully pass the test.

I set SCTLR_EL1.UCT==1, so that the related cases can passed.

Signed-off-by: Bin Lu <bin.lu@arm.com>
This commit is contained in:
Bin Lu
2020-07-03 00:08:39 -04:00
parent 6c099d8300
commit 49f38dee10
2 changed files with 13 additions and 13 deletions
@@ -78,19 +78,6 @@ func (c *vCPU) initArchState() error {
return err
}
// sctlr_el1
regGet.id = _KVM_ARM64_REGS_SCTLR_EL1
if err := c.getOneRegister(&regGet); err != nil {
return err
}
dataGet |= (_SCTLR_M | _SCTLR_C | _SCTLR_I)
data = dataGet
reg.id = _KVM_ARM64_REGS_SCTLR_EL1
if err := c.setOneRegister(&reg); err != nil {
return err
}
// tcr_el1
data = _TCR_TXSZ_VA48 | _TCR_CACHE_FLAGS | _TCR_SHARED | _TCR_TG_FLAGS | _TCR_ASID16 | _TCR_IPS_40BITS
reg.id = _KVM_ARM64_REGS_TCR_EL1
+13
View File
@@ -40,6 +40,14 @@
#define FPEN_ENABLE (FPEN_NOTRAP << FPEN_SHIFT)
// sctlr_el1: system control register el1.
#define SCTLR_M 1 << 0
#define SCTLR_C 1 << 2
#define SCTLR_I 1 << 12
#define SCTLR_UCT 1 << 15
#define SCTLR_EL1_DEFAULT (SCTLR_M | SCTLR_C | SCTLR_I | SCTLR_UCT)
// Saves a register set.
//
// This is a macro because it may need to executed in contents where a stack is
@@ -496,6 +504,11 @@ TEXT ·kernelExitToEl1(SB),NOSPLIT,$0
// Start is the CPU entrypoint.
TEXT ·Start(SB),NOSPLIT,$0
IRQ_DISABLE
// Init.
MOVD $SCTLR_EL1_DEFAULT, R1
MSR R1, SCTLR_EL1
MOVD R8, RSV_REG
ORR $0xffff000000000000, RSV_REG, RSV_REG
WORD $0xd518d092 //MSR R18, TPIDR_EL1