MLK-19516 brcmfmac: fix 4339 CRC error under SDIO 3.0 SDR104 mode
authorDouble Lo <dblo@cypress.com>
Thu, 6 Sep 2018 05:49:41 +0000 (00:49 -0500)
committerLeonard Crestez <leonard.crestez@nxp.com>
Wed, 17 Apr 2019 23:51:34 +0000 (02:51 +0300)
This patch fixes 4339 CRC error while running Tput test with
suspend/resume test script. Update F2 Watermark to 48 to avoid
CRC error.

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

Tested-by: Fugang Duan <fugang.duan@nxp.com>
Signed-off-by: Lo-Hsiang Lo <double.lo@cypress.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Signed-off-by: Vipul Kumar <vipul_kumar@mentor.com>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h

index b81e263..ce85941 100644 (file)
@@ -55,7 +55,9 @@
 #define DEFAULT_F2_WATERMARK    0x8
 #define CY_4373_F2_WATERMARK    0x40
 #define CY_43012_F2_WATERMARK    0x60
-
+#define CY_4339_F2_WATERMARK   48
+#define CY_4339_MES_WATERMARK  80
+#define CY_4339_MESBUSYCTRL    (CY_4339_MES_WATERMARK | SBSDIO_MESBUSYCTRL_ENAB)
 #ifdef DEBUG
 
 #define BRCMF_TRAP_INFO_SIZE   80
@@ -4346,6 +4348,18 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
                        brcmf_sdiod_writeb(sdiod,
                                           SBSDIO_DEVICE_CTL, devctl, &err);
                        break;
+               case SDIO_DEVICE_ID_BROADCOM_4339:
+                       brcmf_sdiod_writeb(sdiod,
+                                          SBSDIO_WATERMARK,
+                                          CY_4339_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_4339_MESBUSYCTRL, &err);
+                       break;
                default:
                        brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK, DEFAULT_F2_WATERMARK, &err);
                        break;
index 562aab5..9c5c0dc 100644 (file)
 #define SBSDIO_FUNC1_RFRAMEBCHI                0x1001C
 /* MesBusyCtl (rev 11) */
 #define SBSDIO_FUNC1_MESBUSYCTRL       0x1001D
+/* Enable busy capability for MES access */
+#define SBSDIO_MESBUSYCTRL_ENAB         0x80
 /* Sdio Core Rev 12 */
 #define SBSDIO_FUNC1_WAKEUPCTRL                0x1001E
 #define SBSDIO_FUNC1_WCTRL_ALPWAIT_MASK                0x1