On 8/10/20 11:07 PM, LIU Zhiwei wrote:
> if (el <= 2 && !arm_is_secure_below_el3(env)) {
> - if (env->cp15.cptr_el[2] & CPTR_TZ) {
> - return 2;
> - }
> - if (env->cp15.cptr_el[2] & CPTR_TFP) {
> - return 0;
> + if ((arm_hcr_el2_eff(env) & HCR_E2H) == HCR_E2H) {
> + int zen = extract32(env->cp15.cptr_el[2], 16, 2);
> + switch (zen) {
> + case 0:
> + case 2:
> + return 2;
> + case 1:
> + if ((arm_hcr_el2_eff(env) & HCR_TGE) == HCR_TGE) {
Since the outer if checks that we're in non-secure state, and (by nature of
sve) we know we're in aarch64 mode, then we don't need to use arm_hcr_el2_eff
and can just use env->cp15.hcr_el2.
Add a comment
> /* Since we exclude secure first, we may read HCR_EL2 directly. */
like we do in vae1_tlbmask.
You do not need to write
if ((x & bit) == bit)
just use
if (x & bit)
here.
With those changes,
Reviewed-by: Richard Henderson <[email protected]>
r~