2020-05-29 03:52:08

by Chi-Hsien Lin

[permalink] [raw]
Subject: [PATCH V2 0/5] brcmfmac: SDIO parameter change series

Set F2 blocksize and watermark for several chips to fix bus error during
stress tests.

Changes since V1:
- Remove unnecessary mail footnotes
- Rebase to wt-2020-05-25


Double Lo (2):
brcmfmac: fix 4339 CRC error under SDIO 3.0 SDR104 mode
brcmfmac: 43012 Update MES Watermark

Frank Kao (1):
brcmfmac: set F2 blocksize and watermark for 4354/4356 SDIO

Wright Feng (2):
brcmfmac: set F2 blocksize for 4373
brcmfmac: fix 43455 CRC error under SDIO 3.0 SDR104 mode

.../broadcom/brcm80211/brcmfmac/bcmsdh.c | 22 ++++++-
.../broadcom/brcm80211/brcmfmac/sdio.c | 58 ++++++++++++++++---
2 files changed, 70 insertions(+), 10 deletions(-)

--
2.25.0


2020-05-29 03:52:09

by Chi-Hsien Lin

[permalink] [raw]
Subject: [PATCH V2 1/5] brcmfmac: set F2 blocksize for 4373

From: Wright Feng <[email protected]>

Set F2 blocksize to 256 bytes for 4373. It fixes DMA error while having
UDP bi-directional traffic. Also use a defined F1 MesBusyCtrl value.

Signed-off-by: Wright Feng <[email protected]>
Signed-off-by: Chi-hsien Lin <[email protected]>
---
.../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 14 +++++++++++++-
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 4 ++--
2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
index 22a17ae09e94..bb3196cba683 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
@@ -43,6 +43,7 @@

#define SDIO_FUNC1_BLOCKSIZE 64
#define SDIO_FUNC2_BLOCKSIZE 512
+#define SDIO_4373_FUNC2_BLOCKSIZE 256
#define SDIO_4359_FUNC2_BLOCKSIZE 256
/* Maximum milliseconds to wait for F2 to come up */
#define SDIO_WAIT_F2RDY 3000
@@ -910,13 +911,24 @@ static int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev)
sdio_release_host(sdiodev->func1);
goto out;
}
- if (sdiodev->func2->device == SDIO_DEVICE_ID_BROADCOM_4359)
+ switch (sdiodev->func2->device) {
+ case SDIO_DEVICE_ID_CYPRESS_4373:
+ f2_blksz = SDIO_4373_FUNC2_BLOCKSIZE;
+ break;
+ case SDIO_DEVICE_ID_BROADCOM_4359:
f2_blksz = SDIO_4359_FUNC2_BLOCKSIZE;
+ break;
+ default:
+ break;
+ }
+
ret = sdio_set_block_size(sdiodev->func2, f2_blksz);
if (ret) {
brcmf_err("Failed to set F2 blocksize\n");
sdio_release_host(sdiodev->func1);
goto out;
+ } else {
+ brcmf_dbg(SDIO, "set F2 blocksize to %d\n", f2_blksz);
}

/* increase F2 timeout */
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index ce6f15284277..dce22cd2279d 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -41,6 +41,7 @@
/* watermark expressed in number of words */
#define DEFAULT_F2_WATERMARK 0x8
#define CY_4373_F2_WATERMARK 0x40
+#define CY_4373_F1_MESBUSYCTRL (CY_4373_F2_WATERMARK | SBSDIO_MESBUSYCTRL_ENAB)
#define CY_43012_F2_WATERMARK 0x60
#define CY_4359_F2_WATERMARK 0x40
#define CY_4359_F1_MESBUSYCTRL (CY_4359_F2_WATERMARK | SBSDIO_MESBUSYCTRL_ENAB)
@@ -4195,8 +4196,7 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
&err);
brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
- CY_4373_F2_WATERMARK |
- SBSDIO_MESBUSYCTRL_ENAB, &err);
+ CY_4373_F1_MESBUSYCTRL, &err);
break;
case SDIO_DEVICE_ID_CYPRESS_43012:
brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
--
2.25.0

2020-05-29 03:52:35

by Chi-Hsien Lin

[permalink] [raw]
Subject: [PATCH V2 5/5] brcmfmac: 43012 Update MES Watermark

From: Double Lo <[email protected]>

Set MES watermark size to 0x50 for 43012. It fixes SDIO bus hang issue
when running at high throughput.

Signed-off-by: Double Lo <[email protected]>
Signed-off-by: Chi-hsien Lin <[email protected]>
---
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 58d9f0b90ad3..760b7737e745 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -43,6 +43,9 @@
#define CY_4373_F2_WATERMARK 0x40
#define CY_4373_F1_MESBUSYCTRL (CY_4373_F2_WATERMARK | SBSDIO_MESBUSYCTRL_ENAB)
#define CY_43012_F2_WATERMARK 0x60
+#define CY_43012_MES_WATERMARK 0x50
+#define CY_43012_MESBUSYCTRL (CY_43012_MES_WATERMARK | \
+ SBSDIO_MESBUSYCTRL_ENAB)
#define CY_4339_F2_WATERMARK 48
#define CY_4339_MES_WATERMARK 80
#define CY_4339_MESBUSYCTRL (CY_4339_MES_WATERMARK | \
@@ -4217,6 +4220,8 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
&err);
+ brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
+ CY_43012_MESBUSYCTRL, &err);
break;
case SDIO_DEVICE_ID_BROADCOM_4339:
brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes for 4339\n",
--
2.25.0

2020-05-29 17:42:26

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH V2 1/5] brcmfmac: set F2 blocksize for 4373

Chi-Hsien Lin <[email protected]> wrote:

> From: Wright Feng <[email protected]>
>
> Set F2 blocksize to 256 bytes for 4373. It fixes DMA error while having
> UDP bi-directional traffic. Also use a defined F1 MesBusyCtrl value.
>
> Signed-off-by: Wright Feng <[email protected]>
> Signed-off-by: Chi-hsien Lin <[email protected]>

5 patches applied to wireless-drivers-next.git, thanks.

2a7621ded321 brcmfmac: set F2 blocksize for 4373
528158a8d452 brcmfmac: fix 4339 CRC error under SDIO 3.0 SDR104 mode
2bee41270f3b brcmfmac: set F2 blocksize and watermark for 4354/4356 SDIO
df18c257bd6a brcmfmac: fix 43455 CRC error under SDIO 3.0 SDR104 mode
113a57a400a2 brcmfmac: 43012 Update MES Watermark

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

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