diff mbox series

[4/5] brcmfmac: fix 43455 CRC error under SDIO 3.0 SDR104 mode

Message ID 20200521034838.57371-5-chi-hsien.lin@cypress.com (mailing list archive)
State Superseded
Delegated to: Kalle Valo
Headers show
Series brcmfmac: SDIO parameter change series | expand

Commit Message

Chi-Hsien Lin May 21, 2020, 3:48 a.m. UTC
From: Wright Feng <wright.feng@cypress.com>

This patch fixes 43455 CRC error while running throughput test with
suspend/resume stress test.

The continuous failure messages before system crash:
brcmfmac: brcmf_sdiod_sglist_rw: CMD53 sg block read failed -84
brcmfmac: brcmf_sdio_rxglom: glom read of 25600 bytes failed: -5
brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame
brcmfmac: brcmf_sdiod_sglist_rw: CMD53 sg block read failed -84
brcmfmac: brcmf_sdio_rxglom: glom read of 24576 bytes failed: -5
brcmfmac: brcmf_sdio_rxfail: abort command, terminate frame

Signed-off-by: Wright Feng <wright.feng@cypress.com>
Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>
---
 .../broadcom/brcm80211/brcmfmac/sdio.c         | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

--
2.25.0


This message and any attachments may contain confidential information from Cypress or its subsidiaries. If it has been received in error, please advise the sender and immediately delete this message.
diff mbox series

Patch

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 037a4efef924..58d9f0b90ad3 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -47,9 +47,14 @@ 
 #define CY_4339_MES_WATERMARK  80
 #define CY_4339_MESBUSYCTRL    (CY_4339_MES_WATERMARK | \
                                 SBSDIO_MESBUSYCTRL_ENAB)
+#define CY_43455_F2_WATERMARK  0x60
+#define CY_43455_MES_WATERMARK 0x50
+#define CY_43455_MESBUSYCTRL   (CY_43455_MES_WATERMARK | \
+                                SBSDIO_MESBUSYCTRL_ENAB)
 #define CY_435X_F2_WATERMARK   0x40
 #define CY_435X_F1_MESBUSYCTRL (CY_435X_F2_WATERMARK | \
                                 SBSDIO_MESBUSYCTRL_ENAB)
+
 #ifdef DEBUG

 #define BRCMF_TRAP_INFO_SIZE   80
@@ -4226,6 +4231,19 @@  static void brcmf_sdio_firmware_callback(struct device *dev, int err,
                        brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
                                           CY_4339_MESBUSYCTRL, &err);
                        break;
+               case SDIO_DEVICE_ID_BROADCOM_43455:
+                       brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes for 43455\n",
+                                 CY_43455_F2_WATERMARK);
+                       brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
+                                          CY_43455_F2_WATERMARK, &err);
+                       devctl = brcmf_sdiod_readb(sdiod, SBSDIO_DEVICE_CTL,
+                                                  &err);
+                       devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
+                       brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
+                                          &err);
+                       brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
+                                          CY_43455_MESBUSYCTRL, &err);
+                       break;
                case SDIO_DEVICE_ID_BROADCOM_4359:
                        /* fallthrough */
                case SDIO_DEVICE_ID_BROADCOM_4354: