Skip to content

Commit df18c25

Browse files
WenChieh-FengKalle Valo
authored andcommitted
brcmfmac: fix 43455 CRC error under SDIO 3.0 SDR104 mode
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 <[email protected]> Signed-off-by: Chi-hsien Lin <[email protected]> Signed-off-by: Kalle Valo <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 2bee412 commit df18c25

File tree

1 file changed

+18
-0
lines changed
  • drivers/net/wireless/broadcom/brcm80211/brcmfmac

1 file changed

+18
-0
lines changed

drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,14 @@
4747
#define CY_4339_MES_WATERMARK 80
4848
#define CY_4339_MESBUSYCTRL (CY_4339_MES_WATERMARK | \
4949
SBSDIO_MESBUSYCTRL_ENAB)
50+
#define CY_43455_F2_WATERMARK 0x60
51+
#define CY_43455_MES_WATERMARK 0x50
52+
#define CY_43455_MESBUSYCTRL (CY_43455_MES_WATERMARK | \
53+
SBSDIO_MESBUSYCTRL_ENAB)
5054
#define CY_435X_F2_WATERMARK 0x40
5155
#define CY_435X_F1_MESBUSYCTRL (CY_435X_F2_WATERMARK | \
5256
SBSDIO_MESBUSYCTRL_ENAB)
57+
5358
#ifdef DEBUG
5459

5560
#define BRCMF_TRAP_INFO_SIZE 80
@@ -4226,6 +4231,19 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
42264231
brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
42274232
CY_4339_MESBUSYCTRL, &err);
42284233
break;
4234+
case SDIO_DEVICE_ID_BROADCOM_43455:
4235+
brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes for 43455\n",
4236+
CY_43455_F2_WATERMARK);
4237+
brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
4238+
CY_43455_F2_WATERMARK, &err);
4239+
devctl = brcmf_sdiod_readb(sdiod, SBSDIO_DEVICE_CTL,
4240+
&err);
4241+
devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
4242+
brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
4243+
&err);
4244+
brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
4245+
CY_43455_MESBUSYCTRL, &err);
4246+
break;
42294247
case SDIO_DEVICE_ID_BROADCOM_4359:
42304248
/* fallthrough */
42314249
case SDIO_DEVICE_ID_BROADCOM_4354:

0 commit comments

Comments
 (0)