mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-07-07 07:40:34 +00:00
target/arm: Mask virtual interrupts if HCR_EL2.TGE is set
If the "trap general exceptions" bit HCR_EL2.TGE is set, we must mask all virtual interrupts (as per DDI0487C.a D1.14.3). Implement this in arm_excp_unmasked(). Backports commit 2ccf0fef632f3d54b2cc9ea08f1e6904ff1f8df4 from qemu
This commit is contained in:
parent
9d7deb2997
commit
f0bf1160e4
|
@ -2200,13 +2200,15 @@ static inline bool arm_excp_unmasked(CPUState *cs, unsigned int excp_idx,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXCP_VFIQ:
|
case EXCP_VFIQ:
|
||||||
if (secure || !(env->cp15.hcr_el2 & HCR_FMO)) {
|
if (secure || !(env->cp15.hcr_el2 & HCR_FMO)
|
||||||
|
|| (env->cp15.hcr_el2 & HCR_TGE)) {
|
||||||
/* VFIQs are only taken when hypervized and non-secure. */
|
/* VFIQs are only taken when hypervized and non-secure. */
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return !(env->daif & PSTATE_F);
|
return !(env->daif & PSTATE_F);
|
||||||
case EXCP_VIRQ:
|
case EXCP_VIRQ:
|
||||||
if (secure || !(env->cp15.hcr_el2 & HCR_IMO)) {
|
if (secure || !(env->cp15.hcr_el2 & HCR_IMO)
|
||||||
|
|| (env->cp15.hcr_el2 & HCR_TGE)) {
|
||||||
/* VIRQs are only taken when hypervized and non-secure. */
|
/* VIRQs are only taken when hypervized and non-secure. */
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue