static inline void vcpu_reset_hcr(struct kvm_vcpu *vcpu)
 {
        vcpu->arch.hcr_el2 = HCR_GUEST_FLAGS;
-       if (is_kernel_in_hyp_mode())
+       if (has_vhe() || has_hvhe())
                vcpu->arch.hcr_el2 |= HCR_E2H;
        if (cpus_have_const_cap(ARM64_HAS_RAS_EXTN)) {
                /* route synchronous external abort exceptions to EL2 */
 
        BUILD_BUG_ON(!FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_AdvSIMD),
                                PVM_ID_AA64PFR0_ALLOW));
 
+       if (has_hvhe())
+               hcr_set |= HCR_E2H;
+
        /* Trap RAS unless all current versions are supported */
        if (FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_RAS), feature_ids) <
            ID_AA64PFR0_EL1_RAS_V1P1) {