summaryrefslogtreecommitdiff
path: root/hif
diff options
context:
space:
mode:
authorYun Park <yunp@codeaurora.org>2017-09-19 20:13:48 -0700
committersnandini <snandini@codeaurora.org>2017-10-25 17:48:05 -0700
commitb5e74bb6ae7046ebc5c503ce23d6d02f8ab4157c (patch)
treef8f5e2bc8c7cd92f2cf2b2378b0670458558d7a7 /hif
parent26207605032e242b947385eb541d3e47f4686081 (diff)
downloadqca-wfi-host-cmn-b5e74bb6ae7046ebc5c503ce23d6d02f8ab4157c.tar.gz
qcacmn: Fix irq mismatch from wake irq
Fix irq mismatch from wake irq, as well as extra irq free. Change-Id: Id4415312868e54909521f0016923f859b228db64 CRs-Fixed: 2118005
Diffstat (limited to 'hif')
-rw-r--r--hif/src/pcie/if_pci.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/hif/src/pcie/if_pci.c b/hif/src/pcie/if_pci.c
index 4e56d0809..e4392142b 100644
--- a/hif/src/pcie/if_pci.c
+++ b/hif/src/pcie/if_pci.c
@@ -2551,6 +2551,10 @@ static int hif_ce_srng_msi_free_irq(struct hif_softc *scn)
*/
for (ce_id = 0; ce_id < scn->ce_count; ce_id++) {
unsigned int msi_data;
+
+ if (!ce_sc->tasklets[ce_id].inited)
+ continue;
+
msi_data = (ce_id % msi_data_count) + msi_irq_start;
irq = pld_get_msi_irq(scn->qdf_dev->dev, msi_data);
@@ -2605,7 +2609,13 @@ void hif_pci_nointrs(struct hif_softc *scn)
hif_pci_deconfigure_grp_irq(scn);
ret = hif_ce_srng_msi_free_irq(scn);
- if (ret != 0 && sc->num_msi_intrs > 0) {
+ if (ret != -EINVAL) {
+ /* ce irqs freed in hif_ce_srng_msi_free_irq */
+
+ if (scn->wake_irq)
+ free_irq(scn->wake_irq, scn);
+ scn->wake_irq = 0;
+ } else if (sc->num_msi_intrs > 0) {
/* MSI interrupt(s) */
for (i = 0; i < sc->num_msi_intrs; i++)
free_irq(sc->irq + i, sc);
@@ -2618,7 +2628,6 @@ void hif_pci_nointrs(struct hif_softc *scn)
free_irq(sc->irq, sc);
}
scn->request_irq_done = false;
-
}
/**