From 95d1177050c96736c3f9d23ceb2c16229db1ff71 Mon Sep 17 00:00:00 2001 From: Ting-Ying Li Date: Thu, 15 Jul 2021 21:16:09 -0500 Subject: [PATCH 066/296] brcmfmac: Add CYW89459 HW ID and modify sdio F2 block size/watermark - Add 4359d0 HW ID for supporting 89459 SDIO. - Modifying SDIO FUNC2 block size/watermark and mes watermark suggested by chip team. - Add more SDIO vendor and device ids for supporting CYW89459 commercial products. Signed-off-by: Ting-Ying Li --- .../broadcom/brcm80211/brcmfmac/bcmsdh.c | 12 +++++++++- .../broadcom/brcm80211/brcmfmac/sdio.c | 24 ++++++++++++++++++- .../broadcom/brcm80211/include/brcm_hw_ids.h | 1 + 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c index f768cc085395..d8551b8a8342 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c @@ -47,6 +47,7 @@ #define SDIO_4373_FUNC2_BLOCKSIZE 256 #define SDIO_435X_FUNC2_BLOCKSIZE 256 #define SDIO_4329_FUNC2_BLOCKSIZE 128 +#define SDIO_89459_FUNC2_BLOCKSIZE 256 /* Maximum milliseconds to wait for F2 to come up */ #define SDIO_WAIT_F2RDY 3000 @@ -918,6 +919,12 @@ int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev) case SDIO_DEVICE_ID_BROADCOM_4329: f2_blksz = SDIO_4329_FUNC2_BLOCKSIZE; break; + case SDIO_DEVICE_ID_BROADCOM_CYPRESS_89459: + case SDIO_DEVICE_ID_CYPRESS_54590: + case SDIO_DEVICE_ID_CYPRESS_54591: + case SDIO_DEVICE_ID_CYPRESS_54594: + f2_blksz = SDIO_89459_FUNC2_BLOCKSIZE; + break; default: break; } @@ -996,8 +1003,11 @@ static const struct sdio_device_id brcmf_sdmmc_ids[] = { BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_4373, CYW), BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43012, CYW), BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_43752, CYW), - BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_89359, CYW), + BRCMF_SDIO_DEVICE(SDIO_DEVICE_ID_BROADCOM_CYPRESS_89459, CYW), CYW_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_43439, CYW), + CYW_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_54590, CYW), + CYW_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_54591, CYW), + CYW_SDIO_DEVICE(SDIO_DEVICE_ID_CYPRESS_54594, CYW), { /* end: all zeroes */ } }; MODULE_DEVICE_TABLE(sdio, brcmf_sdmmc_ids); diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index 32fd74f31227..f09c1f23ed8b 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -65,6 +65,10 @@ #define CY_435X_F2_WATERMARK 0x40 #define CY_435X_F1_MESBUSYCTRL (CY_435X_F2_WATERMARK | \ SBSDIO_MESBUSYCTRL_ENAB) +#define CY_89459_F2_WATERMARK 0x40 +#define CY_89459_MES_WATERMARK 0x40 +#define CY_89459_MESBUSYCTRL (CY_89459_MES_WATERMARK | \ + SBSDIO_MESBUSYCTRL_ENAB) #ifdef DEBUG @@ -641,6 +645,7 @@ CY_FW_DEF(4359, "cyfmac4359-sdio"); CY_FW_DEF(4373, "cyfmac4373-sdio"); CY_FW_DEF(43012, "cyfmac43012-sdio"); BRCMF_FW_CLM_DEF(43752, "brcmfmac43752-sdio"); +CY_FW_DEF(89459, "cyfmac54591-sdio"); /* firmware config files */ MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-sdio.*.txt"); @@ -674,7 +679,8 @@ static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = { BRCMF_FW_ENTRY(CY_CC_4373_CHIP_ID, 0xFFFFFFFF, 4373), BRCMF_FW_ENTRY(CY_CC_43012_CHIP_ID, 0xFFFFFFFF, 43012), BRCMF_FW_ENTRY(CY_CC_43439_CHIP_ID, 0xFFFFFFFF, 43439), - BRCMF_FW_ENTRY(CY_CC_43752_CHIP_ID, 0xFFFFFFFF, 43752) + BRCMF_FW_ENTRY(CY_CC_43752_CHIP_ID, 0xFFFFFFFF, 43752), + BRCMF_FW_ENTRY(CY_CC_89459_CHIP_ID, 0xFFFFFFFF, 89459) }; #define TXCTL_CREDITS 2 @@ -4605,6 +4611,22 @@ static void brcmf_sdio_firmware_callback(struct device *dev, int err, brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_MESBUSYCTRL, CY_435X_F1_MESBUSYCTRL, &err); break; + case SDIO_DEVICE_ID_BROADCOM_CYPRESS_89459: + case SDIO_DEVICE_ID_CYPRESS_54590: + case SDIO_DEVICE_ID_CYPRESS_54591: + case SDIO_DEVICE_ID_CYPRESS_54594: + brcmf_dbg(INFO, "set F2/MES watermark to 0x%x*4 / 0x%x bytes for 89459\n", + CY_89459_F2_WATERMARK, CY_89459_MESBUSYCTRL); + brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK, + CY_89459_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_89459_MESBUSYCTRL, &err); + break; default: brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK, DEFAULT_F2_WATERMARK, &err); diff --git a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h index 46b0dd3a7da3..b7a39944d8c4 100644 --- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h +++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h @@ -61,6 +61,7 @@ #define CY_CC_43439_CHIP_ID 43439 #define CY_CC_43752_CHIP_ID 43752 #define CY_CC_54591_CHIP_ID 0x4355 +#define CY_CC_89459_CHIP_ID 0x4355 /* USB Device IDs */ #define BRCM_USB_43143_DEVICE_ID 0xbd1e -- 2.25.1