aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2019-09-20 18:40:39 +0100
committerMichael Roth <mdroth@linux.vnet.ibm.com>2019-10-30 11:37:26 -0500
commit220816989c1e3d490d293b8d7ac85dbc41a4c321 (patch)
tree043d463ae5cead4d05c69669e6cf2e9e08dd37c0
parent783e7eb52c0a8e2b8cb906566d0dc2538ffefccf (diff)
downloadqemu-220816989c1e3d490d293b8d7ac85dbc41a4c321.zip
qemu-220816989c1e3d490d293b8d7ac85dbc41a4c321.tar.gz
qemu-220816989c1e3d490d293b8d7ac85dbc41a4c321.tar.bz2
hw/arm/boot.c: Set NSACR.{CP11,CP10} for NS kernel boots
If we're booting a Linux kernel directly into Non-Secure state on a CPU which has Secure state, then make sure we set the NSACR CP11 and CP10 bits, so that Non-Secure is allowed to access the FPU. Otherwise an AArch32 kernel will UNDEF as soon as it tries to use the FPU. It used to not matter that we didn't do this until commit fc1120a7f5f2d4b6, where we implemented actually honouring these NSACR bits. The problem only exists for CPUs where EL3 is AArch32; the equivalent AArch64 trap bits are in CPTR_EL3 and are "0 to not trap, 1 to trap", so the reset value of the register permits NS access, unlike NSACR. Fixes: fc1120a7f5 Fixes: https://bugs.launchpad.net/qemu/+bug/1844597 Cc: qemu-stable@nongnu.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20190920174039.3916-1-peter.maydell@linaro.org (cherry picked from commit ece628fcf69cbbd4b3efb6fbd203af07609467a2) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
-rw-r--r--hw/arm/boot.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index c2b89b3..fc4e021 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -754,6 +754,8 @@ static void do_cpu_reset(void *opaque)
(cs != first_cpu || !info->secure_board_setup)) {
/* Linux expects non-secure state */
env->cp15.scr_el3 |= SCR_NS;
+ /* Set NSACR.{CP11,CP10} so NS can access the FPU */
+ env->cp15.nsacr |= 3 << 10;
}
}