diff --git a/hif/src/ipcie/if_ipci.c b/hif/src/ipcie/if_ipci.c index 3c557eb7885d..a5a08518e3fc 100644 --- a/hif/src/ipcie/if_ipci.c +++ b/hif/src/ipcie/if_ipci.c @@ -931,10 +931,34 @@ void hif_allow_link_low_power_states(struct hif_opaque_softc *hif) int hif_ipci_enable_grp_irqs(struct hif_softc *scn) { - return hif_apps_grp_irqs_enable(GET_HIF_OPAQUE_HDL(scn)); + struct hif_ipci_softc *ipci_scn = HIF_GET_IPCI_SOFTC(scn); + int status; + + if (!ipci_scn->grp_irqs_disabled) { + hif_err("Unbalanced group IRQs Enable called"); + qdf_assert_always(0); + } + + status = hif_apps_grp_irqs_enable(GET_HIF_OPAQUE_HDL(scn)); + if (!status) + ipci_scn->grp_irqs_disabled = false; + + return status; } int hif_ipci_disable_grp_irqs(struct hif_softc *scn) { - return hif_apps_grp_irqs_disable(GET_HIF_OPAQUE_HDL(scn)); + struct hif_ipci_softc *ipci_scn = HIF_GET_IPCI_SOFTC(scn); + int status; + + if (ipci_scn->grp_irqs_disabled) { + hif_err("Unbalanced group IRQs disable called"); + qdf_assert_always(0); + } + + status = hif_apps_grp_irqs_disable(GET_HIF_OPAQUE_HDL(scn)); + if (!status) + ipci_scn->grp_irqs_disabled = true; + + return status; } diff --git a/hif/src/ipcie/if_ipci.h b/hif/src/ipcie/if_ipci.h index afbd9a164632..2481e7cbab74 100644 --- a/hif/src/ipcie/if_ipci.h +++ b/hif/src/ipcie/if_ipci.h @@ -89,6 +89,7 @@ struct hif_ipci_softc { uint32_t register_window; qdf_spinlock_t register_access_lock; qdf_spinlock_t irq_lock; + bool grp_irqs_disabled; #ifdef FEATURE_RUNTIME_PM struct hif_runtime_pm_ctx rpm_ctx; #endif