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
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 <[email protected]>
---
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
Remove MESON_SDHC_NUM_BUILTIN_CLKS because it is not used anywhere in
the driver.
Signed-off-by: Martin Blumenstingl <[email protected]>
---
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
On Sun, 12 Dec 2021 at 16:00, Martin Blumenstingl
<[email protected]> 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
Hi Ulf,
On Mon, Dec 13, 2021 at 2:01 PM Ulf Hansson <[email protected]> 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
On Sun, 12 Dec 2021 at 16:00, Martin Blumenstingl
<[email protected]> 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 <[email protected]>
> ---
> 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
Hi Ulf,
On Tue, Dec 14, 2021 at 2:21 PM Ulf Hansson <[email protected]> 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