From: Peng Fan <[email protected]> Set bit 30 of FPEXC32_EL2 to enables access to the Advanced SIMD and floating-point functionality from all Exception levels.
Set CPACR_EL1.FPEN to not trap accessing to SIMD or floating point registers. Reported-by: Alice Guo <[email protected]> Signed-off-by: Peng Fan <[email protected]> --- V2: Add Macros Use u64 for fpexc32_el2. hypervisor/arch/arm64/control.c | 7 ++++++- hypervisor/arch/arm64/include/asm/sysregs.h | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/hypervisor/arch/arm64/control.c b/hypervisor/arch/arm64/control.c index 7bc3cab1..cd90b5fc 100644 --- a/hypervisor/arch/arm64/control.c +++ b/hypervisor/arch/arm64/control.c @@ -21,6 +21,7 @@ void arm_cpu_reset(unsigned long pc, bool aarch32) { u64 hcr_el2; + u64 fpexc32_el2; /* put the cpu in a reset state */ /* AARCH64_TODO: handle big endian support */ @@ -43,7 +44,7 @@ void arm_cpu_reset(unsigned long pc, bool aarch32) arm_write_sysreg(AFSR1_EL1, 0); arm_write_sysreg(AMAIR_EL1, 0); arm_write_sysreg(CONTEXTIDR_EL1, 0); - arm_write_sysreg(CPACR_EL1, 0); + arm_write_sysreg(CPACR_EL1, CPACR_EL1_FPEN(3)); arm_write_sysreg(CSSELR_EL1, 0); arm_write_sysreg(ESR_EL1, 0); arm_write_sysreg(FAR_EL1, 0); @@ -57,6 +58,10 @@ void arm_cpu_reset(unsigned long pc, bool aarch32) arm_write_sysreg(TTBR1_EL1, 0); arm_write_sysreg(VBAR_EL1, 0); + arm_read_sysreg(FPEXC32_EL2, fpexc32_el2); + fpexc32_el2 |= FPEXC_EL2_EN_BIT; + arm_write_sysreg(FPEXC32_EL2, fpexc32_el2); + /* wipe timer registers */ arm_write_sysreg(CNTP_CTL_EL0, 0); arm_write_sysreg(CNTP_CVAL_EL0, 0); diff --git a/hypervisor/arch/arm64/include/asm/sysregs.h b/hypervisor/arch/arm64/include/asm/sysregs.h index 56f0ce0a..378fecd8 100644 --- a/hypervisor/arch/arm64/include/asm/sysregs.h +++ b/hypervisor/arch/arm64/include/asm/sysregs.h @@ -163,6 +163,10 @@ /* exception level in SPSR_ELx */ #define SPSR_EL(spsr) (((spsr) & 0xc) >> 2) +#define CPACR_EL1_FPEN(x) ((x) << 20) + +#define FPEXC_EL2_EN_BIT (1UL << 30) + #ifndef __ASSEMBLY__ #include <jailhouse/string.h> -- 2.16.4 -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jailhouse-dev/20200821024921.3075-3-peng.fan%40nxp.com.
