[PATCH 1/2] KVM: arm64: Initialize HCR_EL2.E2H early
Leo Yan
leo.yan at arm.com
Fri Feb 28 01:29:55 PST 2025
Hi Mark,
On Thu, Feb 27, 2025 at 06:05:25PM +0000, Mark Rutland wrote:
[...]
> +.macro init_el2_hcr val
> + mov_q x0, \val
> +
> + /*
> + * Compliant CPUs advertise their VHE-onlyness with
> + * ID_AA64MMFR4_EL1.E2H0 < 0. On such CPUs HCR_EL2.E2H is RES1, but it
> + * can reset into an UNKNOWN state and might not read as 1 until it has
> + * been initialized explicitly.
For ID_AA64MMFR4_EL1.E2H0 < 0 case, the code actually clears the
HCR_EL2.E2H bit.
Hence, the comment should be corrected as: "... it can reset into an
UNKNOWN state and might not read as 0 until it has been initialized
explicitly".
> + *
> + * Fruity CPUs seem to have HCR_EL2.E2H set to RAO/WI, but
> + * don't advertise it (they predate this relaxation).
> + *
> + * Initalize HCR_EL2.E2H so that later code can rely upon HCR_EL2.E2H
> + * indicating whether the CPU is running in E2H mode.
> + */
I think it is even better to clear the HCR_E2H bit first. This can
avoid any dependency on the passed parameter 'val'.
bic x0, x0, #HCR_E2H
> + mrs_s x1, SYS_ID_AA64MMFR4_EL1
> + sbfx x1, x1, #ID_AA64MMFR4_EL1_E2H0_SHIFT, #ID_AA64MMFR4_EL1_E2H0_WIDTH
> + cmp x1, #0
> + b.lt .LnVHE_\@
> +
> + orr x0, x0, #HCR_E2H
> +.LnVHE_\@:
> + msr hcr_el2, x0
> + isb
> +.endm
More information about the linux-arm-kernel
mailing list