mac80211: brcmfmac: backport remaining patches from the Linux 5.0
[openwrt/staging/lynxis.git] / package / kernel / mac80211 / patches / brcm / 329-v5.0-0006-brcmfmac-update-43012-F2-watermark-setting-to-fix-DM.patch
diff --git a/package/kernel/mac80211/patches/brcm/329-v5.0-0006-brcmfmac-update-43012-F2-watermark-setting-to-fix-DM.patch b/package/kernel/mac80211/patches/brcm/329-v5.0-0006-brcmfmac-update-43012-F2-watermark-setting-to-fix-DM.patch
new file mode 100644 (file)
index 0000000..3b44952
--- /dev/null
@@ -0,0 +1,49 @@
+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
+@@ -4173,6 +4174,17 @@ static void brcmf_sdio_firmware_callback
+                                          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);