diff mbox series

[3/5] brcmfmac: set F2 blocksize and watermark for 4354/4356 SDIO

Message ID 20200521034838.57371-4-chi-hsien.lin@cypress.com (mailing list archive)
State Superseded
Delegated to: Kalle Valo
Headers show
Series brcmfmac: SDIO parameter change series | expand

Commit Message

Chi-Hsien Lin May 21, 2020, 3:48 a.m. UTC
From: Frank Kao <frank.kao@cypress.com>

Set F2 blocksize to 256 bytes and watermark to 0x40 for 4354/4356 SDIO.
Also enable and configure F1 MesBusyCtrl. It would resolve random driver
crash issue.

Signed-off-by: Frank Kao <frank.kao@cypress.com>
Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com>
---
 .../broadcom/brcm80211/brcmfmac/bcmsdh.c         |  8 ++++++--
 .../wireless/broadcom/brcm80211/brcmfmac/sdio.c  | 16 ++++++++++------
 2 files changed, 16 insertions(+), 8 deletions(-)

--
2.25.0


This message and any attachments may contain confidential information from Cypress or its subsidiaries. If it has been received in error, please advise the sender and immediately delete this message.
diff mbox series

Patch

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
index bb3196cba683..b1a66320ba54 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
@@ -44,7 +44,7 @@ 
 #define SDIO_FUNC1_BLOCKSIZE           64
 #define SDIO_FUNC2_BLOCKSIZE           512
 #define SDIO_4373_FUNC2_BLOCKSIZE      256
-#define SDIO_4359_FUNC2_BLOCKSIZE      256
+#define SDIO_435X_FUNC2_BLOCKSIZE      256
 /* Maximum milliseconds to wait for F2 to come up */
 #define SDIO_WAIT_F2RDY        3000

@@ -916,7 +916,11 @@  static int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev)
                f2_blksz = SDIO_4373_FUNC2_BLOCKSIZE;
                break;
        case SDIO_DEVICE_ID_BROADCOM_4359:
-               f2_blksz = SDIO_4359_FUNC2_BLOCKSIZE;
+               /* fallthrough */
+       case SDIO_DEVICE_ID_BROADCOM_4354:
+               /* fallthrough */
+       case SDIO_DEVICE_ID_BROADCOM_4356:
+               f2_blksz = SDIO_435X_FUNC2_BLOCKSIZE;
                break;
        default:
                break;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 491b635e72b1..037a4efef924 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -47,9 +47,9 @@ 
 #define CY_4339_MES_WATERMARK  80
 #define CY_4339_MESBUSYCTRL    (CY_4339_MES_WATERMARK | \
                                 SBSDIO_MESBUSYCTRL_ENAB)
-#define CY_4359_F2_WATERMARK   0x40
-#define CY_4359_F1_MESBUSYCTRL (CY_4359_F2_WATERMARK | SBSDIO_MESBUSYCTRL_ENAB)
-
+#define CY_435X_F2_WATERMARK   0x40
+#define CY_435X_F1_MESBUSYCTRL (CY_435X_F2_WATERMARK | \
+                                SBSDIO_MESBUSYCTRL_ENAB)
 #ifdef DEBUG

 #define BRCMF_TRAP_INFO_SIZE   80
@@ -4227,17 +4227,21 @@  static void brcmf_sdio_firmware_callback(struct device *dev, int err,
                                           CY_4339_MESBUSYCTRL, &err);
                        break;
                case SDIO_DEVICE_ID_BROADCOM_4359:
+                       /* fallthrough */
+               case SDIO_DEVICE_ID_BROADCOM_4354:
+                       /* fallthrough */
+               case SDIO_DEVICE_ID_BROADCOM_4356:
                        brcmf_dbg(INFO, "set F2 watermark to 0x%x*4 bytes\n",
-                                 CY_4359_F2_WATERMARK);
+                                 CY_435X_F2_WATERMARK);
                        brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,
-                                          CY_4359_F2_WATERMARK, &err);
+                                          CY_435X_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);
                        brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL,
-                                          CY_4359_F1_MESBUSYCTRL, &err);
+                                          CY_435X_F1_MESBUSYCTRL, &err);
                        break;
                default:
                        brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK,