Browse Source

qcacmn: use disable_irq for EXT GRP IRQs

Currently, as part of device suspend, EXT GRP IRQs are disabled.
disable_irq_nosync() which is currently being used to disable
interrupts will not wait for pending IRQs to completion. With this
API, there is a chance where IRQ handler can be executed after the
device suspend. Use disable_irq() instead so that pending IRQs will
be completed before returing from disable_irq().

CRs-Fixed: 2904518
Change-Id: Ib9acabe89b0337add82918be24b4782a6b125d05
Manikanta Pubbisetty 4 năm trước cách đây
mục cha
commit
5abda36e03
1 tập tin đã thay đổi với 8 bổ sung4 xóa
  1. 8 4
      hif/src/dispatcher/multibus.c

+ 8 - 4
hif/src/dispatcher/multibus.c

@@ -632,7 +632,7 @@ int hif_apps_grp_irqs_enable(struct hif_opaque_softc *hif_ctx)
 {
 	struct hif_exec_context *hif_exec;
 	struct hif_softc *scn;
-	int i;
+	int i, j;
 
 	QDF_BUG(hif_ctx);
 	scn = HIF_GET_SOFTC(hif_ctx);
@@ -644,7 +644,9 @@ int hif_apps_grp_irqs_enable(struct hif_opaque_softc *hif_ctx)
 		if (!hif_exec)
 			continue;
 
-		hif_exec->irq_enable(hif_exec);
+		for (j = 0; j < hif_exec->numirq; j++)
+			pfrm_enable_irq(scn->qdf_dev->dev,
+					hif_exec->os_irq[j]);
 	}
 
 	return 0;
@@ -654,7 +656,7 @@ int hif_apps_grp_irqs_disable(struct hif_opaque_softc *hif_ctx)
 {
 	struct hif_exec_context *hif_exec;
 	struct hif_softc *scn;
-	int i;
+	int i, j;
 
 	QDF_BUG(hif_ctx);
 	scn = HIF_GET_SOFTC(hif_ctx);
@@ -666,7 +668,9 @@ int hif_apps_grp_irqs_disable(struct hif_opaque_softc *hif_ctx)
 		if (!hif_exec)
 			continue;
 
-		hif_exec->irq_disable(hif_exec);
+		for (j = 0; j < hif_exec->numirq; j++)
+			pfrm_disable_irq(scn->qdf_dev->dev,
+					 hif_exec->os_irq[j]);
 	}
 
 	return 0;