Linux-Wireless Archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup
@ 2024-04-30  5:47 Karthikeyan Periyasamy
  2024-04-30  5:47 ` [PATCH 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30  5:47 UTC (permalink / raw
  To: ath12k; +Cc: linux-wireless, Karthikeyan Periyasamy

Refactor the WBM idle ring buffer setup to scalable for inter device
multi-link operation.

Note: This patchset rebased on top of below patch series
 [PATCH v2 0/8] wifi: ath12k: Introduce device group abstraction
 Link: https://lore.kernel.org/all/20240425055759.1181165-1-quic_hprem@quicinc.com/

Karthikeyan Periyasamy (4):
  wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer
    manager
  wifi: ath12k: Refactor idle ring descriptor setup
  wifi: ath12k: use device index to advertise MLO parameter
  wifi: ath12k: add multi device support for WBM idle ring buffer setup

 drivers/net/wireless/ath/ath12k/core.c  | 10 +++++++++
 drivers/net/wireless/ath/ath12k/dp.c    | 27 ++++++++++++++++++++++---
 drivers/net/wireless/ath/ath12k/dp.h    |  1 +
 drivers/net/wireless/ath/ath12k/dp_rx.c |  5 +++--
 drivers/net/wireless/ath/ath12k/hal.c   |  5 +++--
 drivers/net/wireless/ath/ath12k/hal.h   | 21 ++++++++++---------
 drivers/net/wireless/ath/ath12k/qmi.c   |  4 ++--
 7 files changed, 54 insertions(+), 19 deletions(-)


base-commit: 861928281f22a08e3d258ebcfe7159d729ec07d4
prerequisite-patch-id: 4bc84a4f5b10ebc28db60c5167abdaf343a1619d
prerequisite-patch-id: ea87d2f46dbd5e7c82d5df02934906e219aa8388
prerequisite-patch-id: e08d8632dcde9e891d37b538832b4ecfed140d9e
prerequisite-patch-id: bc2c9455c9175c27b8b68f6f41d468b258007478
prerequisite-patch-id: 00966c65589af8a50078fea94630cbe355f0dacf
prerequisite-patch-id: 4bd8ce903cd89ae536109922f65f128ed1d4307c
prerequisite-patch-id: 54fe8eb540a77804c8befeb695b61756c133b56f
prerequisite-patch-id: 06244ca08d9bed3834dc5315470a19d096d749ee
prerequisite-patch-id: 8e7575808b1c498d81b606777153e0e2d4ee99bd
prerequisite-patch-id: 1baa4ce64b2054e82e117cfbe29f85870def37c7
prerequisite-patch-id: 733cb4a1e0d02079820d8306a3da88fe2d35b06c
-- 
2.34.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager
  2024-04-30  5:47 [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
@ 2024-04-30  5:47 ` Karthikeyan Periyasamy
  2024-04-30  5:47 ` [PATCH 2/4] wifi: ath12k: Refactor idle ring descriptor setup Karthikeyan Periyasamy
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30  5:47 UTC (permalink / raw
  To: ath12k; +Cc: linux-wireless, Karthikeyan Periyasamy

Prefer the term "device" over "chip". Therefore, modify the relavant terms
in hal Rx return buffer manager to use "device" instead.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/dp_rx.c |  4 ++--
 drivers/net/wireless/ath/ath12k/hal.h   | 18 +++++++++---------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index 75df622f25d8..fc4b95324955 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -3071,7 +3071,7 @@ static int ath12k_dp_rx_h_defrag_reo_reinject(struct ath12k *ar,
 
 	ath12k_hal_rx_buf_addr_info_set(&reo_ent_ring->buf_addr_info, link_paddr,
 					cookie,
-					HAL_RX_BUF_RBM_WBM_CHIP0_IDLE_DESC_LIST);
+					HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST);
 
 	mpdu_info = u32_encode_bits(1, RX_MPDU_DESC_INFO0_MSDU_COUNT) |
 		    u32_encode_bits(0, RX_MPDU_DESC_INFO0_FRAG_FLAG) |
@@ -3451,7 +3451,7 @@ int ath12k_dp_rx_process_err(struct ath12k_base *ab, struct napi_struct *napi,
 			       (paddr - link_desc_banks[desc_bank].paddr);
 		ath12k_hal_rx_msdu_link_info_get(link_desc_va, &num_msdus, msdu_cookies,
 						 &rbm);
-		if (rbm != HAL_RX_BUF_RBM_WBM_CHIP0_IDLE_DESC_LIST &&
+		if (rbm != HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST &&
 		    rbm != HAL_RX_BUF_RBM_SW3_BM &&
 		    rbm != ab->hw_params->hal_params->rx_buf_rbm) {
 			ab->soc_stats.invalid_rbm++;
diff --git a/drivers/net/wireless/ath/ath12k/hal.h b/drivers/net/wireless/ath/ath12k/hal.h
index dbb9205bfa10..f364b2938ef8 100644
--- a/drivers/net/wireless/ath/ath12k/hal.h
+++ b/drivers/net/wireless/ath/ath12k/hal.h
@@ -770,12 +770,12 @@ struct hal_srng_config {
  * enum hal_rx_buf_return_buf_manager - manager for returned rx buffers
  *
  * @HAL_RX_BUF_RBM_WBM_IDLE_BUF_LIST: Buffer returned to WBM idle buffer list
- * @HAL_RX_BUF_RBM_WBM_CHIP0_IDLE_DESC_LIST: Descriptor returned to WBM idle
- *	descriptor list, where the chip 0 WBM is chosen in case of a multi-chip config
- * @HAL_RX_BUF_RBM_WBM_CHIP1_IDLE_DESC_LIST: Descriptor returned to WBM idle
- *	descriptor list, where the chip 1 WBM is chosen in case of a multi-chip config
- * @HAL_RX_BUF_RBM_WBM_CHIP2_IDLE_DESC_LIST: Descriptor returned to WBM idle
- *	descriptor list, where the chip 2 WBM is chosen in case of a multi-chip config
+ * @HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST: Descriptor returned to WBM idle
+ *	descriptor list, where the device 0 WBM is chosen in case of a multi-device config
+ * @HAL_RX_BUF_RBM_WBM_DEV1_IDLE_DESC_LIST: Descriptor returned to WBM idle
+ *	descriptor list, where the device 1 WBM is chosen in case of a multi-device config
+ * @HAL_RX_BUF_RBM_WBM_DEV2_IDLE_DESC_LIST: Descriptor returned to WBM idle
+ *	descriptor list, where the device 2 WBM is chosen in case of a multi-device config
  * @HAL_RX_BUF_RBM_FW_BM: Buffer returned to FW
  * @HAL_RX_BUF_RBM_SW0_BM: For ring 0 -- returned to host
  * @HAL_RX_BUF_RBM_SW1_BM: For ring 1 -- returned to host
@@ -788,9 +788,9 @@ struct hal_srng_config {
 
 enum hal_rx_buf_return_buf_manager {
 	HAL_RX_BUF_RBM_WBM_IDLE_BUF_LIST,
-	HAL_RX_BUF_RBM_WBM_CHIP0_IDLE_DESC_LIST,
-	HAL_RX_BUF_RBM_WBM_CHIP1_IDLE_DESC_LIST,
-	HAL_RX_BUF_RBM_WBM_CHIP2_IDLE_DESC_LIST,
+	HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST,
+	HAL_RX_BUF_RBM_WBM_DEV1_IDLE_DESC_LIST,
+	HAL_RX_BUF_RBM_WBM_DEV2_IDLE_DESC_LIST,
 	HAL_RX_BUF_RBM_FW_BM,
 	HAL_RX_BUF_RBM_SW0_BM,
 	HAL_RX_BUF_RBM_SW1_BM,
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/4] wifi: ath12k: Refactor idle ring descriptor setup
  2024-04-30  5:47 [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
  2024-04-30  5:47 ` [PATCH 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
@ 2024-04-30  5:47 ` Karthikeyan Periyasamy
  2024-04-30  5:47 ` [PATCH 3/4] wifi: ath12k: use device index to advertise MLO parameter Karthikeyan Periyasamy
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30  5:47 UTC (permalink / raw
  To: ath12k; +Cc: linux-wireless, Karthikeyan Periyasamy

Currently, the WBM idle ring descriptor setup uses implicit value
HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST for the return buffer manager
parameter. To support inter-device MLO (Multi-link operation), this
parameter needs to be configure dynamically based on the device identifier
within the MLO group. Therefore, introduce a new argument to the helper
function ath12k_hal_set_link_desc_addr().

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/dp.c    | 9 ++++++---
 drivers/net/wireless/ath/ath12k/dp.h    | 1 +
 drivers/net/wireless/ath/ath12k/dp_rx.c | 5 +++--
 drivers/net/wireless/ath/ath12k/hal.c   | 5 +++--
 drivers/net/wireless/ath/ath12k/hal.h   | 3 ++-
 5 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/dp.c b/drivers/net/wireless/ath/ath12k/dp.c
index 963b9ad4dc82..9b9e86cdb380 100644
--- a/drivers/net/wireless/ath/ath12k/dp.c
+++ b/drivers/net/wireless/ath/ath12k/dp.c
@@ -616,6 +616,7 @@ static int ath12k_dp_scatter_idle_link_desc_setup(struct ath12k_base *ab,
 	int i;
 	int ret = 0;
 	u32 end_offset, cookie;
+	enum hal_rx_buf_return_buf_manager rbm = dp->idle_link_rbm;
 
 	n_entries_per_buf = HAL_WBM_IDLE_SCATTER_BUF_SIZE /
 		ath12k_hal_srng_get_entrysize(ab, HAL_WBM_IDLE_LINK);
@@ -646,7 +647,8 @@ static int ath12k_dp_scatter_idle_link_desc_setup(struct ath12k_base *ab,
 		paddr = link_desc_banks[i].paddr;
 		while (n_entries) {
 			cookie = DP_LINK_DESC_COOKIE_SET(n_entries, i);
-			ath12k_hal_set_link_desc_addr(scatter_buf, cookie, paddr);
+			ath12k_hal_set_link_desc_addr(scatter_buf, cookie,
+						      paddr, rbm);
 			n_entries--;
 			paddr += HAL_LINK_DESC_SIZE;
 			if (rem_entries) {
@@ -790,6 +792,7 @@ int ath12k_dp_link_desc_setup(struct ath12k_base *ab,
 	u32 paddr;
 	int i, ret;
 	u32 cookie;
+	enum hal_rx_buf_return_buf_manager rbm = ab->dp.idle_link_rbm;
 
 	tot_mem_sz = n_link_desc * HAL_LINK_DESC_SIZE;
 	tot_mem_sz += HAL_LINK_DESC_ALIGN;
@@ -850,8 +853,7 @@ int ath12k_dp_link_desc_setup(struct ath12k_base *ab,
 		while (n_entries &&
 		       (desc = ath12k_hal_srng_src_get_next_entry(ab, srng))) {
 			cookie = DP_LINK_DESC_COOKIE_SET(n_entries, i);
-			ath12k_hal_set_link_desc_addr(desc,
-						      cookie, paddr);
+			ath12k_hal_set_link_desc_addr(desc, cookie, paddr, rbm);
 			n_entries--;
 			paddr += HAL_LINK_DESC_SIZE;
 		}
@@ -1596,6 +1598,7 @@ int ath12k_dp_alloc(struct ath12k_base *ab)
 	spin_lock_init(&dp->reo_cmd_lock);
 
 	dp->reo_cmd_cache_flush_count = 0;
+	dp->idle_link_rbm = HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST;
 
 	ret = ath12k_wbm_idle_ring_setup(ab, &n_link_desc);
 	if (ret) {
diff --git a/drivers/net/wireless/ath/ath12k/dp.h b/drivers/net/wireless/ath/ath12k/dp.h
index 5cf0d21ef184..e9880b34a7ab 100644
--- a/drivers/net/wireless/ath/ath12k/dp.h
+++ b/drivers/net/wireless/ath/ath12k/dp.h
@@ -325,6 +325,7 @@ struct ath12k_dp {
 	u8 htt_tgt_ver_major;
 	u8 htt_tgt_ver_minor;
 	struct dp_link_desc_bank link_desc_banks[DP_LINK_DESC_BANKS_MAX];
+	enum hal_rx_buf_return_buf_manager idle_link_rbm;
 	struct dp_srng wbm_idle_ring;
 	struct dp_srng wbm_desc_rel_ring;
 	struct dp_srng tcl_cmd_ring;
diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index fc4b95324955..18030c9e735d 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -2994,6 +2994,7 @@ static int ath12k_dp_rx_h_defrag_reo_reinject(struct ath12k *ar,
 	u32 cookie, hal_rx_desc_sz, dest_ring_info0;
 	int ret;
 	struct ath12k_rx_desc_info *desc_info;
+	enum hal_rx_buf_return_buf_manager idle_link_rbm = dp->idle_link_rbm;
 	u8 dst_ind;
 
 	hal_rx_desc_sz = ab->hal.hal_desc_sz;
@@ -3071,7 +3072,7 @@ static int ath12k_dp_rx_h_defrag_reo_reinject(struct ath12k *ar,
 
 	ath12k_hal_rx_buf_addr_info_set(&reo_ent_ring->buf_addr_info, link_paddr,
 					cookie,
-					HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST);
+					idle_link_rbm);
 
 	mpdu_info = u32_encode_bits(1, RX_MPDU_DESC_INFO0_MSDU_COUNT) |
 		    u32_encode_bits(0, RX_MPDU_DESC_INFO0_FRAG_FLAG) |
@@ -3451,7 +3452,7 @@ int ath12k_dp_rx_process_err(struct ath12k_base *ab, struct napi_struct *napi,
 			       (paddr - link_desc_banks[desc_bank].paddr);
 		ath12k_hal_rx_msdu_link_info_get(link_desc_va, &num_msdus, msdu_cookies,
 						 &rbm);
-		if (rbm != HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST &&
+		if (rbm != dp->idle_link_rbm &&
 		    rbm != HAL_RX_BUF_RBM_SW3_BM &&
 		    rbm != ab->hw_params->hal_params->rx_buf_rbm) {
 			ab->soc_stats.invalid_rbm++;
diff --git a/drivers/net/wireless/ath/ath12k/hal.c b/drivers/net/wireless/ath/ath12k/hal.c
index 78310da8cfe8..ca04bfae8bdc 100644
--- a/drivers/net/wireless/ath/ath12k/hal.c
+++ b/drivers/net/wireless/ath/ath12k/hal.c
@@ -1969,14 +1969,15 @@ u32 ath12k_hal_ce_dst_status_get_length(struct hal_ce_srng_dst_status_desc *desc
 }
 
 void ath12k_hal_set_link_desc_addr(struct hal_wbm_link_desc *desc, u32 cookie,
-				   dma_addr_t paddr)
+				   dma_addr_t paddr,
+				   enum hal_rx_buf_return_buf_manager rbm)
 {
 	desc->buf_addr_info.info0 = le32_encode_bits((paddr & HAL_ADDR_LSB_REG_MASK),
 						     BUFFER_ADDR_INFO0_ADDR);
 	desc->buf_addr_info.info1 =
 			le32_encode_bits(((u64)paddr >> HAL_ADDR_MSB_REG_SHIFT),
 					 BUFFER_ADDR_INFO1_ADDR) |
-			le32_encode_bits(1, BUFFER_ADDR_INFO1_RET_BUF_MGR) |
+			le32_encode_bits(rbm, BUFFER_ADDR_INFO1_RET_BUF_MGR) |
 			le32_encode_bits(cookie, BUFFER_ADDR_INFO1_SW_COOKIE);
 }
 
diff --git a/drivers/net/wireless/ath/ath12k/hal.h b/drivers/net/wireless/ath/ath12k/hal.h
index f364b2938ef8..8a78bb9a10bc 100644
--- a/drivers/net/wireless/ath/ath12k/hal.h
+++ b/drivers/net/wireless/ath/ath12k/hal.h
@@ -1113,7 +1113,8 @@ dma_addr_t ath12k_hal_srng_get_tp_addr(struct ath12k_base *ab,
 dma_addr_t ath12k_hal_srng_get_hp_addr(struct ath12k_base *ab,
 				       struct hal_srng *srng);
 void ath12k_hal_set_link_desc_addr(struct hal_wbm_link_desc *desc, u32 cookie,
-				   dma_addr_t paddr);
+				   dma_addr_t paddr,
+				   enum hal_rx_buf_return_buf_manager rbm);
 u32 ath12k_hal_ce_get_desc_size(enum hal_ce_desc type);
 void ath12k_hal_ce_src_set_desc(struct hal_ce_srng_src_desc *desc, dma_addr_t paddr,
 				u32 len, u32 id, u8 byte_swap_data);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/4] wifi: ath12k: use device index to advertise MLO parameter
  2024-04-30  5:47 [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
  2024-04-30  5:47 ` [PATCH 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
  2024-04-30  5:47 ` [PATCH 2/4] wifi: ath12k: Refactor idle ring descriptor setup Karthikeyan Periyasamy
@ 2024-04-30  5:47 ` Karthikeyan Periyasamy
  2024-04-30  5:47 ` [PATCH 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
  2024-04-30 16:08 ` [PATCH 0/4] wifi: ath12k: Add " Jeff Johnson
  4 siblings, 0 replies; 8+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30  5:47 UTC (permalink / raw
  To: ath12k; +Cc: linux-wireless, Karthikeyan Periyasamy

Device index parameter is used as unique identifier for devices involved
in Inter-device MLO. It is also used to configure the MLO parameter within
the QMI host capability send request. While currently set to zero, future
logic will be added for inter device support to populate this parameter
with non-zero values.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/core.c | 10 ++++++++++
 drivers/net/wireless/ath/ath12k/qmi.c  |  4 ++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c
index b304895ee295..e82442540697 100644
--- a/drivers/net/wireless/ath/ath12k/core.c
+++ b/drivers/net/wireless/ath/ath12k/core.c
@@ -1562,6 +1562,16 @@ struct ath12k_base *ath12k_core_alloc(struct device *dev, size_t priv_size,
 	ab->qmi.num_radios = U8_MAX;
 	ab->mlo_capable_flags = ATH12K_INTRA_DEVICE_MLO_SUPPORT;
 
+	/* Device index used to identify the devices in a group.
+	 *
+	 * In Intra-device MLO, only one device present in a group,
+	 * so it is always zero.
+	 *
+	 * In Inter-device MLO, Multiple device present in a group,
+	 * expect non-zero value.
+	 */
+	ab->device_id = 0;
+
 	return ab;
 
 err_free_wq:
diff --git a/drivers/net/wireless/ath/ath12k/qmi.c b/drivers/net/wireless/ath/ath12k/qmi.c
index b37ab6244931..a9946f0f6bd8 100644
--- a/drivers/net/wireless/ath/ath12k/qmi.c
+++ b/drivers/net/wireless/ath/ath12k/qmi.c
@@ -2041,7 +2041,7 @@ static void ath12k_host_cap_parse_mlo(struct ath12k_base *ab,
 	req->mlo_capable_valid = 1;
 	req->mlo_capable = 1;
 	req->mlo_chip_id_valid = 1;
-	req->mlo_chip_id = 0;
+	req->mlo_chip_id = ab->device_id;
 	req->mlo_group_id_valid = 1;
 	req->mlo_group_id = 0;
 	req->max_mlo_peer_valid = 1;
@@ -2053,7 +2053,7 @@ static void ath12k_host_cap_parse_mlo(struct ath12k_base *ab,
 	req->mlo_num_chips = 1;
 
 	info = &req->mlo_chip_info[0];
-	info->chip_id = 0;
+	info->chip_id = ab->device_id;
 	info->num_local_links = ab->qmi.num_radios;
 
 	for (i = 0; i < info->num_local_links; i++) {
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup
  2024-04-30  5:47 [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
                   ` (2 preceding siblings ...)
  2024-04-30  5:47 ` [PATCH 3/4] wifi: ath12k: use device index to advertise MLO parameter Karthikeyan Periyasamy
@ 2024-04-30  5:47 ` Karthikeyan Periyasamy
  2024-04-30 16:08 ` [PATCH 0/4] wifi: ath12k: Add " Jeff Johnson
  4 siblings, 0 replies; 8+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30  5:47 UTC (permalink / raw
  To: ath12k; +Cc: linux-wireless, Karthikeyan Periyasamy

Currently, inter device MLO is not supported. Therefore, the WBM idle ring
buffers choose the implicit return buffer manager (DEV0_IDLE_DESC_LIST).
However, this implicit return buffer manager design not meeting the
requirements to support inter device MLO. In inter device MLO, multiple
devices participate. The device specific WBM idle ring buffers transmit
to multiple device REO rings. To distinguish between device specific WBM
idle buffers, the setup configuration need to choose a different return
buffer manager based on the unique identifier (device index).

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com>
---
 drivers/net/wireless/ath/ath12k/dp.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath12k/dp.c b/drivers/net/wireless/ath/ath12k/dp.c
index 9b9e86cdb380..5812df436d53 100644
--- a/drivers/net/wireless/ath/ath12k/dp.c
+++ b/drivers/net/wireless/ath/ath12k/dp.c
@@ -1582,6 +1582,24 @@ static int ath12k_dp_reoq_lut_setup(struct ath12k_base *ab)
 	return 0;
 }
 
+static enum hal_rx_buf_return_buf_manager
+ath12k_dp_get_idle_link_rbm(struct ath12k_base *ab)
+{
+	switch (ab->device_id) {
+	case 0:
+		return HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST;
+	case 1:
+		return HAL_RX_BUF_RBM_WBM_DEV1_IDLE_DESC_LIST;
+	case 2:
+		return HAL_RX_BUF_RBM_WBM_DEV2_IDLE_DESC_LIST;
+	default:
+		ath12k_warn(ab, "invalid %d device id, so choose default rbm\n",
+			    ab->device_id);
+		WARN_ON(1);
+		return HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST;
+	}
+}
+
 int ath12k_dp_alloc(struct ath12k_base *ab)
 {
 	struct ath12k_dp *dp = &ab->dp;
@@ -1598,7 +1616,7 @@ int ath12k_dp_alloc(struct ath12k_base *ab)
 	spin_lock_init(&dp->reo_cmd_lock);
 
 	dp->reo_cmd_cache_flush_count = 0;
-	dp->idle_link_rbm = HAL_RX_BUF_RBM_WBM_DEV0_IDLE_DESC_LIST;
+	dp->idle_link_rbm = ath12k_dp_get_idle_link_rbm(ab);
 
 	ret = ath12k_wbm_idle_ring_setup(ab, &n_link_desc);
 	if (ret) {
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup
  2024-04-30  5:47 [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
                   ` (3 preceding siblings ...)
  2024-04-30  5:47 ` [PATCH 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
@ 2024-04-30 16:08 ` Jeff Johnson
  2024-04-30 16:16   ` Karthikeyan Periyasamy
  4 siblings, 1 reply; 8+ messages in thread
From: Jeff Johnson @ 2024-04-30 16:08 UTC (permalink / raw
  To: Karthikeyan Periyasamy, ath12k; +Cc: linux-wireless

On 4/29/2024 10:47 PM, Karthikeyan Periyasamy wrote:
> Refactor the WBM idle ring buffer setup to scalable for inter device
> multi-link operation.
> 
> Note: This patchset rebased on top of below patch series
>  [PATCH v2 0/8] wifi: ath12k: Introduce device group abstraction
>  Link: https://lore.kernel.org/all/20240425055759.1181165-1-quic_hprem@quicinc.com/
> 
> Karthikeyan Periyasamy (4):
>   wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer
>     manager
>   wifi: ath12k: Refactor idle ring descriptor setup
>   wifi: ath12k: use device index to advertise MLO parameter
>   wifi: ath12k: add multi device support for WBM idle ring buffer setup
> 
>  drivers/net/wireless/ath/ath12k/core.c  | 10 +++++++++
>  drivers/net/wireless/ath/ath12k/dp.c    | 27 ++++++++++++++++++++++---
>  drivers/net/wireless/ath/ath12k/dp.h    |  1 +
>  drivers/net/wireless/ath/ath12k/dp_rx.c |  5 +++--
>  drivers/net/wireless/ath/ath12k/hal.c   |  5 +++--
>  drivers/net/wireless/ath/ath12k/hal.h   | 21 ++++++++++---------
>  drivers/net/wireless/ath/ath12k/qmi.c   |  4 ++--
>  7 files changed, 54 insertions(+), 19 deletions(-)
> 
> 
> base-commit: 861928281f22a08e3d258ebcfe7159d729ec07d4
> prerequisite-patch-id: 4bc84a4f5b10ebc28db60c5167abdaf343a1619d
> prerequisite-patch-id: ea87d2f46dbd5e7c82d5df02934906e219aa8388
> prerequisite-patch-id: e08d8632dcde9e891d37b538832b4ecfed140d9e
> prerequisite-patch-id: bc2c9455c9175c27b8b68f6f41d468b258007478
> prerequisite-patch-id: 00966c65589af8a50078fea94630cbe355f0dacf
> prerequisite-patch-id: 4bd8ce903cd89ae536109922f65f128ed1d4307c
> prerequisite-patch-id: 54fe8eb540a77804c8befeb695b61756c133b56f
> prerequisite-patch-id: 06244ca08d9bed3834dc5315470a19d096d749ee
> prerequisite-patch-id: 8e7575808b1c498d81b606777153e0e2d4ee99bd
> prerequisite-patch-id: 1baa4ce64b2054e82e117cfbe29f85870def37c7
> prerequisite-patch-id: 733cb4a1e0d02079820d8306a3da88fe2d35b06c

My automation can't test this series since git reports:
fatal: bad object 861928281f22a08e3d258ebcfe7159d729ec07d4

Also note that the "device group abstraction" series itself has dependencies.

Using a base that isn't visible in the upstream ath.git is not helpful

/jeff

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup
  2024-04-30 16:08 ` [PATCH 0/4] wifi: ath12k: Add " Jeff Johnson
@ 2024-04-30 16:16   ` Karthikeyan Periyasamy
  2024-04-30 16:57     ` Karthikeyan Periyasamy
  0 siblings, 1 reply; 8+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30 16:16 UTC (permalink / raw
  To: Jeff Johnson, ath12k; +Cc: linux-wireless



On 4/30/2024 9:38 PM, Jeff Johnson wrote:
> On 4/29/2024 10:47 PM, Karthikeyan Periyasamy wrote:
>> Refactor the WBM idle ring buffer setup to scalable for inter device
>> multi-link operation.
>>
>> Note: This patchset rebased on top of below patch series
>>   [PATCH v2 0/8] wifi: ath12k: Introduce device group abstraction
>>   Link: https://lore.kernel.org/all/20240425055759.1181165-1-quic_hprem@quicinc.com/
>>
>> Karthikeyan Periyasamy (4):
>>    wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer
>>      manager
>>    wifi: ath12k: Refactor idle ring descriptor setup
>>    wifi: ath12k: use device index to advertise MLO parameter
>>    wifi: ath12k: add multi device support for WBM idle ring buffer setup
>>
>>   drivers/net/wireless/ath/ath12k/core.c  | 10 +++++++++
>>   drivers/net/wireless/ath/ath12k/dp.c    | 27 ++++++++++++++++++++++---
>>   drivers/net/wireless/ath/ath12k/dp.h    |  1 +
>>   drivers/net/wireless/ath/ath12k/dp_rx.c |  5 +++--
>>   drivers/net/wireless/ath/ath12k/hal.c   |  5 +++--
>>   drivers/net/wireless/ath/ath12k/hal.h   | 21 ++++++++++---------
>>   drivers/net/wireless/ath/ath12k/qmi.c   |  4 ++--
>>   7 files changed, 54 insertions(+), 19 deletions(-)
>>
>>
>> base-commit: 861928281f22a08e3d258ebcfe7159d729ec07d4
>> prerequisite-patch-id: 4bc84a4f5b10ebc28db60c5167abdaf343a1619d
>> prerequisite-patch-id: ea87d2f46dbd5e7c82d5df02934906e219aa8388
>> prerequisite-patch-id: e08d8632dcde9e891d37b538832b4ecfed140d9e
>> prerequisite-patch-id: bc2c9455c9175c27b8b68f6f41d468b258007478
>> prerequisite-patch-id: 00966c65589af8a50078fea94630cbe355f0dacf
>> prerequisite-patch-id: 4bd8ce903cd89ae536109922f65f128ed1d4307c
>> prerequisite-patch-id: 54fe8eb540a77804c8befeb695b61756c133b56f
>> prerequisite-patch-id: 06244ca08d9bed3834dc5315470a19d096d749ee
>> prerequisite-patch-id: 8e7575808b1c498d81b606777153e0e2d4ee99bd
>> prerequisite-patch-id: 1baa4ce64b2054e82e117cfbe29f85870def37c7
>> prerequisite-patch-id: 733cb4a1e0d02079820d8306a3da88fe2d35b06c
> 
> My automation can't test this series since git reports:
> fatal: bad object 861928281f22a08e3d258ebcfe7159d729ec07d4
> 
> Also note that the "device group abstraction" series itself has dependencies.
> 
> Using a base that isn't visible in the upstream ath.git is not helpful
> 

Looks like "device group abstraction" patch is block due to warning call 
trace. Shall i remove the dependency and make the "device group 
abstraction" patch depend on this series ?

-- 
Karthikeyan Periyasamy
--
கார்த்திகேயன் பெரியசாமி

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup
  2024-04-30 16:16   ` Karthikeyan Periyasamy
@ 2024-04-30 16:57     ` Karthikeyan Periyasamy
  0 siblings, 0 replies; 8+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30 16:57 UTC (permalink / raw
  To: Jeff Johnson, ath12k; +Cc: linux-wireless



On 4/30/2024 9:46 PM, Karthikeyan Periyasamy wrote:
> 
> 
> On 4/30/2024 9:38 PM, Jeff Johnson wrote:
>> On 4/29/2024 10:47 PM, Karthikeyan Periyasamy wrote:
>>> Refactor the WBM idle ring buffer setup to scalable for inter device
>>> multi-link operation.
>>>
>>> Note: This patchset rebased on top of below patch series
>>>   [PATCH v2 0/8] wifi: ath12k: Introduce device group abstraction
>>>   Link: 
>>> https://lore.kernel.org/all/20240425055759.1181165-1-quic_hprem@quicinc.com/
>>>
>>> Karthikeyan Periyasamy (4):
>>>    wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer
>>>      manager
>>>    wifi: ath12k: Refactor idle ring descriptor setup
>>>    wifi: ath12k: use device index to advertise MLO parameter
>>>    wifi: ath12k: add multi device support for WBM idle ring buffer setup
>>>
>>>   drivers/net/wireless/ath/ath12k/core.c  | 10 +++++++++
>>>   drivers/net/wireless/ath/ath12k/dp.c    | 27 ++++++++++++++++++++++---
>>>   drivers/net/wireless/ath/ath12k/dp.h    |  1 +
>>>   drivers/net/wireless/ath/ath12k/dp_rx.c |  5 +++--
>>>   drivers/net/wireless/ath/ath12k/hal.c   |  5 +++--
>>>   drivers/net/wireless/ath/ath12k/hal.h   | 21 ++++++++++---------
>>>   drivers/net/wireless/ath/ath12k/qmi.c   |  4 ++--
>>>   7 files changed, 54 insertions(+), 19 deletions(-)
>>>
>>>
>>> base-commit: 861928281f22a08e3d258ebcfe7159d729ec07d4
>>> prerequisite-patch-id: 4bc84a4f5b10ebc28db60c5167abdaf343a1619d
>>> prerequisite-patch-id: ea87d2f46dbd5e7c82d5df02934906e219aa8388
>>> prerequisite-patch-id: e08d8632dcde9e891d37b538832b4ecfed140d9e
>>> prerequisite-patch-id: bc2c9455c9175c27b8b68f6f41d468b258007478
>>> prerequisite-patch-id: 00966c65589af8a50078fea94630cbe355f0dacf
>>> prerequisite-patch-id: 4bd8ce903cd89ae536109922f65f128ed1d4307c
>>> prerequisite-patch-id: 54fe8eb540a77804c8befeb695b61756c133b56f
>>> prerequisite-patch-id: 06244ca08d9bed3834dc5315470a19d096d749ee
>>> prerequisite-patch-id: 8e7575808b1c498d81b606777153e0e2d4ee99bd
>>> prerequisite-patch-id: 1baa4ce64b2054e82e117cfbe29f85870def37c7
>>> prerequisite-patch-id: 733cb4a1e0d02079820d8306a3da88fe2d35b06c
>>
>> My automation can't test this series since git reports:
>> fatal: bad object 861928281f22a08e3d258ebcfe7159d729ec07d4
>>
>> Also note that the "device group abstraction" series itself has 
>> dependencies.
>>
>> Using a base that isn't visible in the upstream ath.git is not helpful
>>
> 
> Looks like "device group abstraction" patch is block due to warning call 
> trace. Shall i remove the dependency and make the "device group 
> abstraction" patch depend on this series ?
> 

sent the next version by removing the dependency.

-- 
Karthikeyan Periyasamy
--
கார்த்திகேயன் பெரியசாமி

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-04-30 16:57 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-30  5:47 [PATCH 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
2024-04-30  5:47 ` [PATCH 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
2024-04-30  5:47 ` [PATCH 2/4] wifi: ath12k: Refactor idle ring descriptor setup Karthikeyan Periyasamy
2024-04-30  5:47 ` [PATCH 3/4] wifi: ath12k: use device index to advertise MLO parameter Karthikeyan Periyasamy
2024-04-30  5:47 ` [PATCH 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
2024-04-30 16:08 ` [PATCH 0/4] wifi: ath12k: Add " Jeff Johnson
2024-04-30 16:16   ` Karthikeyan Periyasamy
2024-04-30 16:57     ` Karthikeyan Periyasamy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).