summaryrefslogtreecommitdiff
path: root/arch/arm64/kvm
diff options
context:
space:
mode:
authorMarc Zyngier <maz@kernel.org>2023-06-09 19:21:49 +0300
committerOliver Upton <oliver.upton@linux.dev>2023-06-13 02:17:23 +0300
commit9e7462bbe00d8431694720804a50b8f48d8ed0b0 (patch)
tree8cf5a26721d1e5ee3bbaa9d7ede909da1c3effd8 /arch/arm64/kvm
parent7a26e1f51e3c26a1b4a1f087e2056f1554365682 (diff)
downloadlinux-9e7462bbe00d8431694720804a50b8f48d8ed0b0.tar.xz
arm64: Allow EL1 physical timer access when running VHE
To initialise the timer access from EL2 when HCR_EL2.E2H is set, we must make use the CNTHCTL_EL2 formap used is appropriate. This amounts to shifting the timer/counter enable bits by 10 to the left. Signed-off-by: Marc Zyngier <maz@kernel.org> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Link: https://lore.kernel.org/r/20230609162200.2024064-7-maz@kernel.org Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
Diffstat (limited to 'arch/arm64/kvm')
-rw-r--r--arch/arm64/kvm/hyp/nvhe/hyp-init.S9
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-init.S b/arch/arm64/kvm/hyp/nvhe/hyp-init.S
index a6d67c2bb5ae..f9ee10e29497 100644
--- a/arch/arm64/kvm/hyp/nvhe/hyp-init.S
+++ b/arch/arm64/kvm/hyp/nvhe/hyp-init.S
@@ -95,6 +95,15 @@ SYM_CODE_START_LOCAL(___kvm_hyp_init)
ldr x1, [x0, #NVHE_INIT_HCR_EL2]
msr hcr_el2, x1
+ mov x2, #HCR_E2H
+ and x2, x1, x2
+ cbz x2, 1f
+
+ mrs x1, cnthctl_el2
+ and x1, x1, #~(BIT(0) | BIT(1))
+ orr x1, x1, #(BIT(10) | BIT(11))
+ msr cnthctl_el2, x1
+1:
ldr x1, [x0, #NVHE_INIT_VTTBR]
msr vttbr_el2, x1