From: Tony Lindgren <tony@atomide.com> To: Kalle Valo <kvalo@codeaurora.org> Cc: Eyal Reizer <eyalr@ti.com>, Kishon Vijay Abraham I <kishon@ti.com>, Guy Mishol <guym@ti.com>, linux-wireless@vger.kernel.org, linux-omap@vger.kernel.org, Anders Roxell <anders.roxell@linaro.org>, John Stultz <john.stultz@linaro.org>, Ricardo Salveti <rsalveti@rsalveti.net>, Ulf Hansson <ulf.hansson@linaro.org> Subject: [PATCH] wlcore: Fix bringing up wlan0 again if powered down briefly Date: Mon, 17 Dec 2018 08:42:07 -0800 [thread overview] Message-ID: <20181217164207.20081-1-tony@atomide.com> (raw) At least HiKey board can fail to bring up wireless interface again if the interface is brought down and up with no delay inbetween. This can be done tested with: # while true; do ifconfig wlan0 down; ifconfig wlan0 up; done According to Ricardo Salveti <rsalveti@rsalveti.net>, we need to wait between 30 - 40 ms on HiKey. This seems to happen when we get -EBUSY returned by pm_runtime_put() basedon the check in rpm_check_suspend_allowed(). But as it still unclear if part of the delay needed is because of capacitance, let's always do a at least 50 ms msleep even if no -EBUSY is returned. Cc: Anders Roxell <anders.roxell@linaro.org> Cc: Eyal Reizer <eyalr@ti.com> Cc: John Stultz <john.stultz@linaro.org> Cc: Ricardo Salveti <rsalveti@rsalveti.net> Cc: Ulf Hansson <ulf.hansson@linaro.org> Reported-by: Ricardo Salveti <rsalveti@rsalveti.net> Fixes: 60f36637bbbd ("wlcore: sdio: allow pm to handle sdio power") Signed-off-by: Tony Lindgren <tony@atomide.com> --- Uffe, do you have some better ideas on how to fix this issue? --- drivers/net/wireless/ti/wlcore/sdio.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ti/wlcore/sdio.c b/drivers/net/wireless/ti/wlcore/sdio.c --- a/drivers/net/wireless/ti/wlcore/sdio.c +++ b/drivers/net/wireless/ti/wlcore/sdio.c @@ -174,7 +174,7 @@ static int wl12xx_sdio_power_off(struct wl12xx_sdio_glue *glue) { struct sdio_func *func = dev_to_sdio_func(glue->dev); struct mmc_card *card = func->card; - int error; + int error, retries = 5; sdio_claim_host(func); sdio_disable_func(func); @@ -188,6 +188,17 @@ static int wl12xx_sdio_power_off(struct wl12xx_sdio_glue *glue) return error; } + /* Wait a bit to ensure the card gets power off. Otherwise + * bringing interface down and up again may not power off the + * card inbetween. And then firmware load will fail on trying + * to bring the card up again. We need to wait between 30 - 40 + * ms for this based on measurements on HiKey board. + */ + do { + msleep(50); + } while (error == -EBUSY && !pm_runtime_suspended(&card->dev) && + retries--); + return 0; } -- 2.19.2
WARNING: multiple messages have this Message-ID (diff)
From: Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org> To: Kalle Valo <kvalo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> Cc: Eyal Reizer <eyalr-l0cyMroinI0@public.gmane.org>, Kishon Vijay Abraham I <kishon-l0cyMroinI0@public.gmane.org>, Guy Mishol <guym-l0cyMroinI0@public.gmane.org>, linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Anders Roxell <anders.roxell-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>, John Stultz <john.stultz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>, Ricardo Salveti <rsalveti-3fX5ma9fJBTk1uMJSBkQmQ@public.gmane.org>, Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> Subject: [PATCH] wlcore: Fix bringing up wlan0 again if powered down briefly Date: Mon, 17 Dec 2018 08:42:07 -0800 [thread overview] Message-ID: <20181217164207.20081-1-tony@atomide.com> (raw) At least HiKey board can fail to bring up wireless interface again if the interface is brought down and up with no delay inbetween. This can be done tested with: # while true; do ifconfig wlan0 down; ifconfig wlan0 up; done According to Ricardo Salveti <rsalveti-3fX5ma9fJBTk1uMJSBkQmQ@public.gmane.org>, we need to wait between 30 - 40 ms on HiKey. This seems to happen when we get -EBUSY returned by pm_runtime_put() basedon the check in rpm_check_suspend_allowed(). But as it still unclear if part of the delay needed is because of capacitance, let's always do a at least 50 ms msleep even if no -EBUSY is returned. Cc: Anders Roxell <anders.roxell-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> Cc: Eyal Reizer <eyalr-l0cyMroinI0@public.gmane.org> Cc: John Stultz <john.stultz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> Cc: Ricardo Salveti <rsalveti-3fX5ma9fJBTk1uMJSBkQmQ@public.gmane.org> Cc: Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> Reported-by: Ricardo Salveti <rsalveti-3fX5ma9fJBTk1uMJSBkQmQ@public.gmane.org> Fixes: 60f36637bbbd ("wlcore: sdio: allow pm to handle sdio power") Signed-off-by: Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org> --- Uffe, do you have some better ideas on how to fix this issue? --- drivers/net/wireless/ti/wlcore/sdio.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ti/wlcore/sdio.c b/drivers/net/wireless/ti/wlcore/sdio.c --- a/drivers/net/wireless/ti/wlcore/sdio.c +++ b/drivers/net/wireless/ti/wlcore/sdio.c @@ -174,7 +174,7 @@ static int wl12xx_sdio_power_off(struct wl12xx_sdio_glue *glue) { struct sdio_func *func = dev_to_sdio_func(glue->dev); struct mmc_card *card = func->card; - int error; + int error, retries = 5; sdio_claim_host(func); sdio_disable_func(func); @@ -188,6 +188,17 @@ static int wl12xx_sdio_power_off(struct wl12xx_sdio_glue *glue) return error; } + /* Wait a bit to ensure the card gets power off. Otherwise + * bringing interface down and up again may not power off the + * card inbetween. And then firmware load will fail on trying + * to bring the card up again. We need to wait between 30 - 40 + * ms for this based on measurements on HiKey board. + */ + do { + msleep(50); + } while (error == -EBUSY && !pm_runtime_suspended(&card->dev) && + retries--); + return 0; } -- 2.19.2
next reply other threads:[~2018-12-17 16:42 UTC|newest] Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-12-17 16:42 Tony Lindgren [this message] 2018-12-17 16:42 ` [PATCH] wlcore: Fix bringing up wlan0 again if powered down briefly Tony Lindgren 2018-12-18 1:06 ` Ricardo Salveti 2018-12-18 1:06 ` Ricardo Salveti 2018-12-18 12:34 ` Ulf Hansson 2018-12-18 12:34 ` Ulf Hansson 2018-12-18 15:54 ` Tony Lindgren 2018-12-18 15:54 ` Tony Lindgren 2018-12-20 10:14 ` Ulf Hansson 2018-12-20 10:14 ` Ulf Hansson 2018-12-20 23:14 ` Tony Lindgren 2018-12-20 23:14 ` Tony Lindgren 2018-12-23 7:38 ` [EXTERNAL] " Reizer, Eyal 2018-12-23 7:38 ` Reizer, Eyal 2018-12-23 16:02 ` Tony Lindgren 2018-12-23 16:02 ` Tony Lindgren 2018-12-28 11:01 ` Ulf Hansson 2018-12-28 11:01 ` Ulf Hansson 2018-12-28 19:59 ` Tony Lindgren 2018-12-28 19:59 ` Tony Lindgren 2019-01-02 12:01 ` Ulf Hansson 2019-01-02 12:01 ` Ulf Hansson 2019-01-07 15:18 ` Tony Lindgren 2019-01-07 15:18 ` Tony Lindgren 2019-01-07 16:12 ` Kalle Valo 2019-01-07 16:12 ` Kalle Valo 2019-01-14 13:47 ` Ulf Hansson 2019-01-14 13:47 ` Ulf Hansson 2018-12-28 9:48 ` Ulf Hansson 2018-12-28 9:48 ` Ulf Hansson
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=20181217164207.20081-1-tony@atomide.com \ --to=tony@atomide.com \ --cc=anders.roxell@linaro.org \ --cc=eyalr@ti.com \ --cc=guym@ti.com \ --cc=john.stultz@linaro.org \ --cc=kishon@ti.com \ --cc=kvalo@codeaurora.org \ --cc=linux-omap@vger.kernel.org \ --cc=linux-wireless@vger.kernel.org \ --cc=rsalveti@rsalveti.net \ --cc=ulf.hansson@linaro.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: linkBe 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.