[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 2/6] target-arm: Fix handling of SCR.SMD
From: |
Edgar E. Iglesias |
Subject: |
Re: [Qemu-devel] [PATCH v2 2/6] target-arm: Fix handling of SCR.SMD |
Date: |
Fri, 12 Feb 2016 10:13:52 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Thu, Feb 11, 2016 at 04:03:25PM +0000, Peter Maydell wrote:
> We weren't quite implementing the handling of SCR.SMD correctly.
> The condition governing whether the SMD bit should apply only
> for NS state is "is EL3 is AArch32", not "is the current EL AArch32".
> Fix the condition, and clarify the comment both to reflect this and
> to expand slightly on what's going on for the v7-no-Virtualization case.
>
> Signed-off-by: Peter Maydell <address@hidden>
> Reviewed-by: Sergey Fedorov <address@hidden>
Reviewed-by: Edgar E. Iglesias <address@hidden>
> ---
> The bit about forcing SMD to zero confused me, anyway, since I
> expected it to mean "in this function", not elsewhere...
> ---
> target-arm/op_helper.c | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c
> index bd48549..4c0980e 100644
> --- a/target-arm/op_helper.c
> +++ b/target-arm/op_helper.c
> @@ -614,12 +614,14 @@ void HELPER(pre_smc)(CPUARMState *env, uint32_t
> syndrome)
> int cur_el = arm_current_el(env);
> bool secure = arm_is_secure(env);
> bool smd = env->cp15.scr_el3 & SCR_SMD;
> - /* On ARMv8 AArch32, SMD only applies to NS state.
> - * On ARMv7 SMD only applies to NS state and only if EL2 is available.
> - * For ARMv7 non EL2, we force SMD to zero so we don't need to re-check
> - * the EL2 condition here.
> + /* On ARMv8 with EL3 AArch64, SMD applies to both S and NS state.
> + * On ARMv8 with EL3 AArch32, or ARMv7 with the Virtualization
> + * extensions, SMD only applies to NS state.
> + * On ARMv7 without the Virtualization extensions, the SMD bit
> + * doesn't exist, but we forbid the guest to set it to 1 in scr_write(),
> + * so we need not special case this here.
> */
> - bool undef = is_a64(env) ? smd : (!secure && smd);
> + bool undef = arm_feature(env, ARM_FEATURE_AARCH64) ? smd : smd &&
> !secure;
>
> if (arm_is_psci_call(cpu, EXCP_SMC)) {
> /* If PSCI is enabled and this looks like a valid PSCI call then
> --
> 1.9.1
>
- [Qemu-devel] [PATCH v2 0/6] target-arm: Implement various EL3 traps, Peter Maydell, 2016/02/11
- [Qemu-devel] [PATCH v2 5/6] target-arm: Implement MDCR_EL3.TDA and MDCR_EL2.TDA traps, Peter Maydell, 2016/02/11
- [Qemu-devel] [PATCH v2 6/6] target-arm: Report correct syndrome for FPEXC32_EL2 traps, Peter Maydell, 2016/02/11
- [Qemu-devel] [PATCH v2 2/6] target-arm: Fix handling of SCR.SMD, Peter Maydell, 2016/02/11
- Re: [Qemu-devel] [PATCH v2 2/6] target-arm: Fix handling of SCR.SMD,
Edgar E. Iglesias <=
- [Qemu-devel] [PATCH v2 1/6] target-arm: correct CNTFRQ access rights, Peter Maydell, 2016/02/11
- [Qemu-devel] [PATCH v2 3/6] target-arm: Implement MDCR_EL3.TDOSA and MDCR_EL2.TDOSA traps, Peter Maydell, 2016/02/11
- [Qemu-devel] [PATCH v2 4/6] target-arm: Implement MDCR_EL2.TDRA traps, Peter Maydell, 2016/02/11