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:
parent
866694ce64
commit
a0f4db3bb6
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user