qcacmn: Track for unbalanced group irqs enable/disable

In wlan suspend and resume cases it is seen that group
irqs are getting disabled multiple times without getting
enabled which is causing irqs to be disabled permenantly.

Track for unbalanced disabling/enabling group irqs which
helps to root cause the issue.

Change-Id: Ic1ef637c317f04b3299f17f19208df11ece3c013
CRs-Fixed: 2939809
This commit is contained in:
Karthik Kantamneni 2021-05-13 20:57:04 +05:30 • committed by Gerrit - the friendly Code Review server
commit 31eb8e469a
2 changed files with 27 additions and 2 deletions

View file

@ -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;
}

View file

@ -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