On 1/27/23 07:54, Peter Maydell wrote:
> The AArch32 ATS12NSO* address translation operations are supposed to
> trap to either EL2 or EL3 if they're executed at Secure EL1 (which
> can only happen if EL3 is AArch64). We implement this, but we got
> the syndrome value wrong: like other traps to EL2 or EL3 on an
> AArch32 cpreg access, they should report the 0x3 syndrome, not the
> 0x0 'uncategorized' syndrome. This is clear in the access pseudocode
> for these instructions.
>
> Fix the syndrome value for these operations by correcting the
> returned value from the ats_access() function.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> target/arm/helper.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
>
> diff --git a/target/arm/helper.c b/target/arm/helper.c
> index ccb7d1e1712..6f6772d8e04 100644
> --- a/target/arm/helper.c
> +++ b/target/arm/helper.c
> @@ -3284,9 +3284,9 @@ static CPAccessResult ats_access(CPUARMState *env, const ARMCPRegInfo *ri,
> if (arm_current_el(env) == 1) {
> if (arm_is_secure_below_el3(env)) {
> if (env->cp15.scr_el3 & SCR_EEL2) {
> - return CP_ACCESS_TRAP_UNCATEGORIZED_EL2;
> + return CP_ACCESS_TRAP_EL2;
> }
> - return CP_ACCESS_TRAP_UNCATEGORIZED_EL3;
> + return CP_ACCESS_TRAP_EL3;
> }
> return CP_ACCESS_TRAP_UNCATEGORIZED;
> }