linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes
@ 2021-12-12 14:59 Martin Blumenstingl
  2021-12-12 14:59 ` [PATCH v1 1/2] mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands Martin Blumenstingl
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Martin Blumenstingl @ 2021-12-12 14:59 UTC (permalink / raw)
  To: linux-mmc, linux-amlogic
  Cc: linux-kernel, linux-arm-kernel, ulf.hansson, Martin Blumenstingl

The first patch in this series fixes Broadcom SDIO wifi cards (using
the brcmfmac driver) on Meson8 SoCs. Meson8b with Realtek (RTL8723BS)
SDIO wifi is unaffected by this (it worked fine before). Testing was
done (on the S82 board) in private by a user who wants to remain
anonymous.

The second patch in this series is a minor cleanup which I found when
working on the first patch.


Martin Blumenstingl (2):
  mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands
  mmc: meson-mx-sdhc: Drop unused MESON_SDHC_NUM_BUILTIN_CLKS macro

 drivers/mmc/host/meson-mx-sdhc-clkc.c | 2 --
 drivers/mmc/host/meson-mx-sdhc-mmc.c  | 9 +++++++++
 2 files changed, 9 insertions(+), 2 deletions(-)

-- 
2.34.1


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

* [PATCH v1 1/2] mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands
  2021-12-12 14:59 [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes Martin Blumenstingl
@ 2021-12-12 14:59 ` Martin Blumenstingl
  2021-12-14 13:20   ` Ulf Hansson
  2021-12-12 14:59 ` [PATCH v1 2/2] mmc: meson-mx-sdhc: Drop unused MESON_SDHC_NUM_BUILTIN_CLKS macro Martin Blumenstingl
  2021-12-13 13:01 ` [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes Ulf Hansson
  2 siblings, 1 reply; 7+ messages in thread
From: Martin Blumenstingl @ 2021-12-12 14:59 UTC (permalink / raw)
  To: linux-mmc, linux-amlogic
  Cc: linux-kernel, linux-arm-kernel, ulf.hansson, Martin Blumenstingl

The vendor driver implements special handling for multi-block
SD_IO_RW_DIRECT and SD_IO_RW_EXTENDED commands. It sets the MANUAL_STOP
bit in the MESON_SDHC_MISC register for these commands. In All other
cases this bit is cleared.

This fixes SDIO wifi using the brcmfmac driver which reported the
following error without this change on a Netxeon S82 board using a
Meson8 (S802) SoC:
  brcmf_fw_alloc_request: using brcm/brcmfmac43362-sdio for chip
                          BCM43362/1
  brcmf_sdiod_ramrw: membytes transfer failed
  brcmf_sdio_download_code_file: error -110 on writing 219557 membytes
                                 at 0x00000000
  brcmf_sdio_download_firmware: dongle image file download failed

And with this change:
  brcmf_fw_alloc_request: using brcm/brcmfmac43362-sdio for chip
                          BCM43362/1
  brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may
                            have limited channels available
  brcmf_c_preinit_dcmds: Firmware: BCM43362/1 wl0: Apr 22 2013 14:50:00
                         version 5.90.195.89.6 FWID 01-b30a427d

Fixes: e4bf1b0970ef96 ("mmc: host: meson-mx-sdhc: new driver for the Amlogic Meson SDHC host")
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
 drivers/mmc/host/meson-mx-sdhc-mmc.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/mmc/host/meson-mx-sdhc-mmc.c b/drivers/mmc/host/meson-mx-sdhc-mmc.c
index 7cd9c0ec2fcf..a89190d479cf 100644
--- a/drivers/mmc/host/meson-mx-sdhc-mmc.c
+++ b/drivers/mmc/host/meson-mx-sdhc-mmc.c
@@ -135,6 +135,7 @@ static void meson_mx_sdhc_start_cmd(struct mmc_host *mmc,
 				    struct mmc_command *cmd)
 {
 	struct meson_mx_sdhc_host *host = mmc_priv(mmc);
+	bool manual_stop = false;
 	u32 ictl, send;
 	int pack_len;
 
@@ -172,12 +173,20 @@ static void meson_mx_sdhc_start_cmd(struct mmc_host *mmc,
 		else
 			/* software flush: */
 			ictl |= MESON_SDHC_ICTL_DATA_XFER_OK;
+
+		manual_stop = cmd->data->blocks > 1 &&
+			      (cmd->opcode == SD_IO_RW_DIRECT ||
+			       cmd->opcode == SD_IO_RW_EXTENDED);
 	} else {
 		pack_len = 0;
 
 		ictl |= MESON_SDHC_ICTL_RESP_OK;
 	}
 
+	regmap_update_bits(host->regmap, MESON_SDHC_MISC,
+			   MESON_SDHC_MISC_MANUAL_STOP,
+			   manual_stop ? MESON_SDHC_MISC_MANUAL_STOP : 0);
+
 	if (cmd->opcode == MMC_STOP_TRANSMISSION)
 		send |= MESON_SDHC_SEND_DATA_STOP;
 
-- 
2.34.1


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

* [PATCH v1 2/2] mmc: meson-mx-sdhc: Drop unused MESON_SDHC_NUM_BUILTIN_CLKS macro
  2021-12-12 14:59 [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes Martin Blumenstingl
  2021-12-12 14:59 ` [PATCH v1 1/2] mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands Martin Blumenstingl
@ 2021-12-12 14:59 ` Martin Blumenstingl
  2021-12-13 13:01 ` [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes Ulf Hansson
  2 siblings, 0 replies; 7+ messages in thread
From: Martin Blumenstingl @ 2021-12-12 14:59 UTC (permalink / raw)
  To: linux-mmc, linux-amlogic
  Cc: linux-kernel, linux-arm-kernel, ulf.hansson, Martin Blumenstingl

Remove MESON_SDHC_NUM_BUILTIN_CLKS because it is not used anywhere in
the driver.

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
 drivers/mmc/host/meson-mx-sdhc-clkc.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/mmc/host/meson-mx-sdhc-clkc.c b/drivers/mmc/host/meson-mx-sdhc-clkc.c
index e1f29b279123..19200b7079a6 100644
--- a/drivers/mmc/host/meson-mx-sdhc-clkc.c
+++ b/drivers/mmc/host/meson-mx-sdhc-clkc.c
@@ -12,8 +12,6 @@
 
 #include "meson-mx-sdhc.h"
 
-#define MESON_SDHC_NUM_BUILTIN_CLKS	6
-
 struct meson_mx_sdhc_clkc {
 	struct clk_mux			src_sel;
 	struct clk_divider		div;
-- 
2.34.1


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

* Re: [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes
  2021-12-12 14:59 [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes Martin Blumenstingl
  2021-12-12 14:59 ` [PATCH v1 1/2] mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands Martin Blumenstingl
  2021-12-12 14:59 ` [PATCH v1 2/2] mmc: meson-mx-sdhc: Drop unused MESON_SDHC_NUM_BUILTIN_CLKS macro Martin Blumenstingl
@ 2021-12-13 13:01 ` Ulf Hansson
  2021-12-13 19:35   ` Martin Blumenstingl
  2 siblings, 1 reply; 7+ messages in thread
From: Ulf Hansson @ 2021-12-13 13:01 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: linux-mmc, linux-amlogic, linux-kernel, linux-arm-kernel

On Sun, 12 Dec 2021 at 16:00, Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:
>
> The first patch in this series fixes Broadcom SDIO wifi cards (using
> the brcmfmac driver) on Meson8 SoCs. Meson8b with Realtek (RTL8723BS)
> SDIO wifi is unaffected by this (it worked fine before). Testing was
> done (on the S82 board) in private by a user who wants to remain
> anonymous.
>
> The second patch in this series is a minor cleanup which I found when
> working on the first patch.
>
>
> Martin Blumenstingl (2):
>   mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands
>   mmc: meson-mx-sdhc: Drop unused MESON_SDHC_NUM_BUILTIN_CLKS macro
>
>  drivers/mmc/host/meson-mx-sdhc-clkc.c | 2 --
>  drivers/mmc/host/meson-mx-sdhc-mmc.c  | 9 +++++++++
>  2 files changed, 9 insertions(+), 2 deletions(-)
>

Hi Martin,

I noticed that you didn't cc the Maintainers from Baylibre, perhaps
the amlogic list is good enough?

Kind regards
Uffe

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

* Re: [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes
  2021-12-13 13:01 ` [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes Ulf Hansson
@ 2021-12-13 19:35   ` Martin Blumenstingl
  0 siblings, 0 replies; 7+ messages in thread
From: Martin Blumenstingl @ 2021-12-13 19:35 UTC (permalink / raw)
  To: Ulf Hansson; +Cc: linux-mmc, linux-amlogic, linux-kernel, linux-arm-kernel

Hi Ulf,

On Mon, Dec 13, 2021 at 2:01 PM Ulf Hansson <ulf.hansson@linaro.org> wrote:
[...]
> I noticed that you didn't cc the Maintainers from Baylibre, perhaps
> the amlogic list is good enough?
The Amlogic mailing list is typically good enough - they're all
subscribed there.
Also Kevin, Neil and Jerome are typically taking care of the
meson-gx-mmc driver which is used on newer (64-bit) SoCs.


Best regards,
Martin

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

* Re: [PATCH v1 1/2] mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands
  2021-12-12 14:59 ` [PATCH v1 1/2] mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands Martin Blumenstingl
@ 2021-12-14 13:20   ` Ulf Hansson
  2021-12-14 18:35     ` Martin Blumenstingl
  0 siblings, 1 reply; 7+ messages in thread
From: Ulf Hansson @ 2021-12-14 13:20 UTC (permalink / raw)
  To: Martin Blumenstingl
  Cc: linux-mmc, linux-amlogic, linux-kernel, linux-arm-kernel

On Sun, 12 Dec 2021 at 16:00, Martin Blumenstingl
<martin.blumenstingl@googlemail.com> wrote:
>
> The vendor driver implements special handling for multi-block
> SD_IO_RW_DIRECT and SD_IO_RW_EXTENDED commands. It sets the MANUAL_STOP
> bit in the MESON_SDHC_MISC register for these commands. In All other
> cases this bit is cleared.
>
> This fixes SDIO wifi using the brcmfmac driver which reported the
> following error without this change on a Netxeon S82 board using a
> Meson8 (S802) SoC:
>   brcmf_fw_alloc_request: using brcm/brcmfmac43362-sdio for chip
>                           BCM43362/1
>   brcmf_sdiod_ramrw: membytes transfer failed
>   brcmf_sdio_download_code_file: error -110 on writing 219557 membytes
>                                  at 0x00000000
>   brcmf_sdio_download_firmware: dongle image file download failed
>
> And with this change:
>   brcmf_fw_alloc_request: using brcm/brcmfmac43362-sdio for chip
>                           BCM43362/1
>   brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may
>                             have limited channels available
>   brcmf_c_preinit_dcmds: Firmware: BCM43362/1 wl0: Apr 22 2013 14:50:00
>                          version 5.90.195.89.6 FWID 01-b30a427d
>
> Fixes: e4bf1b0970ef96 ("mmc: host: meson-mx-sdhc: new driver for the Amlogic Meson SDHC host")
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
> ---
>  drivers/mmc/host/meson-mx-sdhc-mmc.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/drivers/mmc/host/meson-mx-sdhc-mmc.c b/drivers/mmc/host/meson-mx-sdhc-mmc.c
> index 7cd9c0ec2fcf..a89190d479cf 100644
> --- a/drivers/mmc/host/meson-mx-sdhc-mmc.c
> +++ b/drivers/mmc/host/meson-mx-sdhc-mmc.c
> @@ -135,6 +135,7 @@ static void meson_mx_sdhc_start_cmd(struct mmc_host *mmc,
>                                     struct mmc_command *cmd)
>  {
>         struct meson_mx_sdhc_host *host = mmc_priv(mmc);
> +       bool manual_stop = false;
>         u32 ictl, send;
>         int pack_len;
>
> @@ -172,12 +173,20 @@ static void meson_mx_sdhc_start_cmd(struct mmc_host *mmc,
>                 else
>                         /* software flush: */
>                         ictl |= MESON_SDHC_ICTL_DATA_XFER_OK;
> +

Maybe add a comment to explain a bit about this workaround here?

> +               manual_stop = cmd->data->blocks > 1 &&
> +                             (cmd->opcode == SD_IO_RW_DIRECT ||

SD_IO_RW_DIRECT doesn't have cmd->data, so checking for that command
doesn't make sense.

> +                              cmd->opcode == SD_IO_RW_EXTENDED);
>         } else {
>                 pack_len = 0;
>
>                 ictl |= MESON_SDHC_ICTL_RESP_OK;
>         }
>
> +       regmap_update_bits(host->regmap, MESON_SDHC_MISC,
> +                          MESON_SDHC_MISC_MANUAL_STOP,
> +                          manual_stop ? MESON_SDHC_MISC_MANUAL_STOP : 0);
> +
>         if (cmd->opcode == MMC_STOP_TRANSMISSION)
>                 send |= MESON_SDHC_SEND_DATA_STOP;
>
> --
> 2.34.1
>

Kind regards
Uffe

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

* Re: [PATCH v1 1/2] mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands
  2021-12-14 13:20   ` Ulf Hansson
@ 2021-12-14 18:35     ` Martin Blumenstingl
  0 siblings, 0 replies; 7+ messages in thread
From: Martin Blumenstingl @ 2021-12-14 18:35 UTC (permalink / raw)
  To: Ulf Hansson; +Cc: linux-mmc, linux-amlogic, linux-kernel, linux-arm-kernel

Hi Ulf,

On Tue, Dec 14, 2021 at 2:21 PM Ulf Hansson <ulf.hansson@linaro.org> wrote:
[...]
> > +
>
> Maybe add a comment to explain a bit about this workaround here?
sure, I'll add a paragraph for v2 because this workaround/fix is not obvious

> > +               manual_stop = cmd->data->blocks > 1 &&
> > +                             (cmd->opcode == SD_IO_RW_DIRECT ||
>
> SD_IO_RW_DIRECT doesn't have cmd->data, so checking for that command
> doesn't make sense.
This also means that you found a bug in the vendor driver :-)
I'll drop SD_IO_RW_DIRECT, do another round of testing and then send
an updated version.

Thank you for taking a closer look!


Best regards,
Martin

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

end of thread, other threads:[~2021-12-14 18:35 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-12 14:59 [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes Martin Blumenstingl
2021-12-12 14:59 ` [PATCH v1 1/2] mmc: meson-mx-sdhc: Set MANUAL_STOP for multi-block SDIO commands Martin Blumenstingl
2021-12-14 13:20   ` Ulf Hansson
2021-12-14 18:35     ` Martin Blumenstingl
2021-12-12 14:59 ` [PATCH v1 2/2] mmc: meson-mx-sdhc: Drop unused MESON_SDHC_NUM_BUILTIN_CLKS macro Martin Blumenstingl
2021-12-13 13:01 ` [PATCH v1 0/2] mmc: meson-mx-sdhc: two fixes Ulf Hansson
2021-12-13 19:35   ` Martin Blumenstingl

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).