diff mbox

wlcore: use generic runtime pm calls for wowlan elp configuration

Message ID 1527146337-17562-1-git-send-email-eyalr@ti.com (mailing list archive)
State RFC
Delegated to: Kalle Valo
Headers show

Commit Message

Eyal Reizer May 24, 2018, 7:18 a.m. UTC
With runtime PM enabled, we can now use generic calls to
pm_generic_runtime_suspend and pm_generic_runtime_resume for enabling elp
during suspend when wowlan is enabled and waking the chip from elp
on resume.
remove the custom API that was used to ensure that the command
that is used to allow ELP during suspend is completed before the system
suspend.

Signed-off-by: Eyal Reizer <eyalr@ti.com>
---
Dependent on the Runtime PM support for wlcore patch set that was submitted 
by Tony Lindgren <tony@atomide.com>

 drivers/net/wireless/ti/wlcore/main.c | 51 +++++++++--------------------------
 1 file changed, 13 insertions(+), 38 deletions(-)

Comments

Kalle Valo May 24, 2018, 8:05 a.m. UTC | #1
Eyal Reizer <eyalreizer@gmail.com> writes:

> With runtime PM enabled, we can now use generic calls to
> pm_generic_runtime_suspend and pm_generic_runtime_resume for enabling elp
> during suspend when wowlan is enabled and waking the chip from elp
> on resume.
> remove the custom API that was used to ensure that the command
> that is used to allow ELP during suspend is completed before the system
> suspend.
>
> Signed-off-by: Eyal Reizer <eyalr@ti.com>
> ---
> Dependent on the Runtime PM support for wlcore patch set that was submitted 
> by Tony Lindgren <tony@atomide.com>

Ok, I'll drop this from my queue. Please resubmit once Tony's patches
are ready to apply (or Tony can include this patch in his patchset).

BTW, for me it would be a lot easier if you could mark patches like this
as RFT (Request For Test) or RFC (Request For Comments). That way I can
automatically drop the patch without sending any emails.
Reizer, Eyal May 24, 2018, 8:18 a.m. UTC | #2
> 
> > With runtime PM enabled, we can now use generic calls to
> > pm_generic_runtime_suspend and pm_generic_runtime_resume for
> enabling elp
> > during suspend when wowlan is enabled and waking the chip from elp
> > on resume.
> > remove the custom API that was used to ensure that the command
> > that is used to allow ELP during suspend is completed before the system
> > suspend.
> >
> > Signed-off-by: Eyal Reizer <eyalr@ti.com>
> > ---
> > Dependent on the Runtime PM support for wlcore patch set that was
> submitted
> > by Tony Lindgren <tony@atomide.com>
> 
> Ok, I'll drop this from my queue. Please resubmit once Tony's patches
> are ready to apply (or Tony can include this patch in his patchset).
> 
> BTW, for me it would be a lot easier if you could mark patches like this
> as RFT (Request For Test) or RFC (Request For Comments). That way I can
> automatically drop the patch without sending any emails.
> 

Understood. Thanks!

Best Regards,
Eyal
Tony Lindgren May 24, 2018, 1:21 p.m. UTC | #3
* Reizer, Eyal <eyalr@ti.com> [180524 08:20]:
> > 
> > > With runtime PM enabled, we can now use generic calls to
> > > pm_generic_runtime_suspend and pm_generic_runtime_resume for
> > enabling elp
> > > during suspend when wowlan is enabled and waking the chip from elp
> > > on resume.
> > > remove the custom API that was used to ensure that the command
> > > that is used to allow ELP during suspend is completed before the system
> > > suspend.
> > >
> > > Signed-off-by: Eyal Reizer <eyalr@ti.com>
> > > ---
> > > Dependent on the Runtime PM support for wlcore patch set that was
> > submitted
> > > by Tony Lindgren <tony@atomide.com>
> > 
> > Ok, I'll drop this from my queue. Please resubmit once Tony's patches
> > are ready to apply (or Tony can include this patch in his patchset).
> > 
> > BTW, for me it would be a lot easier if you could mark patches like this
> > as RFT (Request For Test) or RFC (Request For Comments). That way I can
> > automatically drop the patch without sending any emails.

Sorry for the noise, what seemed like a trivial change to use generic
runtime PM exposed few unexpected issues :) I'll do one more revision
of all the patches with RFT. Then when we are happy with that series,
I'll do one more patch to enable runtime PM autosuspend support to
avoid enabling and disabing the hardware constantly. And then after
that we should have the patches finally ready for merging.

Regards,

Tony
Kalle Valo May 24, 2018, 1:36 p.m. UTC | #4
Tony Lindgren <tony@atomide.com> writes:

> * Reizer, Eyal <eyalr@ti.com> [180524 08:20]:
>> > 
>> > > With runtime PM enabled, we can now use generic calls to
>> > > pm_generic_runtime_suspend and pm_generic_runtime_resume for
>> > enabling elp
>> > > during suspend when wowlan is enabled and waking the chip from elp
>> > > on resume.
>> > > remove the custom API that was used to ensure that the command
>> > > that is used to allow ELP during suspend is completed before the system
>> > > suspend.
>> > >
>> > > Signed-off-by: Eyal Reizer <eyalr@ti.com>
>> > > ---
>> > > Dependent on the Runtime PM support for wlcore patch set that was
>> > submitted
>> > > by Tony Lindgren <tony@atomide.com>
>> > 
>> > Ok, I'll drop this from my queue. Please resubmit once Tony's patches
>> > are ready to apply (or Tony can include this patch in his patchset).
>> > 
>> > BTW, for me it would be a lot easier if you could mark patches like this
>> > as RFT (Request For Test) or RFC (Request For Comments). That way I can
>> > automatically drop the patch without sending any emails.
>
> Sorry for the noise, what seemed like a trivial change to use generic
> runtime PM exposed few unexpected issues :) I'll do one more revision
> of all the patches with RFT. Then when we are happy with that series,
> I'll do one more patch to enable runtime PM autosuspend support to
> avoid enabling and disabing the hardware constantly. And then after
> that we should have the patches finally ready for merging.

Sounds good to me, kiitos :)
diff mbox

Patch

diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index 4c297aa..6c8e4fa 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -1001,24 +1001,6 @@  static int wlcore_fw_wakeup(struct wl1271 *wl)
 	return wlcore_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG, ELPCTRL_WAKE_UP);
 }
 
-static int wlcore_fw_sleep(struct wl1271 *wl)
-{
-	int ret;
-
-	mutex_lock(&wl->mutex);
-	ret = wlcore_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG, ELPCTRL_SLEEP);
-	if (ret < 0) {
-		wl12xx_queue_recovery_work(wl);
-		goto out;
-	}
-	set_bit(WL1271_FLAG_IN_ELP, &wl->flags);
-out:
-	mutex_unlock(&wl->mutex);
-	mdelay(WL1271_SUSPEND_SLEEP);
-
-	return 0;
-}
-
 static int wl1271_setup(struct wl1271 *wl)
 {
 	wl->raw_fw_status = kzalloc(wl->fw_status_len, GFP_KERNEL);
@@ -1742,6 +1724,7 @@  static int wl1271_op_suspend(struct ieee80211_hw *hw,
 {
 	struct wl1271 *wl = hw->priv;
 	struct wl12xx_vif *wlvif;
+	unsigned long flags;
 	int ret;
 
 	wl1271_debug(DEBUG_MAC80211, "mac80211 suspend wow=%d", !!wow);
@@ -1800,19 +1783,6 @@  static int wl1271_op_suspend(struct ieee80211_hw *hw,
 	/* flush any remaining work */
 	wl1271_debug(DEBUG_MAC80211, "flushing remaining works");
 
-	/*
-	 * disable and re-enable interrupts in order to flush
-	 * the threaded_irq
-	 */
-	wlcore_disable_interrupts(wl);
-
-	/*
-	 * set suspended flag to avoid triggering a new threaded_irq
-	 * work. no need for spinlock as interrupts are disabled.
-	 */
-	set_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
-
-	wlcore_enable_interrupts(wl);
 	flush_work(&wl->tx_work);
 
 	/*
@@ -1822,15 +1792,14 @@  static int wl1271_op_suspend(struct ieee80211_hw *hw,
 	cancel_delayed_work(&wl->tx_watchdog_work);
 
 	/*
-	 * Use an immediate call for allowing the firmware to go into power
-	 * save during suspend.
-	 * Using a workque for this last write was only hapenning on resume
-	 * leaving the firmware with power save disabled during suspend,
-	 * while consuming full power during wowlan suspend.
+	 * set suspended flag to avoid triggering a new threaded_irq
+	 * work.
 	 */
-	wlcore_fw_sleep(wl);
+	spin_lock_irqsave(&wl->wl_lock, flags);
+	set_bit(WL1271_FLAG_SUSPENDED, &wl->flags);
+	spin_unlock_irqrestore(&wl->wl_lock, flags);
 
-	return 0;
+	return pm_generic_runtime_suspend(wl->dev);
 }
 
 static int wl1271_op_resume(struct ieee80211_hw *hw)
@@ -1845,6 +1814,12 @@  static int wl1271_op_resume(struct ieee80211_hw *hw)
 		     wl->wow_enabled);
 	WARN_ON(!wl->wow_enabled);
 
+	ret = pm_generic_runtime_resume(wl->dev);
+	if (ret < 0) {
+		wl1271_error("ELP wakeup failure!");
+		goto out_sleep;
+	}
+
 	/*
 	 * re-enable irq_work enqueuing, and call irq_work directly if
 	 * there is a pending work.