diff options
author | Marc Zyngier <marc.zyngier@arm.com> | 2017-06-06 19:08:33 +0100 |
---|---|---|
committer | Christoffer Dall <cdall@linaro.org> | 2017-06-06 22:20:02 +0200 |
commit | d68c1f7fd1b7148dab5fe658321d511998969f2d (patch) | |
tree | dad8985ff69023999b33a51382598d5627daa292 /arch/arm64/kvm/hyp-init.S | |
parent | d6dbdd3c8558cad3b6d74cc357b408622d122331 (diff) | |
download | linux-d68c1f7fd1b7148dab5fe658321d511998969f2d.tar.gz linux-d68c1f7fd1b7148dab5fe658321d511998969f2d.tar.bz2 linux-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 'arch/arm64/kvm/hyp-init.S')
-rw-r--r-- | arch/arm64/kvm/hyp-init.S | 10 |
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 |