2019-02-12 12:43:06 +00:00
|
|
|
From f95a8d9c6aca196f1ace5b2e53a3dd3bc491b1b3 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Naveen Gupta <naveen.gupta@cypress.com>
|
|
|
|
Date: Wed, 21 Nov 2018 07:53:49 +0000
|
|
|
|
Subject: [PATCH] brcmfmac: update 43012 F2 watermark setting to fix DMA Error
|
|
|
|
during UDP RX Traffic
|
|
|
|
|
|
|
|
The number of words that the read FIFO has to contain except
|
|
|
|
the end of frame before sends data back to the host.
|
|
|
|
Max watermark = (512B - 2* (BurstLength))/4 =
|
|
|
|
(512 - 128)/4 = 384/4 = 0x60
|
|
|
|
so if burst length (i.e. BurstLength = 64) is increased,
|
|
|
|
watermark has to be reduced. This is the optimal setting for this chip.
|
|
|
|
|
|
|
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
|
|
|
Signed-off-by: Naveen Gupta <naveen.gupta@cypress.com>
|
|
|
|
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
|
|
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
|
|
---
|
|
|
|
.../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 12 ++++++++++++
|
|
|
|
1 file changed, 12 insertions(+)
|
|
|
|
|
|
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
|
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
|
|
|
@@ -52,6 +52,7 @@
|
|
|
|
/* watermark expressed in number of words */
|
|
|
|
#define DEFAULT_F2_WATERMARK 0x8
|
|
|
|
#define CY_4373_F2_WATERMARK 0x40
|
|
|
|
+#define CY_43012_F2_WATERMARK 0x60
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
2019-07-06 22:08:20 +00:00
|
|
|
@@ -4184,6 +4185,17 @@ static void brcmf_sdio_firmware_callback
|
2019-02-12 12:43:06 +00:00
|
|
|
CY_4373_F2_WATERMARK |
|
|
|
|
SBSDIO_MESBUSYCTRL_ENAB, &err);
|
|
|
|
break;
|
|
|
|
+ case SDIO_DEVICE_ID_CYPRESS_43012:
|
|
|
|
+ brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
|
|
|
|
+ CY_43012_F2_WATERMARK);
|
|
|
|
+ brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
|
|
|
+ CY_43012_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);
|
|
|
|
+ break;
|
|
|
|
default:
|
|
|
|
brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
|
|
|
|
DEFAULT_F2_WATERMARK, &err);
|