summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/broadcom/brcm80211/brcmfmac
diff options
context:
space:
mode:
authorNaveen <nagu@cypress.com>2018-01-04 11:34:15 +0530
committerJason Liu <jason.hui.liu@nxp.com>2019-02-12 10:32:22 +0800
commitc70ade13c9b36de24e730859cbb0ddefab6425c7 (patch)
tree0cfeb3b137b522b220e27f7f73e8f374b4777be3 /drivers/net/wireless/broadcom/brcm80211/brcmfmac
parent5ca71172008a1c99ad5a8711348bd530688243b9 (diff)
MLK-18675-11 brcmfmac: 43012 Update F2 Watermark to 0x60 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. Signed-off-by: Naveen Gupta <nagu@cypress.com> Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Diffstat (limited to 'drivers/net/wireless/broadcom/brcm80211/brcmfmac')
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 3ed0dd051377..508b248395f1 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -51,6 +51,7 @@
#define DEFAULT_F2_WATERMARK 0x8
#define CY_4373_F2_WATERMARK 0x40
+#define CY_43012_F2_WATERMARK 0x60
#ifdef DEBUG
@@ -4119,7 +4120,6 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
offsetof(struct sdpcmd_regs, hostintmask));
switch (sdiodev->func[0]->device) {
case SDIO_DEVICE_ID_CYPRESS_4373:
- case SDIO_DEVICE_ID_CYPRESS_43012:
brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
CY_4373_F2_WATERMARK);
brcmf_sdiod_regwb(sdiodev, SBSDIO_WATERMARK, CY_4373_F2_WATERMARK, &err);
@@ -4127,6 +4127,18 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err,
devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
brcmf_sdiod_regwb(sdiodev, SBSDIO_DEVICE_CTL, devctl, &err);
break;
+ case SDIO_DEVICE_ID_CYPRESS_43012:
+ brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes for 43012\n",
+ CY_43012_F2_WATERMARK);
+ brcmf_sdiod_regwb(sdiodev,
+ SBSDIO_WATERMARK,
+ CY_43012_F2_WATERMARK, &err);
+ devctl = brcmf_sdiod_regrb(sdiodev,
+ SBSDIO_DEVICE_CTL, &err);
+ devctl |= SBSDIO_DEVCTL_F2WM_ENAB;
+ brcmf_sdiod_regwb(sdiodev,
+ SBSDIO_DEVICE_CTL, devctl, &err);
+ break;
default:
brcmf_sdiod_regwb(sdiodev, SBSDIO_WATERMARK, DEFAULT_F2_WATERMARK, &err);
break;