Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d68c1f7f authored by Marc Zyngier's avatar Marc Zyngier Committed by Christoffer Dall
Browse files

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: default avatarMarc Zyngier <marc.zyngier@arm.com>
Signed-off-by: default avatarChristoffer Dall <cdall@linaro.org>
parent d6dbdd3c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -286,6 +286,10 @@
#define SCTLR_ELx_A	(1 << 1)
#define SCTLR_ELx_M	1

#define SCTLR_EL2_RES1	((1 << 4)  | (1 << 5)  | (1 << 11) | (1 << 16) | \
			 (1 << 16) | (1 << 18) | (1 << 22) | (1 << 23) | \
			 (1 << 28) | (1 << 29))

#define SCTLR_ELx_FLAGS	(SCTLR_ELx_M | SCTLR_ELx_A | SCTLR_ELx_C | \
			 SCTLR_ELx_SA | SCTLR_ELx_I)

+6 −4
Original line number Diff line number Diff line
@@ -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