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 #ifdef FEATURE_RUNTIME_PM
struct hif_pm_runtime_lock; struct hif_pm_runtime_lock;
void hif_fastpath_resume(struct hif_opaque_softc *hif_ctx); 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); int hif_pm_runtime_get(struct hif_opaque_softc *hif_ctx);
void hif_pm_runtime_get_noresume(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); int hif_pm_runtime_put(struct hif_opaque_softc *hif_ctx);
@@ -761,6 +762,9 @@ struct hif_pm_runtime_lock {
const char *name; const char *name;
}; };
static inline void hif_fastpath_resume(struct hif_opaque_softc *hif_ctx) {} 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) 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) irqreturn_t hif_wake_interrupt_handler(int irq, void *context)
{ {
struct hif_softc *scn = 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); HIF_INFO("wake interrupt received on irq %d", irq);
if (scn->initial_wakeup_cb) if (scn->initial_wakeup_cb)
scn->initial_wakeup_cb(scn->initial_wakeup_priv); scn->initial_wakeup_cb(scn->initial_wakeup_priv);
hif_pm_runtime_request_resume(hif_ctx);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
#endif /* WLAN_SUSPEND_RESUME_TEST */ #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 #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) void hif_pm_runtime_get_noresume(struct hif_opaque_softc *hif_ctx)
{ {