From: Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
To: "Reizer, Eyal" <eyalr-l0cyMroinI0@public.gmane.org>
Cc: Kalle Valo <kvalo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
KISHON VIJAY ABRAHAM <kishon-l0cyMroinI0@public.gmane.org>,
"Mishol, Guy" <guym-l0cyMroinI0@public.gmane.org>,
Luca Coelho
<luciano.coelho-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
"Hahn, Maital" <maitalm-l0cyMroinI0@public.gmane.org>,
"Altshul, Maxim" <maxim.altshul-l0cyMroinI0@public.gmane.org>,
"linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"Loewy, Chen" <c-loewy-l0cyMroinI0@public.gmane.org>
Subject: Re: [EXTERNAL] [PATCHv2 0/5] Runtime PM support for wlcore
Date: Tue, 22 May 2018 10:23:43 -0700 [thread overview]
Message-ID: <20180522172343.GK98604@atomide.com> (raw)
In-Reply-To: <20180522150111.GJ98604-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
* Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org> [180522 15:03]:
> * Reizer, Eyal <eyalr-l0cyMroinI0@public.gmane.org> [180522 14:07]:
> > > > >
> > > > > OK try replacing the pm_runtime_put_noidle() above with just
> > > > > pm_runtime_put_sync(). The reason why I put noidle there was the
> > > > > wlcore_fw_sleep() call, with that gone put_sync should do the trick.
> > > > >
> > > >
> > > > I have tried that already. Same problem. The last call to:
> > > > ret = wlcore_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG, ELPCTRL_SLEEP)
> > > >
> > > > which allows the firmware to get into ELP state during wowlan suspend is
> > > > only completing after system resume for some unknown reason...
> > >
> > > Hmm maybe try also adding wl1271_power_off(wl) after put_sync()?
> > >
> >
> > No, we don't want to power off the chip in wowlan mode.
> > We power it of only during standard suspend.
> >
> > The trick is that it stays on during suspend and can be used
> > As a wakeup source to the host on specific packets received by
> > The firmware over the air.
>
> Oh right, then in theory pm_runtime_put_sync() should do the
> here.
OK got my beaglebone green wireless to wake from suspend to UART
after doing:
# echo N > /sys/module/printk/parameters/console_suspend
No idea why that is needed.. Not needed on beaglebone black here.
Here's a modified version of your patch, does that put wlcore to
idle with wowlan during suspend for you?
Regards,
Tony
8< ------------------------------
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -998,24 +998,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);
@@ -1738,6 +1720,7 @@ static int __maybe_unused 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);
@@ -1785,7 +1768,6 @@ static int __maybe_unused wl1271_op_suspend(struct ieee80211_hw *hw,
goto out_sleep;
out_sleep:
- pm_runtime_put_noidle(wl->dev);
mutex_unlock(&wl->mutex);
if (ret < 0) {
@@ -1795,20 +1777,6 @@ static int __maybe_unused 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);
/*
@@ -1817,14 +1785,16 @@ static int __maybe_unused 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);
+
+ pm_runtime_put_sync(wl->dev);
return 0;
}
--
2.17.0
WARNING: multiple messages have this Message-ID (diff)
From: Tony Lindgren <tony@atomide.com>
To: "Reizer, Eyal" <eyalr@ti.com>
Cc: Kalle Valo <kvalo@codeaurora.org>,
KISHON VIJAY ABRAHAM <kishon@ti.com>, "Mishol, Guy" <guym@ti.com>,
Luca Coelho <luciano.coelho@intel.com>,
"Hahn, Maital" <maitalm@ti.com>,
"Altshul, Maxim" <maxim.altshul@ti.com>,
"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"Loewy, Chen" <c-loewy@ti.com>
Subject: Re: [EXTERNAL] [PATCHv2 0/5] Runtime PM support for wlcore
Date: Tue, 22 May 2018 10:23:43 -0700 [thread overview]
Message-ID: <20180522172343.GK98604@atomide.com> (raw)
In-Reply-To: <20180522150111.GJ98604@atomide.com>
* Tony Lindgren <tony@atomide.com> [180522 15:03]:
> * Reizer, Eyal <eyalr@ti.com> [180522 14:07]:
> > > > >
> > > > > OK try replacing the pm_runtime_put_noidle() above with just
> > > > > pm_runtime_put_sync(). The reason why I put noidle there was the
> > > > > wlcore_fw_sleep() call, with that gone put_sync should do the trick.
> > > > >
> > > >
> > > > I have tried that already. Same problem. The last call to:
> > > > ret = wlcore_raw_write32(wl, HW_ACCESS_ELP_CTRL_REG, ELPCTRL_SLEEP)
> > > >
> > > > which allows the firmware to get into ELP state during wowlan suspend is
> > > > only completing after system resume for some unknown reason...
> > >
> > > Hmm maybe try also adding wl1271_power_off(wl) after put_sync()?
> > >
> >
> > No, we don't want to power off the chip in wowlan mode.
> > We power it of only during standard suspend.
> >
> > The trick is that it stays on during suspend and can be used
> > As a wakeup source to the host on specific packets received by
> > The firmware over the air.
>
> Oh right, then in theory pm_runtime_put_sync() should do the
> here.
OK got my beaglebone green wireless to wake from suspend to UART
after doing:
# echo N > /sys/module/printk/parameters/console_suspend
No idea why that is needed.. Not needed on beaglebone black here.
Here's a modified version of your patch, does that put wlcore to
idle with wowlan during suspend for you?
Regards,
Tony
8< ------------------------------
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -998,24 +998,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);
@@ -1738,6 +1720,7 @@ static int __maybe_unused 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);
@@ -1785,7 +1768,6 @@ static int __maybe_unused wl1271_op_suspend(struct ieee80211_hw *hw,
goto out_sleep;
out_sleep:
- pm_runtime_put_noidle(wl->dev);
mutex_unlock(&wl->mutex);
if (ret < 0) {
@@ -1795,20 +1777,6 @@ static int __maybe_unused 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);
/*
@@ -1817,14 +1785,16 @@ static int __maybe_unused 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);
+
+ pm_runtime_put_sync(wl->dev);
return 0;
}
--
2.17.0
next prev parent reply other threads:[~2018-05-22 17:23 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-17 18:50 [PATCHv2 0/5] Runtime PM support for wlcore Tony Lindgren
2018-05-17 18:50 ` Tony Lindgren
[not found] ` <20180517185029.71716-1-tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2018-05-17 18:50 ` [PATCH 1/5] wlcore: Add missing PM call for wlcore_cmd_wait_for_event_or_timeout() Tony Lindgren
2018-05-17 18:50 ` Tony Lindgren
2018-05-17 18:50 ` [PATCH 2/5] wlcore: Make sure PM calls are paired Tony Lindgren
2018-05-17 18:50 ` Tony Lindgren
2018-05-17 18:50 ` [PATCH 3/5] wlcore: Add support for runtime PM Tony Lindgren
2018-05-17 18:50 ` Tony Lindgren
2018-05-17 18:50 ` [PATCH 4/5] wlcore: Fix misplaced PM call for scan_complete_work() Tony Lindgren
2018-05-17 18:50 ` Tony Lindgren
2018-05-17 18:50 ` [PATCH 5/5] wlcore: sdio: Warn about runtime PM suspend errors Tony Lindgren
2018-05-17 18:50 ` Tony Lindgren
[not found] ` <20180517185029.71716-6-tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2018-05-21 22:32 ` Tony Lindgren
2018-05-21 22:32 ` Tony Lindgren
2018-05-17 18:59 ` [PATCHv2 0/5] Runtime PM support for wlcore Tony Lindgren
2018-05-17 18:59 ` Tony Lindgren
2018-05-21 7:29 ` [EXTERNAL] " Reizer, Eyal
2018-05-21 7:29 ` Reizer, Eyal
[not found] ` <bff51dcc6fd441d9ab42db273219aaf4-l0cyMroinI0@public.gmane.org>
2018-05-21 16:38 ` Tony Lindgren
2018-05-21 16:38 ` Tony Lindgren
[not found] ` <20180521163830.GZ98604-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2018-05-21 22:43 ` Tony Lindgren
2018-05-21 22:43 ` Tony Lindgren
[not found] ` <20180521224339.GD98604-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2018-05-22 6:40 ` Reizer, Eyal
2018-05-22 6:40 ` Reizer, Eyal
[not found] ` <3793c7c0d2b140389c7b92a407125650-l0cyMroinI0@public.gmane.org>
2018-05-22 13:50 ` Tony Lindgren
2018-05-22 13:50 ` Tony Lindgren
2018-05-22 13:26 ` Reizer, Eyal
2018-05-22 13:26 ` Reizer, Eyal
[not found] ` <38ddca4c73bb4dbf835a84133035dbfb-l0cyMroinI0@public.gmane.org>
2018-05-22 13:31 ` Tony Lindgren
2018-05-22 13:31 ` Tony Lindgren
[not found] ` <20180522133158.GE98604-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2018-05-22 13:48 ` Reizer, Eyal
2018-05-22 13:48 ` Reizer, Eyal
[not found] ` <eae7c720c09549f0b4ff83f88ad6959b-l0cyMroinI0@public.gmane.org>
2018-05-22 13:55 ` Tony Lindgren
2018-05-22 13:55 ` Tony Lindgren
[not found] ` <20180522135511.GI98604-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2018-05-22 14:05 ` Reizer, Eyal
2018-05-22 14:05 ` Reizer, Eyal
[not found] ` <92eff64ea59740bfa395b53ff22c07d3-l0cyMroinI0@public.gmane.org>
2018-05-22 15:01 ` Tony Lindgren
2018-05-22 15:01 ` Tony Lindgren
[not found] ` <20180522150111.GJ98604-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2018-05-22 17:23 ` Tony Lindgren [this message]
2018-05-22 17:23 ` Tony Lindgren
[not found] ` <20180522172343.GK98604-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2018-05-23 7:04 ` Reizer, Eyal
2018-05-23 7:04 ` Reizer, Eyal
2018-05-22 8:02 ` Kalle Valo
2018-05-22 8:02 ` Kalle Valo
[not found] ` <87efi4f78j.fsf-HodKDYzPHsUD5k0oWYwrnHL1okKdlPRT@public.gmane.org>
2018-05-22 13:37 ` Tony Lindgren
2018-05-22 13:37 ` Tony Lindgren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180522172343.GK98604@atomide.com \
--to=tony-4v6ys6ai5vpbdgjk7y7tuq@public.gmane.org \
--cc=c-loewy-l0cyMroinI0@public.gmane.org \
--cc=eyalr-l0cyMroinI0@public.gmane.org \
--cc=guym-l0cyMroinI0@public.gmane.org \
--cc=kishon-l0cyMroinI0@public.gmane.org \
--cc=kvalo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=luciano.coelho-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=maitalm-l0cyMroinI0@public.gmane.org \
--cc=maxim.altshul-l0cyMroinI0@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.