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
Esse commit está contido em:
Karthik Kantamneni
2021-05-13 20:57:04 +05:30
commit de Madan Koyyalamudi
commit 4dc1443151
2 arquivos alterados com 27 adições e 2 exclusões

Ver arquivo

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

Ver arquivo

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