msm: msi: set enable_irq_wake for PCIe MSI IRQ

To guarantee PCIe client MSI can wake up APPS while its in LPM,
call enable_irq_wake on the parent MSI, PCIe MSI IRQ. Doing so
will make sure these IRQs are not disabled as part of APPS system
suspend.

Change-Id: Ifdb74068a26eca7028667310d62df8b974e58927
Signed-off-by: Tony Truong <truong@codeaurora.org>
Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
Signed-off-by: Yogesh Jadav <quic_yjadav@quicinc.com>
Signed-off-by: Joco Zhang <quic_pingshen@quicinc.com>
This commit is contained in:
Tony Truong 2021-02-11 09:00:06 -08:00 committed by Joco Zhang
parent 866694ce64
commit a0f4db3bb6

View File

@ -447,6 +447,14 @@ static int msm_msi_snps_irq_setup(struct msm_msi *msi)
goto free_irqs;
}
ret = enable_irq_wake(irq);
if (ret) {
dev_err(msi->dev,
"MSI: Unable to set enable_irq_wake for interrupt: %d: %d\n",
i, irq);
goto free_irq;
}
msi_grp = &msi->grps[i];
msi_grp->int_en_reg = msi->pcie_cfg +
PCIE_MSI_CTRL_INT_N_EN_OFFS(i);
@ -470,11 +478,14 @@ static int msm_msi_snps_irq_setup(struct msm_msi *msi)
return 0;
free_irq:
irq_dispose_mapping(irq);
free_irqs:
for (--i; i >= 0; i--) {
irq = msi->grps[i].irqs[0].hwirq;
irq_set_chained_handler_and_data(irq, NULL, NULL);
disable_irq_wake(irq);
irq_dispose_mapping(irq);
}
@ -498,6 +509,14 @@ static int msm_msi_qgic_irq_setup(struct msm_msi *msi)
goto free_irqs;
}
ret = enable_irq_wake(irq);
if (ret) {
dev_err(msi->dev,
"MSI: Unable to set enable_irq_wake for interrupt: %d: %d\n",
i, irq);
goto free_irq;
}
grp = i / MSI_IRQ_PER_GRP;
index = i % MSI_IRQ_PER_GRP;
msi_grp = &msi->grps[grp];
@ -514,6 +533,8 @@ static int msm_msi_qgic_irq_setup(struct msm_msi *msi)
return 0;
free_irq:
irq_dispose_mapping(irq);
free_irqs:
for (--i; i >= 0; i--) {
grp = i / MSI_IRQ_PER_GRP;
@ -521,6 +542,7 @@ static int msm_msi_qgic_irq_setup(struct msm_msi *msi)
irq = msi->grps[grp].irqs[index].hwirq;
irq_set_chained_handler_and_data(irq, NULL, NULL);
disable_irq_wake(irq);
irq_dispose_mapping(irq);
}