On Tue, 24 Feb 2026 at 15:43, Alex Bennée <[email protected]> wrote:
>
> We can use the registerfields API to safely set the individual fields
> and avoid open coding magic numbers. The EC and IL fields are still
> driven by defines but we could convert them later.
>
> Signed-off-by: Alex Bennée <[email protected]>
> +FIELD(WFX_ISS, TI, 0, 2)
> +FIELD(WFX_ISS, RV, 14, 1)
> +FIELD(WFX_ISS, RN, 15, 5)
> +FIELD(WFX_ISS, COND, 20, 4)
> +FIELD(WFX_ISS, CV, 24, 1)
> +
> static inline uint32_t syn_wfx(int cv, int cond, int ti, bool is_16bit)
> {
> - return (EC_WFX_TRAP << ARM_EL_EC_SHIFT) |
> - (is_16bit ? 0 : (1 << ARM_EL_IL_SHIFT)) |
> - (cv << 24) | (cond << 20) | ti;
> + uint32_t res = (EC_WFX_TRAP << ARM_EL_EC_SHIFT);
> +
> + res = FIELD_DP32(res, WFX_ISS, CV, cv);
> + res = FIELD_DP32(res, WFX_ISS, COND, cond);
> + res = FIELD_DP32(res, WFX_ISS, TI, ti);
> +
> + if (!is_16bit) {
> + res |= ARM_EL_IL;
> + }
> + return res;
> }
I'm not hugely enthusiastic about this mostly because it
means we would have one syn_foo function that's written totally
differently to all the rest.
-- PMM