12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- From f56324baf329bc9362a52ad77a4a1a0f3356d1bc Mon Sep 17 00:00:00 2001
- From: Franky Lin <franky.lin@broadcom.com>
- Date: Thu, 26 Apr 2018 12:16:51 +0200
- Subject: [PATCH] brcmfmac: coarse support for PCIe shared structure rev7
- Revision 7 of PCIe dongle interface increases the item size of tx and rx
- complete rings to accommodate extra payload for new feature. This patch
- simply bump up the size of these two rings without adding the support
- for utilizing the new space. This makes brcmfmac compatible with rev7
- firmware.
- Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
- Signed-off-by: Franky Lin <franky.lin@broadcom.com>
- Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
- Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
- ---
- .../wireless/broadcom/brcm80211/brcmfmac/msgbuf.h | 6 ++++--
- .../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 23 ++++++++++++++++++----
- 2 files changed, 23 insertions(+), 6 deletions(-)
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h
- @@ -27,8 +27,10 @@
- #define BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE 40
- #define BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE 32
- #define BRCMF_D2H_MSGRING_CONTROL_COMPLETE_ITEMSIZE 24
- -#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE 16
- -#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE 32
- +#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE_PRE_V7 16
- +#define BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE 24
- +#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE_PRE_V7 32
- +#define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE 40
- #define BRCMF_H2D_TXFLOWRING_ITEMSIZE 48
-
- struct msgbuf_buf_addr {
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
- @@ -135,8 +135,9 @@ static struct brcmf_firmware_mapping brc
- BRCMF_PCIE_MB_INT_D2H3_DB0 | \
- BRCMF_PCIE_MB_INT_D2H3_DB1)
-
- +#define BRCMF_PCIE_SHARED_VERSION_7 7
- #define BRCMF_PCIE_MIN_SHARED_VERSION 5
- -#define BRCMF_PCIE_MAX_SHARED_VERSION 6
- +#define BRCMF_PCIE_MAX_SHARED_VERSION BRCMF_PCIE_SHARED_VERSION_7
- #define BRCMF_PCIE_SHARED_VERSION_MASK 0x00FF
- #define BRCMF_PCIE_SHARED_DMA_INDEX 0x10000
- #define BRCMF_PCIE_SHARED_DMA_2B_IDX 0x100000
- @@ -316,6 +317,14 @@ static const u32 brcmf_ring_max_item[BRC
- BRCMF_D2H_MSGRING_RX_COMPLETE_MAX_ITEM
- };
-
- +static const u32 brcmf_ring_itemsize_pre_v7[BRCMF_NROF_COMMON_MSGRINGS] = {
- + BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE,
- + BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE,
- + BRCMF_D2H_MSGRING_CONTROL_COMPLETE_ITEMSIZE,
- + BRCMF_D2H_MSGRING_TX_COMPLETE_ITEMSIZE_PRE_V7,
- + BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE_PRE_V7
- +};
- +
- static const u32 brcmf_ring_itemsize[BRCMF_NROF_COMMON_MSGRINGS] = {
- BRCMF_H2D_MSGRING_CONTROL_SUBMIT_ITEMSIZE,
- BRCMF_H2D_MSGRING_RXPOST_SUBMIT_ITEMSIZE,
- @@ -999,8 +1008,14 @@ brcmf_pcie_alloc_dma_and_ring(struct brc
- struct brcmf_pcie_ringbuf *ring;
- u32 size;
- u32 addr;
- + const u32 *ring_itemsize_array;
- +
- + if (devinfo->shared.version < BRCMF_PCIE_SHARED_VERSION_7)
- + ring_itemsize_array = brcmf_ring_itemsize_pre_v7;
- + else
- + ring_itemsize_array = brcmf_ring_itemsize;
-
- - size = brcmf_ring_max_item[ring_id] * brcmf_ring_itemsize[ring_id];
- + size = brcmf_ring_max_item[ring_id] * ring_itemsize_array[ring_id];
- dma_buf = brcmf_pcie_init_dmabuffer_for_device(devinfo, size,
- tcm_ring_phys_addr + BRCMF_RING_MEM_BASE_ADDR_OFFSET,
- &dma_handle);
- @@ -1010,7 +1025,7 @@ brcmf_pcie_alloc_dma_and_ring(struct brc
- addr = tcm_ring_phys_addr + BRCMF_RING_MAX_ITEM_OFFSET;
- brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_max_item[ring_id]);
- addr = tcm_ring_phys_addr + BRCMF_RING_LEN_ITEMS_OFFSET;
- - brcmf_pcie_write_tcm16(devinfo, addr, brcmf_ring_itemsize[ring_id]);
- + brcmf_pcie_write_tcm16(devinfo, addr, ring_itemsize_array[ring_id]);
-
- ring = kzalloc(sizeof(*ring), GFP_KERNEL);
- if (!ring) {
- @@ -1019,7 +1034,7 @@ brcmf_pcie_alloc_dma_and_ring(struct brc
- return NULL;
- }
- brcmf_commonring_config(&ring->commonring, brcmf_ring_max_item[ring_id],
- - brcmf_ring_itemsize[ring_id], dma_buf);
- + ring_itemsize_array[ring_id], dma_buf);
- ring->dma_handle = dma_handle;
- ring->devinfo = devinfo;
- brcmf_commonring_register_cb(&ring->commonring,
|