aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/357-0001-brcmfmac-add-pcie-host-dongle-interface-rev6-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/mac80211/patches/357-0001-brcmfmac-add-pcie-host-dongle-interface-rev6-support.patch')
-rw-r--r--package/kernel/mac80211/patches/357-0001-brcmfmac-add-pcie-host-dongle-interface-rev6-support.patch490
1 files changed, 0 insertions, 490 deletions
diff --git a/package/kernel/mac80211/patches/357-0001-brcmfmac-add-pcie-host-dongle-interface-rev6-support.patch b/package/kernel/mac80211/patches/357-0001-brcmfmac-add-pcie-host-dongle-interface-rev6-support.patch
deleted file mode 100644
index e09391332b..0000000000
--- a/package/kernel/mac80211/patches/357-0001-brcmfmac-add-pcie-host-dongle-interface-rev6-support.patch
+++ /dev/null
@@ -1,490 +0,0 @@
-From be4b092cab84b2ecc01ee7f4da6a044279430b6f Mon Sep 17 00:00:00 2001
-From: Franky Lin <franky.lin@broadcom.com>
-Date: Wed, 23 Nov 2016 10:25:20 +0000
-Subject: [PATCH] brcmfmac: add pcie host dongle interface rev6 support
-
-In rev6 of pcie host dongle interface protocol, host needs to maximum
-supported ring number from dongle shared memory and set up ring buffer
-and ring indices offset accordingly.
-
-Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
-Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
-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>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 10 +-
- .../wireless/broadcom/brcm80211/brcmfmac/msgbuf.c | 38 +++--
- .../wireless/broadcom/brcm80211/brcmfmac/msgbuf.h | 4 +
- .../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 171 ++++++++++++---------
- 4 files changed, 132 insertions(+), 91 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-@@ -22,10 +22,12 @@
- /* IDs of the 6 default common rings of msgbuf protocol */
- #define BRCMF_H2D_MSGRING_CONTROL_SUBMIT 0
- #define BRCMF_H2D_MSGRING_RXPOST_SUBMIT 1
-+#define BRCMF_H2D_MSGRING_FLOWRING_IDSTART 2
- #define BRCMF_D2H_MSGRING_CONTROL_COMPLETE 2
- #define BRCMF_D2H_MSGRING_TX_COMPLETE 3
- #define BRCMF_D2H_MSGRING_RX_COMPLETE 4
-
-+
- #define BRCMF_NROF_H2D_COMMON_MSGRINGS 2
- #define BRCMF_NROF_D2H_COMMON_MSGRINGS 3
- #define BRCMF_NROF_COMMON_MSGRINGS (BRCMF_NROF_H2D_COMMON_MSGRINGS + \
-@@ -95,14 +97,18 @@ struct brcmf_bus_ops {
- * @flowrings: commonrings which are dynamically created and destroyed for data.
- * @rx_dataoffset: if set then all rx data has this this offset.
- * @max_rxbufpost: maximum number of buffers to post for rx.
-- * @nrof_flowrings: number of flowrings.
-+ * @max_flowrings: maximum number of tx flow rings supported.
-+ * @max_submissionrings: maximum number of submission rings(h2d) supported.
-+ * @max_completionrings: maximum number of completion rings(d2h) supported.
- */
- struct brcmf_bus_msgbuf {
- struct brcmf_commonring *commonrings[BRCMF_NROF_COMMON_MSGRINGS];
- struct brcmf_commonring **flowrings;
- u32 rx_dataoffset;
- u32 max_rxbufpost;
-- u32 nrof_flowrings;
-+ u16 max_flowrings;
-+ u16 max_submissionrings;
-+ u16 max_completionrings;
- };
-
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
-@@ -87,11 +87,6 @@ struct msgbuf_common_hdr {
- __le32 request_id;
- };
-
--struct msgbuf_buf_addr {
-- __le32 low_addr;
-- __le32 high_addr;
--};
--
- struct msgbuf_ioctl_req_hdr {
- struct msgbuf_common_hdr msg;
- __le32 cmd;
-@@ -227,7 +222,10 @@ struct brcmf_msgbuf {
- struct brcmf_commonring **commonrings;
- struct brcmf_commonring **flowrings;
- dma_addr_t *flowring_dma_handle;
-- u16 nrof_flowrings;
-+
-+ u16 max_flowrings;
-+ u16 max_submissionrings;
-+ u16 max_completionrings;
-
- u16 rx_dataoffset;
- u32 max_rxbufpost;
-@@ -610,7 +608,7 @@ brcmf_msgbuf_flowring_create_worker(stru
- create->msg.request_id = 0;
- create->tid = brcmf_flowring_tid(msgbuf->flow, flowid);
- create->flow_ring_id = cpu_to_le16(flowid +
-- BRCMF_NROF_H2D_COMMON_MSGRINGS);
-+ BRCMF_H2D_MSGRING_FLOWRING_IDSTART);
- memcpy(create->sa, work->sa, ETH_ALEN);
- memcpy(create->da, work->da, ETH_ALEN);
- address = (u64)msgbuf->flowring_dma_handle[flowid];
-@@ -760,7 +758,7 @@ static void brcmf_msgbuf_txflow_worker(s
- u32 flowid;
-
- msgbuf = container_of(worker, struct brcmf_msgbuf, txflow_work);
-- for_each_set_bit(flowid, msgbuf->flow_map, msgbuf->nrof_flowrings) {
-+ for_each_set_bit(flowid, msgbuf->flow_map, msgbuf->max_flowrings) {
- clear_bit(flowid, msgbuf->flow_map);
- brcmf_msgbuf_txflow(msgbuf, flowid);
- }
-@@ -866,7 +864,7 @@ brcmf_msgbuf_process_txstatus(struct brc
- tx_status = (struct msgbuf_tx_status *)buf;
- idx = le32_to_cpu(tx_status->msg.request_id);
- flowid = le16_to_cpu(tx_status->compl_hdr.flow_ring_id);
-- flowid -= BRCMF_NROF_H2D_COMMON_MSGRINGS;
-+ flowid -= BRCMF_H2D_MSGRING_FLOWRING_IDSTART;
- skb = brcmf_msgbuf_get_pktid(msgbuf->drvr->bus_if->dev,
- msgbuf->tx_pktids, idx);
- if (!skb)
-@@ -1174,7 +1172,7 @@ brcmf_msgbuf_process_flow_ring_create_re
- flowring_create_resp = (struct msgbuf_flowring_create_resp *)buf;
-
- flowid = le16_to_cpu(flowring_create_resp->compl_hdr.flow_ring_id);
-- flowid -= BRCMF_NROF_H2D_COMMON_MSGRINGS;
-+ flowid -= BRCMF_H2D_MSGRING_FLOWRING_IDSTART;
- status = le16_to_cpu(flowring_create_resp->compl_hdr.status);
-
- if (status) {
-@@ -1202,7 +1200,7 @@ brcmf_msgbuf_process_flow_ring_delete_re
- flowring_delete_resp = (struct msgbuf_flowring_delete_resp *)buf;
-
- flowid = le16_to_cpu(flowring_delete_resp->compl_hdr.flow_ring_id);
-- flowid -= BRCMF_NROF_H2D_COMMON_MSGRINGS;
-+ flowid -= BRCMF_H2D_MSGRING_FLOWRING_IDSTART;
- status = le16_to_cpu(flowring_delete_resp->compl_hdr.status);
-
- if (status) {
-@@ -1307,7 +1305,7 @@ int brcmf_proto_msgbuf_rx_trigger(struct
- brcmf_msgbuf_process_rx(msgbuf, buf);
-
- for_each_set_bit(flowid, msgbuf->txstatus_done_map,
-- msgbuf->nrof_flowrings) {
-+ msgbuf->max_flowrings) {
- clear_bit(flowid, msgbuf->txstatus_done_map);
- commonring = msgbuf->flowrings[flowid];
- qlen = brcmf_flowring_qlen(msgbuf->flow, flowid);
-@@ -1349,7 +1347,7 @@ void brcmf_msgbuf_delete_flowring(struct
- delete->msg.request_id = 0;
-
- delete->flow_ring_id = cpu_to_le16(flowid +
-- BRCMF_NROF_H2D_COMMON_MSGRINGS);
-+ BRCMF_H2D_MSGRING_FLOWRING_IDSTART);
- delete->reason = 0;
-
- brcmf_dbg(MSGBUF, "Send Flow Delete Req flow ID %d, ifindex %d\n",
-@@ -1427,10 +1425,10 @@ int brcmf_proto_msgbuf_attach(struct brc
-
- if_msgbuf = drvr->bus_if->msgbuf;
-
-- if (if_msgbuf->nrof_flowrings >= BRCMF_FLOWRING_HASHSIZE) {
-+ if (if_msgbuf->max_flowrings >= BRCMF_FLOWRING_HASHSIZE) {
- brcmf_err("driver not configured for this many flowrings %d\n",
-- if_msgbuf->nrof_flowrings);
-- if_msgbuf->nrof_flowrings = BRCMF_FLOWRING_HASHSIZE - 1;
-+ if_msgbuf->max_flowrings);
-+ if_msgbuf->max_flowrings = BRCMF_FLOWRING_HASHSIZE - 1;
- }
-
- msgbuf = kzalloc(sizeof(*msgbuf), GFP_KERNEL);
-@@ -1443,7 +1441,7 @@ int brcmf_proto_msgbuf_attach(struct brc
- goto fail;
- }
- INIT_WORK(&msgbuf->txflow_work, brcmf_msgbuf_txflow_worker);
-- count = BITS_TO_LONGS(if_msgbuf->nrof_flowrings);
-+ count = BITS_TO_LONGS(if_msgbuf->max_flowrings);
- count = count * sizeof(unsigned long);
- msgbuf->flow_map = kzalloc(count, GFP_KERNEL);
- if (!msgbuf->flow_map)
-@@ -1479,8 +1477,8 @@ int brcmf_proto_msgbuf_attach(struct brc
- msgbuf->commonrings =
- (struct brcmf_commonring **)if_msgbuf->commonrings;
- msgbuf->flowrings = (struct brcmf_commonring **)if_msgbuf->flowrings;
-- msgbuf->nrof_flowrings = if_msgbuf->nrof_flowrings;
-- msgbuf->flowring_dma_handle = kzalloc(msgbuf->nrof_flowrings *
-+ msgbuf->max_flowrings = if_msgbuf->max_flowrings;
-+ msgbuf->flowring_dma_handle = kzalloc(msgbuf->max_flowrings *
- sizeof(*msgbuf->flowring_dma_handle), GFP_KERNEL);
- if (!msgbuf->flowring_dma_handle)
- goto fail;
-@@ -1501,7 +1499,7 @@ int brcmf_proto_msgbuf_attach(struct brc
- goto fail;
-
- msgbuf->flow = brcmf_flowring_attach(drvr->bus_if->dev,
-- if_msgbuf->nrof_flowrings);
-+ if_msgbuf->max_flowrings);
- if (!msgbuf->flow)
- goto fail;
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.h
-@@ -31,6 +31,10 @@
- #define BRCMF_D2H_MSGRING_RX_COMPLETE_ITEMSIZE 32
- #define BRCMF_H2D_TXFLOWRING_ITEMSIZE 48
-
-+struct msgbuf_buf_addr {
-+ __le32 low_addr;
-+ __le32 high_addr;
-+};
-
- int brcmf_proto_msgbuf_rx_trigger(struct device *dev);
- void brcmf_msgbuf_delete_flowring(struct brcmf_pub *drvr, u16 flowid);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -135,7 +135,7 @@ static struct brcmf_firmware_mapping brc
- BRCMF_PCIE_MB_INT_D2H3_DB1)
-
- #define BRCMF_PCIE_MIN_SHARED_VERSION 5
--#define BRCMF_PCIE_MAX_SHARED_VERSION 5
-+#define BRCMF_PCIE_MAX_SHARED_VERSION 6
- #define BRCMF_PCIE_SHARED_VERSION_MASK 0x00FF
- #define BRCMF_PCIE_SHARED_DMA_INDEX 0x10000
- #define BRCMF_PCIE_SHARED_DMA_2B_IDX 0x100000
-@@ -166,17 +166,6 @@ static struct brcmf_firmware_mapping brc
- #define BRCMF_RING_MEM_SZ 16
- #define BRCMF_RING_STATE_SZ 8
-
--#define BRCMF_SHARED_RING_H2D_W_IDX_PTR_OFFSET 4
--#define BRCMF_SHARED_RING_H2D_R_IDX_PTR_OFFSET 8
--#define BRCMF_SHARED_RING_D2H_W_IDX_PTR_OFFSET 12
--#define BRCMF_SHARED_RING_D2H_R_IDX_PTR_OFFSET 16
--#define BRCMF_SHARED_RING_H2D_WP_HADDR_OFFSET 20
--#define BRCMF_SHARED_RING_H2D_RP_HADDR_OFFSET 28
--#define BRCMF_SHARED_RING_D2H_WP_HADDR_OFFSET 36
--#define BRCMF_SHARED_RING_D2H_RP_HADDR_OFFSET 44
--#define BRCMF_SHARED_RING_TCM_MEMLOC_OFFSET 0
--#define BRCMF_SHARED_RING_MAX_SUB_QUEUES 52
--
- #define BRCMF_DEF_MAX_RXBUFPOST 255
-
- #define BRCMF_CONSOLE_BUFADDR_OFFSET 8
-@@ -231,7 +220,9 @@ struct brcmf_pcie_shared_info {
- struct brcmf_pcie_ringbuf *commonrings[BRCMF_NROF_COMMON_MSGRINGS];
- struct brcmf_pcie_ringbuf *flowrings;
- u16 max_rxbufpost;
-- u32 nrof_flowrings;
-+ u16 max_flowrings;
-+ u16 max_submissionrings;
-+ u16 max_completionrings;
- u32 rx_dataoffset;
- u32 htod_mb_data_addr;
- u32 dtoh_mb_data_addr;
-@@ -241,6 +232,7 @@ struct brcmf_pcie_shared_info {
- dma_addr_t scratch_dmahandle;
- void *ringupd;
- dma_addr_t ringupd_dmahandle;
-+ u8 version;
- };
-
- struct brcmf_pcie_core_info {
-@@ -284,6 +276,36 @@ struct brcmf_pcie_ringbuf {
- u8 id;
- };
-
-+/**
-+ * struct brcmf_pcie_dhi_ringinfo - dongle/host interface shared ring info
-+ *
-+ * @ringmem: dongle memory pointer to ring memory location
-+ * @h2d_w_idx_ptr: h2d ring write indices dongle memory pointers
-+ * @h2d_r_idx_ptr: h2d ring read indices dongle memory pointers
-+ * @d2h_w_idx_ptr: d2h ring write indices dongle memory pointers
-+ * @d2h_r_idx_ptr: d2h ring read indices dongle memory pointers
-+ * @h2d_w_idx_hostaddr: h2d ring write indices host memory pointers
-+ * @h2d_r_idx_hostaddr: h2d ring read indices host memory pointers
-+ * @d2h_w_idx_hostaddr: d2h ring write indices host memory pointers
-+ * @d2h_r_idx_hostaddr: d2h ring reaD indices host memory pointers
-+ * @max_flowrings: maximum number of tx flow rings supported.
-+ * @max_submissionrings: maximum number of submission rings(h2d) supported.
-+ * @max_completionrings: maximum number of completion rings(d2h) supported.
-+ */
-+struct brcmf_pcie_dhi_ringinfo {
-+ __le32 ringmem;
-+ __le32 h2d_w_idx_ptr;
-+ __le32 h2d_r_idx_ptr;
-+ __le32 d2h_w_idx_ptr;
-+ __le32 d2h_r_idx_ptr;
-+ struct msgbuf_buf_addr h2d_w_idx_hostaddr;
-+ struct msgbuf_buf_addr h2d_r_idx_hostaddr;
-+ struct msgbuf_buf_addr d2h_w_idx_hostaddr;
-+ struct msgbuf_buf_addr d2h_r_idx_hostaddr;
-+ __le16 max_flowrings;
-+ __le16 max_submissionrings;
-+ __le16 max_completionrings;
-+};
-
- static const u32 brcmf_ring_max_item[BRCMF_NROF_COMMON_MSGRINGS] = {
- BRCMF_H2D_MSGRING_CONTROL_SUBMIT_MAX_ITEM,
-@@ -1054,26 +1076,35 @@ static int brcmf_pcie_init_ringbuffers(s
- {
- struct brcmf_pcie_ringbuf *ring;
- struct brcmf_pcie_ringbuf *rings;
-- u32 ring_addr;
- u32 d2h_w_idx_ptr;
- u32 d2h_r_idx_ptr;
- u32 h2d_w_idx_ptr;
- u32 h2d_r_idx_ptr;
-- u32 addr;
- u32 ring_mem_ptr;
- u32 i;
- u64 address;
- u32 bufsz;
-- u16 max_sub_queues;
- u8 idx_offset;
--
-- ring_addr = devinfo->shared.ring_info_addr;
-- brcmf_dbg(PCIE, "Base ring addr = 0x%08x\n", ring_addr);
-- addr = ring_addr + BRCMF_SHARED_RING_MAX_SUB_QUEUES;
-- max_sub_queues = brcmf_pcie_read_tcm16(devinfo, addr);
-+ struct brcmf_pcie_dhi_ringinfo ringinfo;
-+ u16 max_flowrings;
-+ u16 max_submissionrings;
-+ u16 max_completionrings;
-+
-+ memcpy_fromio(&ringinfo, devinfo->tcm + devinfo->shared.ring_info_addr,
-+ sizeof(ringinfo));
-+ if (devinfo->shared.version >= 6) {
-+ max_submissionrings = le16_to_cpu(ringinfo.max_submissionrings);
-+ max_flowrings = le16_to_cpu(ringinfo.max_flowrings);
-+ max_completionrings = le16_to_cpu(ringinfo.max_completionrings);
-+ } else {
-+ max_submissionrings = le16_to_cpu(ringinfo.max_flowrings);
-+ max_flowrings = max_submissionrings -
-+ BRCMF_NROF_H2D_COMMON_MSGRINGS;
-+ max_completionrings = BRCMF_NROF_D2H_COMMON_MSGRINGS;
-+ }
-
- if (devinfo->dma_idx_sz != 0) {
-- bufsz = (BRCMF_NROF_D2H_COMMON_MSGRINGS + max_sub_queues) *
-+ bufsz = (max_submissionrings + max_completionrings) *
- devinfo->dma_idx_sz * 2;
- devinfo->idxbuf = dma_alloc_coherent(&devinfo->pdev->dev, bufsz,
- &devinfo->idxbuf_dmahandle,
-@@ -1083,14 +1114,10 @@ static int brcmf_pcie_init_ringbuffers(s
- }
-
- if (devinfo->dma_idx_sz == 0) {
-- addr = ring_addr + BRCMF_SHARED_RING_D2H_W_IDX_PTR_OFFSET;
-- d2h_w_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr);
-- addr = ring_addr + BRCMF_SHARED_RING_D2H_R_IDX_PTR_OFFSET;
-- d2h_r_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr);
-- addr = ring_addr + BRCMF_SHARED_RING_H2D_W_IDX_PTR_OFFSET;
-- h2d_w_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr);
-- addr = ring_addr + BRCMF_SHARED_RING_H2D_R_IDX_PTR_OFFSET;
-- h2d_r_idx_ptr = brcmf_pcie_read_tcm32(devinfo, addr);
-+ d2h_w_idx_ptr = le32_to_cpu(ringinfo.d2h_w_idx_ptr);
-+ d2h_r_idx_ptr = le32_to_cpu(ringinfo.d2h_r_idx_ptr);
-+ h2d_w_idx_ptr = le32_to_cpu(ringinfo.h2d_w_idx_ptr);
-+ h2d_r_idx_ptr = le32_to_cpu(ringinfo.h2d_r_idx_ptr);
- idx_offset = sizeof(u32);
- devinfo->write_ptr = brcmf_pcie_write_tcm16;
- devinfo->read_ptr = brcmf_pcie_read_tcm16;
-@@ -1103,34 +1130,42 @@ static int brcmf_pcie_init_ringbuffers(s
- devinfo->read_ptr = brcmf_pcie_read_idx;
-
- h2d_w_idx_ptr = 0;
-- addr = ring_addr + BRCMF_SHARED_RING_H2D_WP_HADDR_OFFSET;
- address = (u64)devinfo->idxbuf_dmahandle;
-- brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff);
-- brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32);
--
-- h2d_r_idx_ptr = h2d_w_idx_ptr + max_sub_queues * idx_offset;
-- addr = ring_addr + BRCMF_SHARED_RING_H2D_RP_HADDR_OFFSET;
-- address += max_sub_queues * idx_offset;
-- brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff);
-- brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32);
--
-- d2h_w_idx_ptr = h2d_r_idx_ptr + max_sub_queues * idx_offset;
-- addr = ring_addr + BRCMF_SHARED_RING_D2H_WP_HADDR_OFFSET;
-- address += max_sub_queues * idx_offset;
-- brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff);
-- brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32);
-+ ringinfo.h2d_w_idx_hostaddr.low_addr =
-+ cpu_to_le32(address & 0xffffffff);
-+ ringinfo.h2d_w_idx_hostaddr.high_addr =
-+ cpu_to_le32(address >> 32);
-+
-+ h2d_r_idx_ptr = h2d_w_idx_ptr +
-+ max_submissionrings * idx_offset;
-+ address += max_submissionrings * idx_offset;
-+ ringinfo.h2d_r_idx_hostaddr.low_addr =
-+ cpu_to_le32(address & 0xffffffff);
-+ ringinfo.h2d_r_idx_hostaddr.high_addr =
-+ cpu_to_le32(address >> 32);
-+
-+ d2h_w_idx_ptr = h2d_r_idx_ptr +
-+ max_submissionrings * idx_offset;
-+ address += max_submissionrings * idx_offset;
-+ ringinfo.d2h_w_idx_hostaddr.low_addr =
-+ cpu_to_le32(address & 0xffffffff);
-+ ringinfo.d2h_w_idx_hostaddr.high_addr =
-+ cpu_to_le32(address >> 32);
-
- d2h_r_idx_ptr = d2h_w_idx_ptr +
-- BRCMF_NROF_D2H_COMMON_MSGRINGS * idx_offset;
-- addr = ring_addr + BRCMF_SHARED_RING_D2H_RP_HADDR_OFFSET;
-- address += BRCMF_NROF_D2H_COMMON_MSGRINGS * idx_offset;
-- brcmf_pcie_write_tcm32(devinfo, addr, address & 0xffffffff);
-- brcmf_pcie_write_tcm32(devinfo, addr + 4, address >> 32);
-+ max_completionrings * idx_offset;
-+ address += max_completionrings * idx_offset;
-+ ringinfo.d2h_r_idx_hostaddr.low_addr =
-+ cpu_to_le32(address & 0xffffffff);
-+ ringinfo.d2h_r_idx_hostaddr.high_addr =
-+ cpu_to_le32(address >> 32);
-+
-+ memcpy_toio(devinfo->tcm + devinfo->shared.ring_info_addr,
-+ &ringinfo, sizeof(ringinfo));
- brcmf_dbg(PCIE, "Using host memory indices\n");
- }
-
-- addr = ring_addr + BRCMF_SHARED_RING_TCM_MEMLOC_OFFSET;
-- ring_mem_ptr = brcmf_pcie_read_tcm32(devinfo, addr);
-+ ring_mem_ptr = le32_to_cpu(ringinfo.ringmem);
-
- for (i = 0; i < BRCMF_NROF_H2D_COMMON_MSGRINGS; i++) {
- ring = brcmf_pcie_alloc_dma_and_ring(devinfo, i, ring_mem_ptr);
-@@ -1161,20 +1196,19 @@ static int brcmf_pcie_init_ringbuffers(s
- ring_mem_ptr += BRCMF_RING_MEM_SZ;
- }
-
-- devinfo->shared.nrof_flowrings =
-- max_sub_queues - BRCMF_NROF_H2D_COMMON_MSGRINGS;
-- rings = kcalloc(devinfo->shared.nrof_flowrings, sizeof(*ring),
-- GFP_KERNEL);
-+ devinfo->shared.max_flowrings = max_flowrings;
-+ devinfo->shared.max_submissionrings = max_submissionrings;
-+ devinfo->shared.max_completionrings = max_completionrings;
-+ rings = kcalloc(max_flowrings, sizeof(*ring), GFP_KERNEL);
- if (!rings)
- goto fail;
-
-- brcmf_dbg(PCIE, "Nr of flowrings is %d\n",
-- devinfo->shared.nrof_flowrings);
-+ brcmf_dbg(PCIE, "Nr of flowrings is %d\n", max_flowrings);
-
-- for (i = 0; i < devinfo->shared.nrof_flowrings; i++) {
-+ for (i = 0; i < max_flowrings; i++) {
- ring = &rings[i];
- ring->devinfo = devinfo;
-- ring->id = i + BRCMF_NROF_COMMON_MSGRINGS;
-+ ring->id = i + BRCMF_H2D_MSGRING_FLOWRING_IDSTART;
- brcmf_commonring_register_cb(&ring->commonring,
- brcmf_pcie_ring_mb_ring_bell,
- brcmf_pcie_ring_mb_update_rptr,
-@@ -1357,17 +1391,16 @@ brcmf_pcie_init_share_ram_info(struct br
- {
- struct brcmf_pcie_shared_info *shared;
- u32 addr;
-- u32 version;
-
- shared = &devinfo->shared;
- shared->tcm_base_address = sharedram_addr;
-
- shared->flags = brcmf_pcie_read_tcm32(devinfo, sharedram_addr);
-- version = shared->flags & BRCMF_PCIE_SHARED_VERSION_MASK;
-- brcmf_dbg(PCIE, "PCIe protocol version %d\n", version);
-- if ((version > BRCMF_PCIE_MAX_SHARED_VERSION) ||
-- (version < BRCMF_PCIE_MIN_SHARED_VERSION)) {
-- brcmf_err("Unsupported PCIE version %d\n", version);
-+ shared->version = (u8)(shared->flags & BRCMF_PCIE_SHARED_VERSION_MASK);
-+ brcmf_dbg(PCIE, "PCIe protocol version %d\n", shared->version);
-+ if ((shared->version > BRCMF_PCIE_MAX_SHARED_VERSION) ||
-+ (shared->version < BRCMF_PCIE_MIN_SHARED_VERSION)) {
-+ brcmf_err("Unsupported PCIE version %d\n", shared->version);
- return -EINVAL;
- }
-
-@@ -1661,18 +1694,18 @@ static void brcmf_pcie_setup(struct devi
- bus->msgbuf->commonrings[i] =
- &devinfo->shared.commonrings[i]->commonring;
-
-- flowrings = kcalloc(devinfo->shared.nrof_flowrings, sizeof(*flowrings),
-+ flowrings = kcalloc(devinfo->shared.max_flowrings, sizeof(*flowrings),
- GFP_KERNEL);
- if (!flowrings)
- goto fail;
-
-- for (i = 0; i < devinfo->shared.nrof_flowrings; i++)
-+ for (i = 0; i < devinfo->shared.max_flowrings; i++)
- flowrings[i] = &devinfo->shared.flowrings[i].commonring;
- bus->msgbuf->flowrings = flowrings;
-
- bus->msgbuf->rx_dataoffset = devinfo->shared.rx_dataoffset;
- bus->msgbuf->max_rxbufpost = devinfo->shared.max_rxbufpost;
-- bus->msgbuf->nrof_flowrings = devinfo->shared.nrof_flowrings;
-+ bus->msgbuf->max_flowrings = devinfo->shared.max_flowrings;
-
- init_waitqueue_head(&devinfo->mbdata_resp_wait);
-