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:
@@ -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)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user