qcacmn: Request runtime PM resume after receiving WAKE MSI

For PCIe DRV (L1SS sleep) suspend, firmware will trigger a WAKE MSI
to wake up host so that request runtime PM resume for this case.

Change-Id: I959d3b1053b7aef5fe80889553958cf9394c8c38
CRs-fixed: 2450284
This commit is contained in:
Yue Ma
2019-05-09 14:47:55 -07:00
committed by nshrivas
parent 94395f626b
commit 2bdc2baea6
3 changed files with 16 additions and 0 deletions

View File

@@ -744,6 +744,7 @@ void hif_clear_stats(struct hif_opaque_softc *hif_ctx);
#ifdef FEATURE_RUNTIME_PM
struct hif_pm_runtime_lock;
void hif_fastpath_resume(struct hif_opaque_softc *hif_ctx);
int hif_pm_runtime_request_resume(struct hif_opaque_softc *hif_ctx);
int hif_pm_runtime_get(struct hif_opaque_softc *hif_ctx);
void hif_pm_runtime_get_noresume(struct hif_opaque_softc *hif_ctx);
int hif_pm_runtime_put(struct hif_opaque_softc *hif_ctx);
@@ -761,6 +762,9 @@ struct hif_pm_runtime_lock {
const char *name;
};
static inline void hif_fastpath_resume(struct hif_opaque_softc *hif_ctx) {}
static inline int
hif_pm_runtime_request_resume(struct hif_opaque_softc *hif_ctx)
{ return 0; }
static inline void hif_pm_runtime_get_noresume(struct hif_opaque_softc *hif_ctx)
{}

View File

@@ -1265,12 +1265,15 @@ irqreturn_t hif_wake_interrupt_handler(int irq, void *context)
irqreturn_t hif_wake_interrupt_handler(int irq, void *context)
{
struct hif_softc *scn = context;
struct hif_opaque_softc *hif_ctx = GET_HIF_OPAQUE_HDL(scn);
HIF_INFO("wake interrupt received on irq %d", irq);
if (scn->initial_wakeup_cb)
scn->initial_wakeup_cb(scn->initial_wakeup_priv);
hif_pm_runtime_request_resume(hif_ctx);
return IRQ_HANDLED;
}
#endif /* WLAN_SUSPEND_RESUME_TEST */

View File

@@ -3858,6 +3858,15 @@ void hif_pci_irq_disable(struct hif_softc *scn, int ce_id)
}
#ifdef FEATURE_RUNTIME_PM
int hif_pm_runtime_request_resume(struct hif_opaque_softc *hif_ctx)
{
struct hif_pci_softc *sc = HIF_GET_PCI_SOFTC(hif_ctx);
if (!sc)
return -EINVAL;
return hif_pm_request_resume(sc->dev);
}
void hif_pm_runtime_get_noresume(struct hif_opaque_softc *hif_ctx)
{