LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep
@ 2019-05-17 22:54 Douglas Anderson
  2019-05-17 22:54 ` [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354 Douglas Anderson
                   ` (4 more replies)
  0 siblings, 5 replies; 25+ messages in thread
From: Douglas Anderson @ 2019-05-17 22:54 UTC (permalink / raw)
  To: Ulf Hansson, Kalle Valo, Adrian Hunter, Arend van Spriel
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Douglas Anderson, linux-mmc,
	Shawn Lin, brcm80211-dev-list, YueHaibing, Hante Meuleman,
	Martin Hicks, Ritesh Harjani, Michael Trimarchi, Wolfram Sang,
	Franky Lin, Jiong Wu, brcm80211-dev-list.pdl, David S. Miller,
	netdev, linux-wireless, linux-kernel, Naveen Gupta,
	Madhan Mohan R, Avri Altman

This series attempts to deal better with the expected transmission
errors that we get when waking up the SDIO-based WiFi on
rk3288-veyron-minnie, rk3288-veyron-speedy, and rk3288-veyron-mickey.

Some details about those errors can be found in
<https://crbug.com/960222>, but to summarize it here: if we try to
send the wakeup command to the WiFi card at the same time it has
decided to wake up itself then it will behave badly on the SDIO bus.
This can cause timeouts or CRC errors.

When I tested on 4.19 and 4.20 these CRC errors can be seen to cause
re-tuning.  Since I am currently developing on 4.19 this was the
original problem I attempted to solve.

On mainline it turns out that you don't see the retuning errors but
you see tons of spam about timeouts trying to wakeup from sleep.  I
tracked down the commit that was causing that and have partially
reverted it here.  I have no real knowledge about Broadcom WiFi, but
the commit that was causing problems sounds (from the descriptioin) to
be a hack commit penalizing all Broadcom WiFi users because of a bug
in a Cypress SD controller.  I will let others comment if this is
truly the case and, if so, what the right solution should be.


Douglas Anderson (3):
  brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  mmc: core: API for temporarily disabling auto-retuning due to errors
  brcmfmac: sdio: Disable auto-tuning around commands expected to fail

 drivers/mmc/core/core.c                       | 27 +++++++++++++++++--
 .../broadcom/brcm80211/brcmfmac/sdio.c        |  6 +++--
 include/linux/mmc/core.h                      |  2 ++
 include/linux/mmc/host.h                      |  1 +
 4 files changed, 32 insertions(+), 4 deletions(-)

-- 
2.21.0.1020.gf2820cf01a-goog


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-05-17 22:54 [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Douglas Anderson
@ 2019-05-17 22:54 ` Douglas Anderson
  2019-05-20  8:09   ` Arend Van Spriel
                     ` (2 more replies)
  2019-05-17 22:54 ` [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors Douglas Anderson
                   ` (3 subsequent siblings)
  4 siblings, 3 replies; 25+ messages in thread
From: Douglas Anderson @ 2019-05-17 22:54 UTC (permalink / raw)
  To: Ulf Hansson, Kalle Valo, Adrian Hunter, Arend van Spriel
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Douglas Anderson,
	brcm80211-dev-list.pdl, Franky Lin, netdev, linux-wireless,
	linux-kernel, Madhan Mohan R, Hante Meuleman, Naveen Gupta,
	brcm80211-dev-list, YueHaibing, David S. Miller

In commit 29f6589140a1 ("brcmfmac: disable command decode in
sdio_aos") we disabled something called "command decode in sdio_aos"
for a whole bunch of Broadcom SDIO WiFi parts.

After that patch landed I find that my kernel log on
rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
  brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep state -110

This seems to happen every time the Broadcom WiFi transitions out of
sleep mode.  Reverting the part of the commit that affects the WiFi on
my boards fixes the problem for me, so that's what this patch does.

Note that, in general, the justification in the original commit seemed
a little weak.  It looked like someone was testing on a SD card
controller that would sometimes die if there were CRC errors on the
bus.  This used to happen back in early days of dw_mmc (the controller
on my boards), but we fixed it.  Disabling a feature on all boards
just because one SD card controller is broken seems bad.  ...so
instead of just this patch possibly the right thing to do is to fully
revert the original commit.

Fixes: 29f6589140a1 ("brcmfmac: disable command decode in sdio_aos")
Signed-off-by: Douglas Anderson <dianders@chromium.org>
---

 drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 22b73da42822..3fd2d58a3c88 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -3378,8 +3378,7 @@ static bool brcmf_sdio_aos_no_decode(struct brcmf_sdio *bus)
 	if (bus->ci->chip == CY_CC_43012_CHIP_ID ||
 	    bus->ci->chip == CY_CC_4373_CHIP_ID ||
 	    bus->ci->chip == BRCM_CC_4339_CHIP_ID ||
-	    bus->ci->chip == BRCM_CC_4345_CHIP_ID ||
-	    bus->ci->chip == BRCM_CC_4354_CHIP_ID)
+	    bus->ci->chip == BRCM_CC_4345_CHIP_ID)
 		return true;
 	else
 		return false;
-- 
2.21.0.1020.gf2820cf01a-goog


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors
  2019-05-17 22:54 [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Douglas Anderson
  2019-05-17 22:54 ` [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354 Douglas Anderson
@ 2019-05-17 22:54 ` Douglas Anderson
  2019-05-19  9:06   ` Wolfram Sang
  2019-05-26 18:42   ` Arend Van Spriel
  2019-05-17 22:54 ` [PATCH 3/3] brcmfmac: sdio: Disable auto-tuning around commands expected to fail Douglas Anderson
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 25+ messages in thread
From: Douglas Anderson @ 2019-05-17 22:54 UTC (permalink / raw)
  To: Ulf Hansson, Kalle Valo, Adrian Hunter, Arend van Spriel
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Douglas Anderson, Jiong Wu,
	Ritesh Harjani, linux-mmc, linux-kernel, Shawn Lin, Wolfram Sang,
	Avri Altman, Martin Hicks

Normally when the MMC core sees an "-EILSEQ" error returned by a host
controller then it will trigger a retuning of the card.  This is
generally a good idea.

However, if a command is expected to sometimes cause transfer errors
then these transfer errors shouldn't cause a re-tuning.  This
re-tuning will be a needless waste of time.  One example case where a
transfer is expected to cause errors is when transitioning between
sleep and active state on certain Broadcom WiFi cards.  Specifically
if the card was already transitioning between states when the command
was sent it could cause an error on the SDIO bus.

Let's add an API that the SDIO card drivers can call that will
temporarily disable the auto-tuning functionality.  Then we can add a
call to this in the Broadcom WiFi driver and any other driver that
might have similar needs.

Without this change on rk3288-veyron-minnie I periodically see this in
the logs of a machine just sitting there idle:
  dwmmc_rockchip ff0d0000.dwmmc: Successfully tuned phase to XYZ

Fixes: bd11e8bd03ca ("mmc: core: Flag re-tuning is needed on CRC errors")
Signed-off-by: Douglas Anderson <dianders@chromium.org>
---
Note that are are a whole boatload of different ways that we could
provide an API for the Broadcom WiFi SDIO driver.  This patch
illustrates one way but if maintainers feel strongly that this is too
ugly and have a better idea then I can give it a shot too.  From a
purist point of view I kinda felt that the "expect errors" really
belonged as part of the mmc_request structure, but getting it into
there meant changing a whole pile of core SD/MMC APIs.  Simply adding
it to the host seemed to match the current style better and was a less
intrusive change.

 drivers/mmc/core/core.c  | 27 +++++++++++++++++++++++++--
 include/linux/mmc/core.h |  2 ++
 include/linux/mmc/host.h |  1 +
 3 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 6db36dc870b5..ba4f71aa8cd9 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -144,8 +144,9 @@ void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
 	int err = cmd->error;
 
 	/* Flag re-tuning needed on CRC errors */
-	if ((cmd->opcode != MMC_SEND_TUNING_BLOCK &&
-	    cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200) &&
+	if (cmd->opcode != MMC_SEND_TUNING_BLOCK &&
+	    cmd->opcode != MMC_SEND_TUNING_BLOCK_HS200 &&
+	    !host->expect_errors &&
 	    (err == -EILSEQ || (mrq->sbc && mrq->sbc->error == -EILSEQ) ||
 	    (mrq->data && mrq->data->error == -EILSEQ) ||
 	    (mrq->stop && mrq->stop->error == -EILSEQ)))
@@ -2163,6 +2164,28 @@ int mmc_sw_reset(struct mmc_host *host)
 }
 EXPORT_SYMBOL(mmc_sw_reset);
 
+void mmc_expect_errors_begin(struct mmc_host *host)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&host->lock, flags);
+	WARN_ON(host->expect_errors);
+	host->expect_errors = true;
+	spin_unlock_irqrestore(&host->lock, flags);
+}
+EXPORT_SYMBOL_GPL(mmc_expect_errors_begin);
+
+void mmc_expect_errors_end(struct mmc_host *host)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&host->lock, flags);
+	WARN_ON(!host->expect_errors);
+	host->expect_errors = false;
+	spin_unlock_irqrestore(&host->lock, flags);
+}
+EXPORT_SYMBOL_GPL(mmc_expect_errors_end);
+
 static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)
 {
 	host->f_init = freq;
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h
index 134a6483347a..02a13abf0cda 100644
--- a/include/linux/mmc/core.h
+++ b/include/linux/mmc/core.h
@@ -178,6 +178,8 @@ int mmc_wait_for_cmd(struct mmc_host *host, struct mmc_command *cmd,
 
 int mmc_hw_reset(struct mmc_host *host);
 int mmc_sw_reset(struct mmc_host *host);
+void mmc_expect_errors_begin(struct mmc_host *host);
+void mmc_expect_errors_end(struct mmc_host *host);
 void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card);
 
 #endif /* LINUX_MMC_CORE_H */
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 43d0f0c496f6..8d553fb8c834 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -398,6 +398,7 @@ struct mmc_host {
 	unsigned int		retune_now:1;	/* do re-tuning at next req */
 	unsigned int		retune_paused:1; /* re-tuning is temporarily disabled */
 	unsigned int		use_blk_mq:1;	/* use blk-mq */
+	unsigned int		expect_errors:1; /* don't trigger retune upon errors */
 
 	int			rescan_disable;	/* disable card detection */
 	int			rescan_entered;	/* used with nonremovable devices */
-- 
2.21.0.1020.gf2820cf01a-goog


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 3/3] brcmfmac: sdio: Disable auto-tuning around commands expected to fail
  2019-05-17 22:54 [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Douglas Anderson
  2019-05-17 22:54 ` [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354 Douglas Anderson
  2019-05-17 22:54 ` [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors Douglas Anderson
@ 2019-05-17 22:54 ` Douglas Anderson
  2019-05-18 15:09 ` [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Avri Altman
  2019-05-20  8:55 ` Arend Van Spriel
  4 siblings, 0 replies; 25+ messages in thread
From: Douglas Anderson @ 2019-05-17 22:54 UTC (permalink / raw)
  To: Ulf Hansson, Kalle Valo, Adrian Hunter, Arend van Spriel
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Douglas Anderson,
	brcm80211-dev-list.pdl, David S. Miller, Franky Lin, netdev,
	linux-wireless, linux-kernel, Hante Meuleman, Naveen Gupta,
	brcm80211-dev-list, YueHaibing, Michael Trimarchi

There are certain cases, notably when transitioning between sleep and
active state, when Broadcom SDIO WiFi cards will produce errors on the
SDIO bus.  This is evident from the source code where you can see that
we try commands in a loop until we either get success or we've tried
too many times.  The comment in the code reinforces this by saying
"just one write attempt may fail"

Unfortunately these failures sometimes end up causing an "-EILSEQ"
back to the core which triggers a retuning of the SDIO card and that
blocks all traffic to the card until it's done.

Let's disable retuning around the commands we expect might fail.

Fixes: bd11e8bd03ca ("mmc: core: Flag re-tuning is needed on CRC errors")
Signed-off-by: Douglas Anderson <dianders@chromium.org>
---

 drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 3fd2d58a3c88..c09bb8965487 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -27,6 +27,7 @@
 #include <linux/mmc/sdio_ids.h>
 #include <linux/mmc/sdio_func.h>
 #include <linux/mmc/card.h>
+#include <linux/mmc/core.h>
 #include <linux/semaphore.h>
 #include <linux/firmware.h>
 #include <linux/module.h>
@@ -708,6 +709,7 @@ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
 		bmask = SBSDIO_FUNC1_SLEEPCSR_KSO_MASK;
 	}
 
+	mmc_expect_errors_begin(bus->sdiodev->func1->card->host);
 	do {
 		/* reliable KSO bit set/clr:
 		 * the sdiod sleep write access is synced to PMU 32khz clk
@@ -730,6 +732,7 @@ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
 				   &err);
 
 	} while (try_cnt++ < MAX_KSO_ATTEMPTS);
+	mmc_expect_errors_end(bus->sdiodev->func1->card->host);
 
 	if (try_cnt > 2)
 		brcmf_dbg(SDIO, "try_cnt=%d rd_val=0x%x err=%d\n", try_cnt,
-- 
2.21.0.1020.gf2820cf01a-goog


^ permalink raw reply	[flat|nested] 25+ messages in thread

* RE: [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep
  2019-05-17 22:54 [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Douglas Anderson
                   ` (2 preceding siblings ...)
  2019-05-17 22:54 ` [PATCH 3/3] brcmfmac: sdio: Disable auto-tuning around commands expected to fail Douglas Anderson
@ 2019-05-18 15:09 ` Avri Altman
  2019-05-21  0:23   ` Brian Norris
  2019-05-20  8:55 ` Arend Van Spriel
  4 siblings, 1 reply; 25+ messages in thread
From: Avri Altman @ 2019-05-18 15:09 UTC (permalink / raw)
  To: Douglas Anderson, Ulf Hansson, Kalle Valo, Adrian Hunter,
	Arend van Spriel
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, linux-mmc, Shawn Lin,
	brcm80211-dev-list, YueHaibing, Hante Meuleman, Martin Hicks,
	Ritesh Harjani, Michael Trimarchi, Wolfram Sang, Franky Lin,
	Jiong Wu, brcm80211-dev-list.pdl, David S. Miller, netdev,
	linux-wireless, linux-kernel, Naveen Gupta, Madhan Mohan R

> 
> This series attempts to deal better with the expected transmission
> errors that we get when waking up the SDIO-based WiFi on
> rk3288-veyron-minnie, rk3288-veyron-speedy, and rk3288-veyron-mickey.
> 
> Some details about those errors can be found in
> <https://crbug.com/960222>, but to summarize it here: if we try to
> send the wakeup command to the WiFi card at the same time it has
> decided to wake up itself then it will behave badly on the SDIO bus.
> This can cause timeouts or CRC errors.
Wake-up itself: as part of a WoWlan, or d0i3?
Looks like this calls for a wifi driver fix, and not WA in the mmc driver.

Thanks,
Avri

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors
  2019-05-17 22:54 ` [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors Douglas Anderson
@ 2019-05-19  9:06   ` Wolfram Sang
  2019-05-20  8:46     ` Arend Van Spriel
  2019-05-26 18:42   ` Arend Van Spriel
  1 sibling, 1 reply; 25+ messages in thread
From: Wolfram Sang @ 2019-05-19  9:06 UTC (permalink / raw)
  To: Douglas Anderson
  Cc: Ulf Hansson, Kalle Valo, Adrian Hunter, Arend van Spriel,
	linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Jiong Wu, Ritesh Harjani, linux-mmc,
	linux-kernel, Shawn Lin, Wolfram Sang, Avri Altman, Martin Hicks

[-- Attachment #1: Type: text/plain, Size: 361 bytes --]


> Let's add an API that the SDIO card drivers can call that will
> temporarily disable the auto-tuning functionality.  Then we can add a
> call to this in the Broadcom WiFi driver and any other driver that
> might have similar needs.

Can't you fix the WiFi driver to return something else than -EILSEQ
before calling mmc_request_done() to skip the retuning?


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-05-17 22:54 ` [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354 Douglas Anderson
@ 2019-05-20  8:09   ` Arend Van Spriel
  2019-05-20 18:20     ` Doug Anderson
  2019-05-28 12:18   ` Kalle Valo
       [not found]   ` <20190528121833.7D3A460A00@smtp.codeaurora.org>
  2 siblings, 1 reply; 25+ messages in thread
From: Arend Van Spriel @ 2019-05-20  8:09 UTC (permalink / raw)
  To: Douglas Anderson, Ulf Hansson, Kalle Valo, Adrian Hunter
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, brcm80211-dev-list.pdl, Franky Lin,
	netdev, linux-wireless, linux-kernel, Hante Meuleman,
	Naveen Gupta, brcm80211-dev-list, YueHaibing, David S. Miller



On 5/18/2019 12:54 AM, Douglas Anderson wrote:
> In commit 29f6589140a1 ("brcmfmac: disable command decode in
> sdio_aos") we disabled something called "command decode in sdio_aos"
> for a whole bunch of Broadcom SDIO WiFi parts.
> 
> After that patch landed I find that my kernel log on
> rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
>    brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep state -110
> 
> This seems to happen every time the Broadcom WiFi transitions out of
> sleep mode.  Reverting the part of the commit that affects the WiFi on
> my boards fixes the problem for me, so that's what this patch does.

This sounds very similar to the issue we had during integration of wifi 
on rk3288 chromebooks years ago.

> Note that, in general, the justification in the original commit seemed
> a little weak.  It looked like someone was testing on a SD card
> controller that would sometimes die if there were CRC errors on the
> bus.  This used to happen back in early days of dw_mmc (the controller
> on my boards), but we fixed it.  Disabling a feature on all boards
> just because one SD card controller is broken seems bad.  ...so
> instead of just this patch possibly the right thing to do is to fully
> revert the original commit.

I am leaning towards a full revert, but let's wait for more background info.

Regards,
Arend

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors
  2019-05-19  9:06   ` Wolfram Sang
@ 2019-05-20  8:46     ` Arend Van Spriel
  2019-05-20  8:52       ` Wolfram Sang
  0 siblings, 1 reply; 25+ messages in thread
From: Arend Van Spriel @ 2019-05-20  8:46 UTC (permalink / raw)
  To: Wolfram Sang, Douglas Anderson
  Cc: Ulf Hansson, Kalle Valo, Adrian Hunter, linux-rockchip,
	Double Lo, briannorris, Madhan Mohan R, mka, Wright Feng,
	Chi-Hsien Lin, Jiong Wu, Ritesh Harjani, linux-mmc, linux-kernel,
	Shawn Lin, Wolfram Sang, Avri Altman, Martin Hicks

On 5/19/2019 11:06 AM, Wolfram Sang wrote:
> 
>> Let's add an API that the SDIO card drivers can call that will
>> temporarily disable the auto-tuning functionality.  Then we can add a
>> call to this in the Broadcom WiFi driver and any other driver that
>> might have similar needs.
> 
> Can't you fix the WiFi driver to return something else than -EILSEQ
> before calling mmc_request_done() to skip the retuning?

Not really. mmc_request_done() is for the host controller driver so the 
wifi driver is not involved.

Regards,
Arend

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors
  2019-05-20  8:46     ` Arend Van Spriel
@ 2019-05-20  8:52       ` Wolfram Sang
  0 siblings, 0 replies; 25+ messages in thread
From: Wolfram Sang @ 2019-05-20  8:52 UTC (permalink / raw)
  To: Arend Van Spriel
  Cc: Douglas Anderson, Ulf Hansson, Kalle Valo, Adrian Hunter,
	linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Jiong Wu, Ritesh Harjani, linux-mmc,
	linux-kernel, Shawn Lin, Wolfram Sang, Avri Altman, Martin Hicks

[-- Attachment #1: Type: text/plain, Size: 667 bytes --]

On Mon, May 20, 2019 at 10:46:19AM +0200, Arend Van Spriel wrote:
> On 5/19/2019 11:06 AM, Wolfram Sang wrote:
> > 
> > > Let's add an API that the SDIO card drivers can call that will
> > > temporarily disable the auto-tuning functionality.  Then we can add a
> > > call to this in the Broadcom WiFi driver and any other driver that
> > > might have similar needs.
> > 
> > Can't you fix the WiFi driver to return something else than -EILSEQ
> > before calling mmc_request_done() to skip the retuning?
> 
> Not really. mmc_request_done() is for the host controller driver so the wifi
> driver is not involved.

Uh, right. Brown paper bag, please...


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep
  2019-05-17 22:54 [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Douglas Anderson
                   ` (3 preceding siblings ...)
  2019-05-18 15:09 ` [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Avri Altman
@ 2019-05-20  8:55 ` Arend Van Spriel
  4 siblings, 0 replies; 25+ messages in thread
From: Arend Van Spriel @ 2019-05-20  8:55 UTC (permalink / raw)
  To: Douglas Anderson, Ulf Hansson, Kalle Valo, Adrian Hunter
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, linux-mmc, Shawn Lin,
	brcm80211-dev-list, YueHaibing, Hante Meuleman, Martin Hicks,
	Ritesh Harjani, Michael Trimarchi, Wolfram Sang, Franky Lin,
	Jiong Wu, brcm80211-dev-list.pdl, David S. Miller, netdev,
	linux-wireless, linux-kernel, Naveen Gupta, Avri Altman

On 5/18/2019 12:54 AM, Douglas Anderson wrote:
> This series attempts to deal better with the expected transmission
> errors that we get when waking up the SDIO-based WiFi on
> rk3288-veyron-minnie, rk3288-veyron-speedy, and rk3288-veyron-mickey.
> 
> Some details about those errors can be found in
> <https://crbug.com/960222>, but to summarize it here: if we try to
> send the wakeup command to the WiFi card at the same time it has
> decided to wake up itself then it will behave badly on the SDIO bus.
> This can cause timeouts or CRC errors.
> 
> When I tested on 4.19 and 4.20 these CRC errors can be seen to cause
> re-tuning.  Since I am currently developing on 4.19 this was the
> original problem I attempted to solve.
> 
> On mainline it turns out that you don't see the retuning errors but
> you see tons of spam about timeouts trying to wakeup from sleep.  I
> tracked down the commit that was causing that and have partially
> reverted it here.  I have no real knowledge about Broadcom WiFi, but
> the commit that was causing problems sounds (from the descriptioin) to
> be a hack commit penalizing all Broadcom WiFi users because of a bug
> in a Cypress SD controller.  I will let others comment if this is
> truly the case and, if so, what the right solution should be.

Let me give a bit of background. The brcmfmac driver implements its own 
runtime-pm like functionality, ie. if the driver is idle for some time 
it will put the device in a low-power state. When it does that it powers 
down several cores in the chip among which the SDIO core. However, the 
SDIO bus used be very bad at handling devices that do that so instead it 
has the Always-On-Station (AOS) block take over the SDIO core in 
handling the bus. Default is will send a R1 response, but only for CMD52 
(and CMD14 but no host is using that cruft). In noCmdDecode it does not 
respond and simply wakes up the SDIO core, which takes over again. 
Because it does not respond timeouts (-110) are kinda expected in this mode.

Regards,
Arend

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-05-20  8:09   ` Arend Van Spriel
@ 2019-05-20 18:20     ` Doug Anderson
  0 siblings, 0 replies; 25+ messages in thread
From: Doug Anderson @ 2019-05-20 18:20 UTC (permalink / raw)
  To: Arend Van Spriel
  Cc: Ulf Hansson, Kalle Valo, Adrian Hunter,
	open list:ARM/Rockchip SoC...,
	Double Lo, Brian Norris, Madhan Mohan R, Matthias Kaehlcke,
	Wright Feng, Chi-Hsien Lin, brcm80211-dev-list.pdl, Franky Lin,
	netdev, linux-wireless, LKML, Hante Meuleman, Naveen Gupta,
	brcm80211-dev-list, YueHaibing, David S. Miller

Hi,

On Mon, May 20, 2019 at 1:09 AM Arend Van Spriel
<arend.vanspriel@broadcom.com> wrote:
>
> On 5/18/2019 12:54 AM, Douglas Anderson wrote:
> > In commit 29f6589140a1 ("brcmfmac: disable command decode in
> > sdio_aos") we disabled something called "command decode in sdio_aos"
> > for a whole bunch of Broadcom SDIO WiFi parts.
> >
> > After that patch landed I find that my kernel log on
> > rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
> >    brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep state -110
> >
> > This seems to happen every time the Broadcom WiFi transitions out of
> > sleep mode.  Reverting the part of the commit that affects the WiFi on
> > my boards fixes the problem for me, so that's what this patch does.
>
> This sounds very similar to the issue we had during integration of wifi
> on rk3288 chromebooks years ago.

I'm working on those same Chromebooks.  ;-)  I'm working on trying to
make them well on newer kernels.

...but I guess you're saying that the problem faced by the people who
wanted commit 29f6589140a1 ("brcmfmac: disable command decode in
sdio_aos") are similar to the problems we saw in the past on those
Chromebooks.  I'd tend to agree.  In general it's difficult to get a
SD Host Controller to be fully robust in the fact of any/all errors on
the bus.  While dw_mmc is pretty robust these days I'm assuming that
some other host controllers aren't.


> > Note that, in general, the justification in the original commit seemed
> > a little weak.  It looked like someone was testing on a SD card
> > controller that would sometimes die if there were CRC errors on the
> > bus.  This used to happen back in early days of dw_mmc (the controller
> > on my boards), but we fixed it.  Disabling a feature on all boards
> > just because one SD card controller is broken seems bad.  ...so
> > instead of just this patch possibly the right thing to do is to fully
> > revert the original commit.
>
> I am leaning towards a full revert, but let's wait for more background info.

I'd be fine with a full revert too.  Presumably that will break
someone but maybe they need to come up with a better solution?

-Doug

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep
  2019-05-18 15:09 ` [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Avri Altman
@ 2019-05-21  0:23   ` Brian Norris
  0 siblings, 0 replies; 25+ messages in thread
From: Brian Norris @ 2019-05-21  0:23 UTC (permalink / raw)
  To: Avri Altman
  Cc: Douglas Anderson, Ulf Hansson, Kalle Valo, Adrian Hunter,
	Arend van Spriel, linux-rockchip, Double Lo, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, linux-mmc, Shawn Lin,
	brcm80211-dev-list, YueHaibing, Hante Meuleman, Martin Hicks,
	Ritesh Harjani, Michael Trimarchi, Wolfram Sang, Franky Lin,
	Jiong Wu, brcm80211-dev-list.pdl, David S. Miller, netdev,
	linux-wireless, linux-kernel, Naveen Gupta

On Sat, May 18, 2019 at 03:09:44PM +0000, Avri Altman wrote:
> > 
> > This series attempts to deal better with the expected transmission
> > errors that we get when waking up the SDIO-based WiFi on
> > rk3288-veyron-minnie, rk3288-veyron-speedy, and rk3288-veyron-mickey.
> > 
> > Some details about those errors can be found in
> > <https://crbug.com/960222>, but to summarize it here: if we try to
> > send the wakeup command to the WiFi card at the same time it has
> > decided to wake up itself then it will behave badly on the SDIO bus.
> > This can cause timeouts or CRC errors.
> Wake-up itself: as part of a WoWlan, or d0i3?

Neither, IIUC. (It's definitely not WoWLAN, and D0i3 sounds like an
Intel thing.)

I believe it's a Broadcom-specific mode. See also Arend's response to
this thread:

http://lkml.kernel.org/linux-wireless/8c3fa57a-3843-947c-ec6b-a6144ccde1e9@broadcom.com

> Looks like this calls for a wifi driver fix, and not WA in the mmc driver.

Basically asked and answered in patch 2's thread:

https://lkml.kernel.org/lkml/20190520085201.GA1021@kunai/

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors
  2019-05-17 22:54 ` [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors Douglas Anderson
  2019-05-19  9:06   ` Wolfram Sang
@ 2019-05-26 18:42   ` Arend Van Spriel
  2019-05-28 10:04     ` Adrian Hunter
  1 sibling, 1 reply; 25+ messages in thread
From: Arend Van Spriel @ 2019-05-26 18:42 UTC (permalink / raw)
  To: Douglas Anderson, Ulf Hansson, Kalle Valo, Adrian Hunter
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Jiong Wu, Ritesh Harjani, linux-mmc,
	linux-kernel, Shawn Lin, Wolfram Sang, Avri Altman, Martin Hicks

On 5/18/2019 12:54 AM, Douglas Anderson wrote:
> Normally when the MMC core sees an "-EILSEQ" error returned by a host
> controller then it will trigger a retuning of the card.  This is
> generally a good idea.

Probably a question for Adrian, but how is this retuning scheduled. I 
recall seeing something in mmc_request_done. How about deferring the 
retuning upon a release host or is that too sdio specific.

Regards,
Arend

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors
  2019-05-26 18:42   ` Arend Van Spriel
@ 2019-05-28 10:04     ` Adrian Hunter
  2019-05-28 11:21       ` Arend Van Spriel
  0 siblings, 1 reply; 25+ messages in thread
From: Adrian Hunter @ 2019-05-28 10:04 UTC (permalink / raw)
  To: Arend Van Spriel, Douglas Anderson, Ulf Hansson, Kalle Valo
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Jiong Wu, Ritesh Harjani, linux-mmc,
	linux-kernel, Shawn Lin, Wolfram Sang, Avri Altman, Martin Hicks

On 26/05/19 9:42 PM, Arend Van Spriel wrote:
> On 5/18/2019 12:54 AM, Douglas Anderson wrote:
>> Normally when the MMC core sees an "-EILSEQ" error returned by a host
>> controller then it will trigger a retuning of the card.  This is
>> generally a good idea.
> 
> Probably a question for Adrian, but how is this retuning scheduled. I recall
> seeing something in mmc_request_done. How about deferring the retuning upon
> a release host or is that too sdio specific.

Below is what I have been carrying the last 4 years.  But according to Douglas'
patch, the release would need to be further down.  See 2nd diff below.
Would that work?


diff --git a/drivers/mmc/core/sdio_io.c b/drivers/mmc/core/sdio_io.c
index 3f67fbbe0d75..7a81a503541b 100644
--- a/drivers/mmc/core/sdio_io.c
+++ b/drivers/mmc/core/sdio_io.c
@@ -16,6 +16,7 @@
 #include <linux/mmc/sdio.h>
 #include <linux/mmc/sdio_func.h>
 
+#include "host.h"
 #include "sdio_ops.h"
 #include "core.h"
 #include "card.h"
@@ -738,3 +739,15 @@ int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags)
 	return 0;
 }
 EXPORT_SYMBOL_GPL(sdio_set_host_pm_flags);
+
+void sdio_retune_hold_now(struct sdio_func *func)
+{
+	mmc_retune_hold_now(func->card->host);
+}
+EXPORT_SYMBOL_GPL(sdio_retune_hold_now);
+
+void sdio_retune_release(struct sdio_func *func)
+{
+	mmc_retune_release(func->card->host);
+}
+EXPORT_SYMBOL_GPL(sdio_retune_release);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 22b73da42822..c915c39d519f 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -679,6 +679,11 @@ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
 	brcmf_dbg(TRACE, "Enter: on=%d\n", on);
 
 	wr_val = (on << SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT);
+
+	/* Cannot re-tune if device is asleep */
+	if (on)
+		sdio_retune_hold_now(bus->sdiodev->func1);
+
 	/* 1st KSO write goes to AOS wake up core if device is asleep  */
 	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val, &err);
 
@@ -691,6 +696,7 @@ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
 		return err;
 
 	if (on) {
+		sdio_retune_release(bus->sdiodev->func1);
 		/* device WAKEUP through KSO:
 		 * write bit 0 & read back until
 		 * both bits 0 (kso bit) & 1 (dev on status) are set
diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h
index 5685805533b5..85c24b0694d7 100644
--- a/include/linux/mmc/sdio_func.h
+++ b/include/linux/mmc/sdio_func.h
@@ -171,4 +171,7 @@ extern void sdio_f0_writeb(struct sdio_func *func, unsigned char b,
 extern mmc_pm_flag_t sdio_get_host_pm_caps(struct sdio_func *func);
 extern int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags);
 
+extern void sdio_retune_hold_now(struct sdio_func *func);
+extern void sdio_retune_release(struct sdio_func *func);
+
 #endif /* LINUX_MMC_SDIO_FUNC_H */





diff --git a/drivers/mmc/core/sdio_io.c b/drivers/mmc/core/sdio_io.c
index 3f67fbbe0d75..7a81a503541b 100644
--- a/drivers/mmc/core/sdio_io.c
+++ b/drivers/mmc/core/sdio_io.c
@@ -16,6 +16,7 @@
 #include <linux/mmc/sdio.h>
 #include <linux/mmc/sdio_func.h>
 
+#include "host.h"
 #include "sdio_ops.h"
 #include "core.h"
 #include "card.h"
@@ -738,3 +739,15 @@ int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags)
 	return 0;
 }
 EXPORT_SYMBOL_GPL(sdio_set_host_pm_flags);
+
+void sdio_retune_hold_now(struct sdio_func *func)
+{
+	mmc_retune_hold_now(func->card->host);
+}
+EXPORT_SYMBOL_GPL(sdio_retune_hold_now);
+
+void sdio_retune_release(struct sdio_func *func)
+{
+	mmc_retune_release(func->card->host);
+}
+EXPORT_SYMBOL_GPL(sdio_retune_release);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 22b73da42822..50c153932683 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -679,6 +679,11 @@ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
 	brcmf_dbg(TRACE, "Enter: on=%d\n", on);
 
 	wr_val = (on << SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT);
+
+	/* Cannot re-tune if device is asleep */
+	if (on)
+		sdio_retune_hold_now(bus->sdiodev->func1);
+
 	/* 1st KSO write goes to AOS wake up core if device is asleep  */
 	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val, &err);
 
@@ -731,6 +736,9 @@ brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
 
 	} while (try_cnt++ < MAX_KSO_ATTEMPTS);
 
+	if (on)
+		sdio_retune_release(bus->sdiodev->func1);
+
 	if (try_cnt > 2)
 		brcmf_dbg(SDIO, "try_cnt=%d rd_val=0x%x err=%d\n", try_cnt,
 			  rd_val, err);
diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h
index 5685805533b5..85c24b0694d7 100644
--- a/include/linux/mmc/sdio_func.h
+++ b/include/linux/mmc/sdio_func.h
@@ -171,4 +171,7 @@ extern void sdio_f0_writeb(struct sdio_func *func, unsigned char b,
 extern mmc_pm_flag_t sdio_get_host_pm_caps(struct sdio_func *func);
 extern int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags);
 
+extern void sdio_retune_hold_now(struct sdio_func *func);
+extern void sdio_retune_release(struct sdio_func *func);
+
 #endif /* LINUX_MMC_SDIO_FUNC_H */

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors
  2019-05-28 10:04     ` Adrian Hunter
@ 2019-05-28 11:21       ` Arend Van Spriel
  2019-05-28 11:45         ` Adrian Hunter
  0 siblings, 1 reply; 25+ messages in thread
From: Arend Van Spriel @ 2019-05-28 11:21 UTC (permalink / raw)
  To: Adrian Hunter, Douglas Anderson, Ulf Hansson, Kalle Valo
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Jiong Wu, Ritesh Harjani, linux-mmc,
	linux-kernel, Shawn Lin, Wolfram Sang, Avri Altman, Martin Hicks



On 5/28/2019 12:04 PM, Adrian Hunter wrote:
> On 26/05/19 9:42 PM, Arend Van Spriel wrote:
>> On 5/18/2019 12:54 AM, Douglas Anderson wrote:
>>> Normally when the MMC core sees an "-EILSEQ" error returned by a host
>>> controller then it will trigger a retuning of the card.  This is
>>> generally a good idea.
>>
>> Probably a question for Adrian, but how is this retuning scheduled. I recall
>> seeing something in mmc_request_done. How about deferring the retuning upon
>> a release host or is that too sdio specific.
> 
> Below is what I have been carrying the last 4 years.  But according to Douglas'
> patch, the release would need to be further down.  See 2nd diff below.
> Would that work?

That makes sense. The loop is needed because the device can be a bit 
bone headed. So indeed after the loop the device should be awake and 
able to handle CMD19.

Regards,
Arend

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors
  2019-05-28 11:21       ` Arend Van Spriel
@ 2019-05-28 11:45         ` Adrian Hunter
  2019-05-28 15:42           ` Doug Anderson
  0 siblings, 1 reply; 25+ messages in thread
From: Adrian Hunter @ 2019-05-28 11:45 UTC (permalink / raw)
  To: Arend Van Spriel, Douglas Anderson, Ulf Hansson, Kalle Valo
  Cc: linux-rockchip, Double Lo, briannorris, Madhan Mohan R, mka,
	Wright Feng, Chi-Hsien Lin, Jiong Wu, Ritesh Harjani, linux-mmc,
	linux-kernel, Shawn Lin, Wolfram Sang, Avri Altman, Martin Hicks

On 28/05/19 2:21 PM, Arend Van Spriel wrote:
> 
> 
> On 5/28/2019 12:04 PM, Adrian Hunter wrote:
>> On 26/05/19 9:42 PM, Arend Van Spriel wrote:
>>> On 5/18/2019 12:54 AM, Douglas Anderson wrote:
>>>> Normally when the MMC core sees an "-EILSEQ" error returned by a host
>>>> controller then it will trigger a retuning of the card.  This is
>>>> generally a good idea.
>>>
>>> Probably a question for Adrian, but how is this retuning scheduled. I recall
>>> seeing something in mmc_request_done. How about deferring the retuning upon
>>> a release host or is that too sdio specific.
>>
>> Below is what I have been carrying the last 4 years.  But according to
>> Douglas'
>> patch, the release would need to be further down.  See 2nd diff below.
>> Would that work?
> 
> That makes sense. The loop is needed because the device can be a bit bone
> headed. So indeed after the loop the device should be awake and able to
> handle CMD19.

What if tuning is needed to read SBSDIO_FUNC1_SLEEPCSR successfully?

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-05-17 22:54 ` [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354 Douglas Anderson
  2019-05-20  8:09   ` Arend Van Spriel
@ 2019-05-28 12:18   ` Kalle Valo
       [not found]   ` <20190528121833.7D3A460A00@smtp.codeaurora.org>
  2 siblings, 0 replies; 25+ messages in thread
From: Kalle Valo @ 2019-05-28 12:18 UTC (permalink / raw)
  To: Douglas Anderson
  Cc: Ulf Hansson, Adrian Hunter, Arend van Spriel, linux-rockchip,
	Double Lo, briannorris, Madhan Mohan R, mka, Wright Feng,
	Chi-Hsien Lin, Douglas Anderson, brcm80211-dev-list.pdl,
	Franky Lin, netdev, linux-wireless, linux-kernel, Madhan Mohan R,
	Hante Meuleman, Naveen Gupta, brcm80211-dev-list, YueHaibing,
	David S. Miller

Douglas Anderson <dianders@chromium.org> wrote:

> In commit 29f6589140a1 ("brcmfmac: disable command decode in
> sdio_aos") we disabled something called "command decode in sdio_aos"
> for a whole bunch of Broadcom SDIO WiFi parts.
> 
> After that patch landed I find that my kernel log on
> rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
>   brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep state -110
> 
> This seems to happen every time the Broadcom WiFi transitions out of
> sleep mode.  Reverting the part of the commit that affects the WiFi on
> my boards fixes the problem for me, so that's what this patch does.
> 
> Note that, in general, the justification in the original commit seemed
> a little weak.  It looked like someone was testing on a SD card
> controller that would sometimes die if there were CRC errors on the
> bus.  This used to happen back in early days of dw_mmc (the controller
> on my boards), but we fixed it.  Disabling a feature on all boards
> just because one SD card controller is broken seems bad.  ...so
> instead of just this patch possibly the right thing to do is to fully
> revert the original commit.
> 
> Fixes: 29f6589140a1 ("brcmfmac: disable command decode in sdio_aos")
> Signed-off-by: Douglas Anderson <dianders@chromium.org>

I don't see patch 2 in patchwork and I assume discussion continues.
Please resend if/when I need to apply something.

2 patches set to Changes Requested.

10948785 [1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
10948777 [3/3] brcmfmac: sdio: Disable auto-tuning around commands expected to fail

-- 
https://patchwork.kernel.org/patch/10948785/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors
  2019-05-28 11:45         ` Adrian Hunter
@ 2019-05-28 15:42           ` Doug Anderson
  0 siblings, 0 replies; 25+ messages in thread
From: Doug Anderson @ 2019-05-28 15:42 UTC (permalink / raw)
  To: Adrian Hunter
  Cc: Arend Van Spriel, Ulf Hansson, Kalle Valo,
	open list:ARM/Rockchip SoC...,
	Double Lo, Brian Norris, Madhan Mohan R, Matthias Kaehlcke,
	Wright Feng, Chi-Hsien Lin, Jiong Wu, Ritesh Harjani,
	Linux MMC List, LKML, Shawn Lin, Wolfram Sang, Avri Altman,
	Martin Hicks

Hi,

On Tue, May 28, 2019 at 4:45 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
>
> On 28/05/19 2:21 PM, Arend Van Spriel wrote:
> >
> >
> > On 5/28/2019 12:04 PM, Adrian Hunter wrote:
> >> On 26/05/19 9:42 PM, Arend Van Spriel wrote:
> >>> On 5/18/2019 12:54 AM, Douglas Anderson wrote:
> >>>> Normally when the MMC core sees an "-EILSEQ" error returned by a host
> >>>> controller then it will trigger a retuning of the card.  This is
> >>>> generally a good idea.
> >>>
> >>> Probably a question for Adrian, but how is this retuning scheduled. I recall
> >>> seeing something in mmc_request_done. How about deferring the retuning upon
> >>> a release host or is that too sdio specific.
> >>
> >> Below is what I have been carrying the last 4 years.  But according to
> >> Douglas'
> >> patch, the release would need to be further down.  See 2nd diff below.
> >> Would that work?
> >
> > That makes sense. The loop is needed because the device can be a bit bone
> > headed. So indeed after the loop the device should be awake and able to
> > handle CMD19.

IMO I'd rather not _defer_ the re-tuning.  I believe the correct thing
is to not schedule the re-tuning at all in response to the IO errors.
That's what my patch does.

Specifically the IO errors that come up in this case are not due to
being "out of tune".  They are due to the fact that the other SDIO
card may be in a transitory state and putting garbage on the bus.
Scheduling a retuning for later would be just a waste of time and
needlessly tie up the bus for the retune.

...or am I confused?


> What if tuning is needed to read SBSDIO_FUNC1_SLEEPCSR successfully?

Personally I think this would be pretty unlikely.  If we're at this
point we've already talked to the card quite a bit so we should have a
tuning that's pretty good.  If we're just slightly out of tune then we
should still get through the loop with a few retries and then we can
detect that we're out of tune later, with a more reliable command.

However, if you're worried about this, I can always re-enable the old
behavior if we have already looped a few times.  I suppose I could
increase the loop duration/count slightly too...  Please let me know
one way or the other.


-Doug

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
       [not found]   ` <20190528121833.7D3A460A00@smtp.codeaurora.org>
@ 2019-05-28 15:51     ` Doug Anderson
  2019-05-28 16:09       ` Arend Van Spriel
  2019-05-29 14:51       ` Kalle Valo
  0 siblings, 2 replies; 25+ messages in thread
From: Doug Anderson @ 2019-05-28 15:51 UTC (permalink / raw)
  To: Kalle Valo, Arend van Spriel
  Cc: Madhan Mohan R, Ulf Hansson, LKML, Hante Meuleman,
	David S. Miller, netdev, Chi-Hsien Lin, Brian Norris,
	linux-wireless, YueHaibing, Adrian Hunter,
	open list:ARM/Rockchip SoC...,
	brcm80211-dev-list.pdl, Matthias Kaehlcke, Naveen Gupta,
	Wright Feng, brcm80211-dev-list, Double Lo, Franky Lin

Hi,

On Tue, May 28, 2019 at 5:18 AM Kalle Valo <kvalo@codeaurora.org> wrote:
>
> Douglas Anderson <dianders@chromium.org> wrote:
>
> > In commit 29f6589140a1 ("brcmfmac: disable command decode in
> > sdio_aos") we disabled something called "command decode in sdio_aos"
> > for a whole bunch of Broadcom SDIO WiFi parts.
> >
> > After that patch landed I find that my kernel log on
> > rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
> >   brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep state -110
> >
> > This seems to happen every time the Broadcom WiFi transitions out of
> > sleep mode.  Reverting the part of the commit that affects the WiFi on
> > my boards fixes the problem for me, so that's what this patch does.
> >
> > Note that, in general, the justification in the original commit seemed
> > a little weak.  It looked like someone was testing on a SD card
> > controller that would sometimes die if there were CRC errors on the
> > bus.  This used to happen back in early days of dw_mmc (the controller
> > on my boards), but we fixed it.  Disabling a feature on all boards
> > just because one SD card controller is broken seems bad.  ...so
> > instead of just this patch possibly the right thing to do is to fully
> > revert the original commit.
> >
> > Fixes: 29f6589140a1 ("brcmfmac: disable command decode in sdio_aos")
> > Signed-off-by: Douglas Anderson <dianders@chromium.org>
>
> I don't see patch 2 in patchwork and I assume discussion continues.

Apologies.  I made sure to CC you individually on all the patches but
didn't think about the fact that you use patchwork to manage and so
didn't ensure all patches made it to all lists (by default each patch
gets recipients individually from get_maintainer).  I'll make sure to
fix for patch set #2.  If you want to see all the patches, you can at
least find them on lore.kernel.org linked from the cover:

https://lore.kernel.org/patchwork/cover/1075373/


> Please resend if/when I need to apply something.
>
> 2 patches set to Changes Requested.
>
> 10948785 [1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354

As per Arend I'll change patch #1 to a full revert instead of a
partial revert.  Arend: please yell if you want otherwise.

-Doug

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-05-28 15:51     ` Doug Anderson
@ 2019-05-28 16:09       ` Arend Van Spriel
  2019-05-28 16:11         ` Arend Van Spriel
  2019-05-29 14:51       ` Kalle Valo
  1 sibling, 1 reply; 25+ messages in thread
From: Arend Van Spriel @ 2019-05-28 16:09 UTC (permalink / raw)
  To: Doug Anderson, Kalle Valo
  Cc: Madhan Mohan R, Ulf Hansson, LKML, Hante Meuleman,
	David S. Miller, netdev, Chi-Hsien Lin, Brian Norris,
	linux-wireless, YueHaibing, Adrian Hunter,
	open list:ARM/Rockchip SoC...,
	brcm80211-dev-list.pdl, Matthias Kaehlcke, Naveen Gupta,
	Wright Feng, brcm80211-dev-list, Double Lo, Franky Lin

On May 28, 2019 5:52:10 PM Doug Anderson <dianders@chromium.org> wrote:

> Hi,
>
> On Tue, May 28, 2019 at 5:18 AM Kalle Valo <kvalo@codeaurora.org> wrote:
>>
>> Douglas Anderson <dianders@chromium.org> wrote:
>>
>> > In commit 29f6589140a1 ("brcmfmac: disable command decode in
>> > sdio_aos") we disabled something called "command decode in sdio_aos"
>> > for a whole bunch of Broadcom SDIO WiFi parts.
>> >
>> > After that patch landed I find that my kernel log on
>> > rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
>> >   brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep state -110
>> >
>> > This seems to happen every time the Broadcom WiFi transitions out of
>> > sleep mode.  Reverting the part of the commit that affects the WiFi on
>> > my boards fixes the problem for me, so that's what this patch does.
>> >
>> > Note that, in general, the justification in the original commit seemed
>> > a little weak.  It looked like someone was testing on a SD card
>> > controller that would sometimes die if there were CRC errors on the
>> > bus.  This used to happen back in early days of dw_mmc (the controller
>> > on my boards), but we fixed it.  Disabling a feature on all boards
>> > just because one SD card controller is broken seems bad.  ...so
>> > instead of just this patch possibly the right thing to do is to fully
>> > revert the original commit.
>> >
>> > Fixes: 29f6589140a1 ("brcmfmac: disable command decode in sdio_aos")
>> > Signed-off-by: Douglas Anderson <dianders@chromium.org>
>>
>> I don't see patch 2 in patchwork and I assume discussion continues.
>
> Apologies.  I made sure to CC you individually on all the patches but
> didn't think about the fact that you use patchwork to manage and so
> didn't ensure all patches made it to all lists (by default each patch
> gets recipients individually from get_maintainer).  I'll make sure to
> fix for patch set #2.  If you want to see all the patches, you can at
> least find them on lore.kernel.org linked from the cover:
>
> https://lore.kernel.org/patchwork/cover/1075373/
>
>
>> Please resend if/when I need to apply something.
>>
>> 2 patches set to Changes Requested.
>>
>> 10948785 [1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
>
> As per Arend I'll change patch #1 to a full revert instead of a
> partial revert.  Arend: please yell if you want otherwise.

No yelling here. If any it is expected from Cypress. Maybe good to add them 
specifically in Cc:

Regards,
Arend



^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-05-28 16:09       ` Arend Van Spriel
@ 2019-05-28 16:11         ` Arend Van Spriel
  2019-06-04  3:20           ` Wright Feng
  0 siblings, 1 reply; 25+ messages in thread
From: Arend Van Spriel @ 2019-05-28 16:11 UTC (permalink / raw)
  To: Doug Anderson, Kalle Valo
  Cc: Madhan Mohan R, Ulf Hansson, LKML, Hante Meuleman,
	David S. Miller, netdev, Chi-Hsien Lin, Brian Norris,
	linux-wireless, YueHaibing, Adrian Hunter,
	open list:ARM/Rockchip SoC...,
	brcm80211-dev-list.pdl, Matthias Kaehlcke, Naveen Gupta,
	Wright Feng, brcm80211-dev-list, Double Lo, Franky Lin

On May 28, 2019 6:09:21 PM Arend Van Spriel <arend.vanspriel@broadcom.com> 
wrote:

> On May 28, 2019 5:52:10 PM Doug Anderson <dianders@chromium.org> wrote:
>
>> Hi,
>>
>> On Tue, May 28, 2019 at 5:18 AM Kalle Valo <kvalo@codeaurora.org> wrote:
>>>
>>> Douglas Anderson <dianders@chromium.org> wrote:
>>>
>>> > In commit 29f6589140a1 ("brcmfmac: disable command decode in
>>> > sdio_aos") we disabled something called "command decode in sdio_aos"
>>> > for a whole bunch of Broadcom SDIO WiFi parts.
>>> >
>>> > After that patch landed I find that my kernel log on
>>> > rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
>>> >   brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep state -110
>>> >
>>> > This seems to happen every time the Broadcom WiFi transitions out of
>>> > sleep mode.  Reverting the part of the commit that affects the WiFi on
>>> > my boards fixes the problem for me, so that's what this patch does.
>>> >
>>> > Note that, in general, the justification in the original commit seemed
>>> > a little weak.  It looked like someone was testing on a SD card
>>> > controller that would sometimes die if there were CRC errors on the
>>> > bus.  This used to happen back in early days of dw_mmc (the controller
>>> > on my boards), but we fixed it.  Disabling a feature on all boards
>>> > just because one SD card controller is broken seems bad.  ...so
>>> > instead of just this patch possibly the right thing to do is to fully
>>> > revert the original commit.
>>> >
>>> > Fixes: 29f6589140a1 ("brcmfmac: disable command decode in sdio_aos")
>>> > Signed-off-by: Douglas Anderson <dianders@chromium.org>
>>>
>>> I don't see patch 2 in patchwork and I assume discussion continues.
>>
>> Apologies.  I made sure to CC you individually on all the patches but
>> didn't think about the fact that you use patchwork to manage and so
>> didn't ensure all patches made it to all lists (by default each patch
>> gets recipients individually from get_maintainer).  I'll make sure to
>> fix for patch set #2.  If you want to see all the patches, you can at
>> least find them on lore.kernel.org linked from the cover:
>>
>> https://lore.kernel.org/patchwork/cover/1075373/
>>
>>
>>> Please resend if/when I need to apply something.
>>>
>>> 2 patches set to Changes Requested.
>>>
>>> 10948785 [1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
>>
>> As per Arend I'll change patch #1 to a full revert instead of a
>> partial revert.  Arend: please yell if you want otherwise.
>
> No yelling here. If any it is expected from Cypress. Maybe good to add them
> specifically in Cc:

Of the revert patch that is.

Gr. AvS



^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-05-28 15:51     ` Doug Anderson
  2019-05-28 16:09       ` Arend Van Spriel
@ 2019-05-29 14:51       ` Kalle Valo
  1 sibling, 0 replies; 25+ messages in thread
From: Kalle Valo @ 2019-05-29 14:51 UTC (permalink / raw)
  To: Doug Anderson
  Cc: Arend van Spriel, Madhan Mohan R, Ulf Hansson, LKML,
	Hante Meuleman, David S. Miller, netdev, Chi-Hsien Lin,
	Brian Norris, linux-wireless, YueHaibing, Adrian Hunter,
	open list:ARM/Rockchip SoC...,
	brcm80211-dev-list.pdl, Matthias Kaehlcke, Naveen Gupta,
	Wright Feng, brcm80211-dev-list, Double Lo, Franky Lin

Doug Anderson <dianders@chromium.org> writes:

> Hi,
>
> On Tue, May 28, 2019 at 5:18 AM Kalle Valo <kvalo@codeaurora.org> wrote:
>>
>> Douglas Anderson <dianders@chromium.org> wrote:
>>
>> > In commit 29f6589140a1 ("brcmfmac: disable command decode in
>> > sdio_aos") we disabled something called "command decode in sdio_aos"
>> > for a whole bunch of Broadcom SDIO WiFi parts.
>> >
>> > After that patch landed I find that my kernel log on
>> > rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
>> >   brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep state -110
>> >
>> > This seems to happen every time the Broadcom WiFi transitions out of
>> > sleep mode.  Reverting the part of the commit that affects the WiFi on
>> > my boards fixes the problem for me, so that's what this patch does.
>> >
>> > Note that, in general, the justification in the original commit seemed
>> > a little weak.  It looked like someone was testing on a SD card
>> > controller that would sometimes die if there were CRC errors on the
>> > bus.  This used to happen back in early days of dw_mmc (the controller
>> > on my boards), but we fixed it.  Disabling a feature on all boards
>> > just because one SD card controller is broken seems bad.  ...so
>> > instead of just this patch possibly the right thing to do is to fully
>> > revert the original commit.
>> >
>> > Fixes: 29f6589140a1 ("brcmfmac: disable command decode in sdio_aos")
>> > Signed-off-by: Douglas Anderson <dianders@chromium.org>
>>
>> I don't see patch 2 in patchwork and I assume discussion continues.
>
> Apologies.  I made sure to CC you individually on all the patches but
> didn't think about the fact that you use patchwork to manage and so
> didn't ensure all patches made it to all lists (by default each patch
> gets recipients individually from get_maintainer).  I'll make sure to
> fix for patch set #2.  If you want to see all the patches, you can at
> least find them on lore.kernel.org linked from the cover:
>
> https://lore.kernel.org/patchwork/cover/1075373/

No worries, I had the thread on my email but was just too busy to check.
So I instead wrote down my thought process so that somebode can correct
me in case I have misunderstood. I usually do that when it's not clear
what the next action should be.

-- 
Kalle Valo

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-05-28 16:11         ` Arend Van Spriel
@ 2019-06-04  3:20           ` Wright Feng
  2019-06-04 16:01             ` Doug Anderson
  0 siblings, 1 reply; 25+ messages in thread
From: Wright Feng @ 2019-06-04  3:20 UTC (permalink / raw)
  To: Arend Van Spriel, Doug Anderson, Kalle Valo
  Cc: Madhan Mohan R, Ulf Hansson, LKML, Hante Meuleman,
	David S. Miller, netdev, Chi-Hsien Lin, Brian Norris,
	linux-wireless, YueHaibing, Adrian Hunter,
	open list:ARM/Rockchip SoC...,
	brcm80211-dev-list.pdl, Matthias Kaehlcke, Naveen Gupta,
	brcm80211-dev-list, Double Lo, Franky Lin



On 2019/5/29 上午 12:11, Arend Van Spriel wrote:
> On May 28, 2019 6:09:21 PM Arend Van Spriel 
> <arend.vanspriel@broadcom.com> wrote:
> 
>> On May 28, 2019 5:52:10 PM Doug Anderson <dianders@chromium.org> wrote:
>>
>>> Hi,
>>>
>>> On Tue, May 28, 2019 at 5:18 AM Kalle Valo <kvalo@codeaurora.org> wrote:
>>>>
>>>> Douglas Anderson <dianders@chromium.org> wrote:
>>>>
>>>> > In commit 29f6589140a1 ("brcmfmac: disable command decode in
>>>> > sdio_aos") we disabled something called "command decode in sdio_aos"
>>>> > for a whole bunch of Broadcom SDIO WiFi parts.
>>>> >
>>>> > After that patch landed I find that my kernel log on
>>>> > rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
>>>> >   brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep 
>>>> state -110
>>>> >
>>>> > This seems to happen every time the Broadcom WiFi transitions out of
>>>> > sleep mode.  Reverting the part of the commit that affects the 
>>>> WiFi on
>>>> > my boards fixes the problem for me, so that's what this patch does.
>>>> >
>>>> > Note that, in general, the justification in the original commit 
>>>> seemed
>>>> > a little weak.  It looked like someone was testing on a SD card
>>>> > controller that would sometimes die if there were CRC errors on the
>>>> > bus.  This used to happen back in early days of dw_mmc (the 
>>>> controller
>>>> > on my boards), but we fixed it.  Disabling a feature on all boards
>>>> > just because one SD card controller is broken seems bad.  ...so
>>>> > instead of just this patch possibly the right thing to do is to fully
>>>> > revert the original commit.
>>>> >
Since the commit 29f6589140a1 ("brcmfmac: disable command decode in 
sdio_aos") causes the regression on other SD card controller, it is 
better to revert it as you mentioned.
Actually, without the commit, we hit MMC timeout(-110) and hanged 
instead of CRC error in our test. Would you please share the analysis of 
dw_mmc issue which you fixed? We'd like to compare whether we got the 
same issue.

Regards,
Wright

>>>> > Fixes: 29f6589140a1 ("brcmfmac: disable command decode in sdio_aos")
>>>> > Signed-off-by: Douglas Anderson <dianders@chromium.org>
>>>>
>>>> I don't see patch 2 in patchwork and I assume discussion continues.
>>>
>>> Apologies.  I made sure to CC you individually on all the patches but
>>> didn't think about the fact that you use patchwork to manage and so
>>> didn't ensure all patches made it to all lists (by default each patch
>>> gets recipients individually from get_maintainer).  I'll make sure to
>>> fix for patch set #2.  If you want to see all the patches, you can at
>>> least find them on lore.kernel.org linked from the cover:
>>>
>>> https://lore.kernel.org/patchwork/cover/1075373/
>>>
>>>
>>>> Please resend if/when I need to apply something.
>>>>
>>>> 2 patches set to Changes Requested.
>>>>
>>>> 10948785 [1/3] brcmfmac: re-enable command decode in sdio_aos for 
>>>> BRCM 4354
>>>
>>> As per Arend I'll change patch #1 to a full revert instead of a
>>> partial revert.  Arend: please yell if you want otherwise.
>>
>> No yelling here. If any it is expected from Cypress. Maybe good to add 
>> them
>> specifically in Cc:
> 
> Of the revert patch that is.
> 
> Gr. AvS
> 
> 

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-06-04  3:20           ` Wright Feng
@ 2019-06-04 16:01             ` Doug Anderson
  2019-06-04 16:48               ` Arend Van Spriel
  0 siblings, 1 reply; 25+ messages in thread
From: Doug Anderson @ 2019-06-04 16:01 UTC (permalink / raw)
  To: Wright Feng
  Cc: Arend Van Spriel, Kalle Valo, Madhan Mohan R, Ulf Hansson, LKML,
	Hante Meuleman, David S. Miller, netdev, Chi-Hsien Lin,
	Brian Norris, linux-wireless, YueHaibing, Adrian Hunter,
	open list:ARM/Rockchip SoC...,
	brcm80211-dev-list.pdl, Matthias Kaehlcke, Naveen Gupta,
	brcm80211-dev-list, Double Lo, Franky Lin

Hi,

On Mon, Jun 3, 2019 at 8:20 PM Wright Feng <Wright.Feng@cypress.com> wrote:
>
> On 2019/5/29 上午 12:11, Arend Van Spriel wrote:
> > On May 28, 2019 6:09:21 PM Arend Van Spriel
> > <arend.vanspriel@broadcom.com> wrote:
> >
> >> On May 28, 2019 5:52:10 PM Doug Anderson <dianders@chromium.org> wrote:
> >>
> >>> Hi,
> >>>
> >>> On Tue, May 28, 2019 at 5:18 AM Kalle Valo <kvalo@codeaurora.org> wrote:
> >>>>
> >>>> Douglas Anderson <dianders@chromium.org> wrote:
> >>>>
> >>>> > In commit 29f6589140a1 ("brcmfmac: disable command decode in
> >>>> > sdio_aos") we disabled something called "command decode in sdio_aos"
> >>>> > for a whole bunch of Broadcom SDIO WiFi parts.
> >>>> >
> >>>> > After that patch landed I find that my kernel log on
> >>>> > rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
> >>>> >   brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep
> >>>> state -110
> >>>> >
> >>>> > This seems to happen every time the Broadcom WiFi transitions out of
> >>>> > sleep mode.  Reverting the part of the commit that affects the
> >>>> WiFi on
> >>>> > my boards fixes the problem for me, so that's what this patch does.
> >>>> >
> >>>> > Note that, in general, the justification in the original commit
> >>>> seemed
> >>>> > a little weak.  It looked like someone was testing on a SD card
> >>>> > controller that would sometimes die if there were CRC errors on the
> >>>> > bus.  This used to happen back in early days of dw_mmc (the
> >>>> controller
> >>>> > on my boards), but we fixed it.  Disabling a feature on all boards
> >>>> > just because one SD card controller is broken seems bad.  ...so
> >>>> > instead of just this patch possibly the right thing to do is to fully
> >>>> > revert the original commit.
> >>>> >
> Since the commit 29f6589140a1 ("brcmfmac: disable command decode in
> sdio_aos") causes the regression on other SD card controller, it is
> better to revert it as you mentioned.
> Actually, without the commit, we hit MMC timeout(-110) and hanged
> instead of CRC error in our test.

Any chance I can convince you to provide some official tags like
Reviewed-by or Tested-by on the revert?

> Would you please share the analysis of
> dw_mmc issue which you fixed? We'd like to compare whether we got the
> same issue.

I'm not sure there's any single magic commit I can point to.  When I
started working on dw_mmc it was terrible at handling error cases and
would often crash / hang / stop all future communication upon certain
classes or efforts.  There were dozens of problems we've had to fix
over the years.  These problems showed up when we started supporting
HS200 / UHS since the tuning phase really stress the error handling of
the host controller.

I searched and by the time we were supporting Broadcom SDIO cards the
error handling was already pretty good.  ...but if we hadn't already
made the error handling more robust for UHS tuning then we would have
definitely hit these types of problems.  The only problem I remember
having to solve in dw_mmc that was unique to Broadcom was commit
0bdbd0e88cf6 ("mmc: dw_mmc: Don't start commands while busy").  Any
chance that could be what you're hitting?

What host controller are you having problems with?

-Doug

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354
  2019-06-04 16:01             ` Doug Anderson
@ 2019-06-04 16:48               ` Arend Van Spriel
  0 siblings, 0 replies; 25+ messages in thread
From: Arend Van Spriel @ 2019-06-04 16:48 UTC (permalink / raw)
  To: Doug Anderson, Wright Feng
  Cc: Kalle Valo, Madhan Mohan R, Ulf Hansson, LKML, Hante Meuleman,
	David S. Miller, netdev, Chi-Hsien Lin, Brian Norris,
	linux-wireless, YueHaibing, Adrian Hunter,
	open list:ARM/Rockchip SoC...,
	brcm80211-dev-list.pdl, Matthias Kaehlcke, Naveen Gupta,
	brcm80211-dev-list, Double Lo, Franky Lin

On June 4, 2019 6:01:26 PM Doug Anderson <dianders@chromium.org> wrote:

> Hi,
>
> On Mon, Jun 3, 2019 at 8:20 PM Wright Feng <Wright.Feng@cypress.com> wrote:
>>
>> On 2019/5/29 上午 12:11, Arend Van Spriel wrote:
>> > On May 28, 2019 6:09:21 PM Arend Van Spriel
>> > <arend.vanspriel@broadcom.com> wrote:
>> >
>> >> On May 28, 2019 5:52:10 PM Doug Anderson <dianders@chromium.org> wrote:
>> >>
>> >>> Hi,
>> >>>
>> >>> On Tue, May 28, 2019 at 5:18 AM Kalle Valo <kvalo@codeaurora.org> wrote:
>> >>>>
>> >>>> Douglas Anderson <dianders@chromium.org> wrote:
>> >>>>
>> >>>> > In commit 29f6589140a1 ("brcmfmac: disable command decode in
>> >>>> > sdio_aos") we disabled something called "command decode in sdio_aos"
>> >>>> > for a whole bunch of Broadcom SDIO WiFi parts.
>> >>>> >
>> >>>> > After that patch landed I find that my kernel log on
>> >>>> > rk3288-veyron-minnie and rk3288-veyron-speedy is filled with:
>> >>>> >   brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep
>> >>>> state -110
>> >>>> >
>> >>>> > This seems to happen every time the Broadcom WiFi transitions out of
>> >>>> > sleep mode.  Reverting the part of the commit that affects the
>> >>>> WiFi on
>> >>>> > my boards fixes the problem for me, so that's what this patch does.
>> >>>> >
>> >>>> > Note that, in general, the justification in the original commit
>> >>>> seemed
>> >>>> > a little weak.  It looked like someone was testing on a SD card
>> >>>> > controller that would sometimes die if there were CRC errors on the
>> >>>> > bus.  This used to happen back in early days of dw_mmc (the
>> >>>> controller
>> >>>> > on my boards), but we fixed it.  Disabling a feature on all boards
>> >>>> > just because one SD card controller is broken seems bad.  ...so
>> >>>> > instead of just this patch possibly the right thing to do is to fully
>> >>>> > revert the original commit.
>> >>>> >
>> Since the commit 29f6589140a1 ("brcmfmac: disable command decode in
>> sdio_aos") causes the regression on other SD card controller, it is
>> better to revert it as you mentioned.
>> Actually, without the commit, we hit MMC timeout(-110) and hanged
>> instead of CRC error in our test.
>
> Any chance I can convince you to provide some official tags like
> Reviewed-by or Tested-by on the revert?
>
>> Would you please share the analysis of
>> dw_mmc issue which you fixed? We'd like to compare whether we got the
>> same issue.
>
> I'm not sure there's any single magic commit I can point to.  When I
> started working on dw_mmc it was terrible at handling error cases and
> would often crash / hang / stop all future communication upon certain
> classes or efforts.  There were dozens of problems we've had to fix
> over the years.  These problems showed up when we started supporting
> HS200 / UHS since the tuning phase really stress the error handling of
> the host controller.
>
> I searched and by the time we were supporting Broadcom SDIO cards the
> error handling was already pretty good.  ...but if we hadn't already
> made the error handling more robust for UHS tuning then we would have
> definitely hit these types of problems.  The only problem I remember
> having to solve in dw_mmc that was unique to Broadcom was commit
> 0bdbd0e88cf6 ("mmc: dw_mmc: Don't start commands while busy").  Any
> chance that could be what you're hitting?

That is indeed an issue I recall resulting in -110 errors.

> What host controller are you having problems with?

Knowing that will be a good start.

Regards,
Arend



^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2019-06-04 16:49 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-17 22:54 [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Douglas Anderson
2019-05-17 22:54 ` [PATCH 1/3] brcmfmac: re-enable command decode in sdio_aos for BRCM 4354 Douglas Anderson
2019-05-20  8:09   ` Arend Van Spriel
2019-05-20 18:20     ` Doug Anderson
2019-05-28 12:18   ` Kalle Valo
     [not found]   ` <20190528121833.7D3A460A00@smtp.codeaurora.org>
2019-05-28 15:51     ` Doug Anderson
2019-05-28 16:09       ` Arend Van Spriel
2019-05-28 16:11         ` Arend Van Spriel
2019-06-04  3:20           ` Wright Feng
2019-06-04 16:01             ` Doug Anderson
2019-06-04 16:48               ` Arend Van Spriel
2019-05-29 14:51       ` Kalle Valo
2019-05-17 22:54 ` [PATCH 2/3] mmc: core: API for temporarily disabling auto-retuning due to errors Douglas Anderson
2019-05-19  9:06   ` Wolfram Sang
2019-05-20  8:46     ` Arend Van Spriel
2019-05-20  8:52       ` Wolfram Sang
2019-05-26 18:42   ` Arend Van Spriel
2019-05-28 10:04     ` Adrian Hunter
2019-05-28 11:21       ` Arend Van Spriel
2019-05-28 11:45         ` Adrian Hunter
2019-05-28 15:42           ` Doug Anderson
2019-05-17 22:54 ` [PATCH 3/3] brcmfmac: sdio: Disable auto-tuning around commands expected to fail Douglas Anderson
2019-05-18 15:09 ` [PATCH 0/3] brcmfmac: sdio: Deal better w/ transmission errors waking from sleep Avri Altman
2019-05-21  0:23   ` Brian Norris
2019-05-20  8:55 ` Arend Van Spriel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).