329-v5.0-0006-brcmfmac-update-43012-F2-watermark-setting-to-fix-DM.patch 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. From f95a8d9c6aca196f1ace5b2e53a3dd3bc491b1b3 Mon Sep 17 00:00:00 2001
  2. From: Naveen Gupta <[email protected]>
  3. Date: Wed, 21 Nov 2018 07:53:49 +0000
  4. Subject: [PATCH] brcmfmac: update 43012 F2 watermark setting to fix DMA Error
  5. during UDP RX Traffic
  6. The number of words that the read FIFO has to contain except
  7. the end of frame before sends data back to the host.
  8. Max watermark = (512B - 2* (BurstLength))/4 =
  9. (512 - 128)/4 = 384/4 = 0x60
  10. so if burst length (i.e. BurstLength = 64) is increased,
  11. watermark has to be reduced. This is the optimal setting for this chip.
  12. Reviewed-by: Arend van Spriel <[email protected]>
  13. Signed-off-by: Naveen Gupta <[email protected]>
  14. Signed-off-by: Chi-Hsien Lin <[email protected]>
  15. Signed-off-by: Kalle Valo <[email protected]>
  16. ---
  17. .../net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 12 ++++++++++++
  18. 1 file changed, 12 insertions(+)
  19. --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  20. +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
  21. @@ -52,6 +52,7 @@
  22. /* watermark expressed in number of words */
  23. #define DEFAULT_F2_WATERMARK 0x8
  24. #define CY_4373_F2_WATERMARK 0x40
  25. +#define CY_43012_F2_WATERMARK 0x60
  26. #ifdef DEBUG
  27. @@ -4173,6 +4174,17 @@ static void brcmf_sdio_firmware_callback
  28. CY_4373_F2_WATERMARK |
  29. SBSDIO_MESBUSYCTRL_ENAB, &err);
  30. break;
  31. + case SDIO_DEVICE_ID_CYPRESS_43012:
  32. + brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
  33. + CY_43012_F2_WATERMARK);
  34. + brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
  35. + CY_43012_F2_WATERMARK, &err);
  36. + devctl = brcmf_sdiod_readb(sdiod, SBSDIO_DEVICE_CTL,
  37. + &err);
  38. + devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
  39. + brcmf_sdiod_writeb(sdiod, SBSDIO_DEVICE_CTL, devctl,
  40. + &err);
  41. + break;
  42. default:
  43. brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
  44. DEFAULT_F2_WATERMARK, &err);