|
@@ -3020,6 +3020,7 @@ int hif_ce_msi_configure_irq_by_ceid(struct hif_softc *scn, int ce_id)
|
|
|
struct HIF_CE_state *ce_sc = HIF_GET_CE_STATE(scn);
|
|
|
struct hif_pci_softc *pci_sc = HIF_GET_PCI_SOFTC(scn);
|
|
|
int pci_slot;
|
|
|
+ unsigned long irq_flags;
|
|
|
|
|
|
if (ce_id >= CE_COUNT_MAX)
|
|
|
return -EINVAL;
|
|
@@ -3041,8 +3042,12 @@ int hif_ce_msi_configure_irq_by_ceid(struct hif_softc *scn, int ce_id)
|
|
|
pci_slot = hif_get_pci_slot(scn);
|
|
|
msi_data = irq_id + msi_irq_start;
|
|
|
irq = pld_get_msi_irq(scn->qdf_dev->dev, msi_data);
|
|
|
- hif_debug("%s: (ce_id %d, irq_id %d, msi_data %d, irq %d tasklet %pK)",
|
|
|
- __func__, ce_id, irq_id, msi_data, irq,
|
|
|
+ if (pld_is_one_msi(scn->qdf_dev->dev))
|
|
|
+ irq_flags = IRQF_SHARED | IRQF_NOBALANCING;
|
|
|
+ else
|
|
|
+ irq_flags = IRQF_SHARED;
|
|
|
+ hif_debug("%s: (ce_id %d, irq_id %d, msi_data %d, irq %d flag 0x%lx tasklet %pK)",
|
|
|
+ __func__, ce_id, irq_id, msi_data, irq, irq_flags,
|
|
|
&ce_sc->tasklets[ce_id]);
|
|
|
|
|
|
/* implies the ce is also initialized */
|
|
@@ -3056,7 +3061,7 @@ int hif_ce_msi_configure_irq_by_ceid(struct hif_softc *scn, int ce_id)
|
|
|
pci_slot, ce_id);
|
|
|
|
|
|
ret = pfrm_request_irq(scn->qdf_dev->dev,
|
|
|
- irq, hif_ce_interrupt_handler, IRQF_SHARED,
|
|
|
+ irq, hif_ce_interrupt_handler, irq_flags,
|
|
|
ce_irqname[pci_slot][ce_id],
|
|
|
&ce_sc->tasklets[ce_id]);
|
|
|
if (ret)
|
|
@@ -3430,6 +3435,7 @@ int hif_pci_configure_grp_irq(struct hif_softc *scn,
|
|
|
int irq = 0;
|
|
|
int j;
|
|
|
int pci_slot;
|
|
|
+ unsigned long irq_flags;
|
|
|
|
|
|
if (pld_get_enable_intx(scn->qdf_dev->dev))
|
|
|
return hif_grp_configure_legacyirq(scn, hif_ext_group);
|
|
@@ -3446,8 +3452,12 @@ int hif_pci_configure_grp_irq(struct hif_softc *scn,
|
|
|
qdf_dev_set_irq_status_flags(irq,
|
|
|
QDF_IRQ_DISABLE_UNLAZY);
|
|
|
|
|
|
- hif_debug("request_irq = %d for grp %d",
|
|
|
- irq, hif_ext_group->grp_id);
|
|
|
+ if (pld_is_one_msi(scn->qdf_dev->dev))
|
|
|
+ irq_flags = IRQF_SHARED | IRQF_NOBALANCING;
|
|
|
+ else
|
|
|
+ irq_flags = IRQF_SHARED | IRQF_NO_SUSPEND;
|
|
|
+ hif_debug("request_irq = %d for grp %d irq_flags 0x%lx",
|
|
|
+ irq, hif_ext_group->grp_id, irq_flags);
|
|
|
|
|
|
qdf_scnprintf(dp_irqname[pci_slot][hif_ext_group->grp_id],
|
|
|
DP_IRQ_NAME_LEN, "pci%u_wlan_grp_dp_%u",
|
|
@@ -3455,7 +3465,7 @@ int hif_pci_configure_grp_irq(struct hif_softc *scn,
|
|
|
ret = pfrm_request_irq(
|
|
|
scn->qdf_dev->dev, irq,
|
|
|
hif_ext_group_interrupt_handler,
|
|
|
- IRQF_SHARED | IRQF_NO_SUSPEND,
|
|
|
+ irq_flags,
|
|
|
dp_irqname[pci_slot][hif_ext_group->grp_id],
|
|
|
hif_ext_group);
|
|
|
if (ret) {
|