aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/kvm/hyp-init.S
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2017-06-06 19:08:33 +0100
committerChristoffer Dall <cdall@linaro.org>2017-06-06 22:20:02 +0200
commitd68c1f7fd1b7148dab5fe658321d511998969f2d (patch)
treedad8985ff69023999b33a51382598d5627daa292 /arch/arm64/kvm/hyp-init.S
parentKVM: arm/arm64: Handle possible NULL stage2 pud when ageing pages (diff)
downloadlinux-dev-d68c1f7fd1b7148dab5fe658321d511998969f2d.tar.xz
linux-dev-d68c1f7fd1b7148dab5fe658321d511998969f2d.zip
arm64: KVM: Preserve RES1 bits in SCTLR_EL2
__do_hyp_init has the rather bad habit of ignoring RES1 bits and writing them back as zero. On a v8.0-8.2 CPU, this doesn't do anything bad, but may end-up being pretty nasty on future revisions of the architecture. Let's preserve those bits so that we don't have to fix this later on. Cc: stable@vger.kernel.org Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Christoffer Dall <cdall@linaro.org>
Diffstat (limited to '')
-rw-r--r--arch/arm64/kvm/hyp-init.S10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/arm64/kvm/hyp-init.S b/arch/arm64/kvm/hyp-init.S
index 839425c24b1c..4072d408a4b4 100644
--- a/arch/arm64/kvm/hyp-init.S
+++ b/arch/arm64/kvm/hyp-init.S
@@ -106,10 +106,12 @@ __do_hyp_init:
tlbi alle2
dsb sy
- mrs x4, sctlr_el2
- and x4, x4, #SCTLR_ELx_EE // preserve endianness of EL2
- ldr x5, =SCTLR_ELx_FLAGS
- orr x4, x4, x5
+ /*
+ * Preserve all the RES1 bits while setting the default flags,
+ * as well as the EE bit on BE.
+ */
+ ldr x4, =(SCTLR_EL2_RES1 | SCTLR_ELx_FLAGS)
+CPU_BE( orr x4, x4, #SCTLR_ELx_EE)
msr sctlr_el2, x4
isb