Linux-Wireless Archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup
@ 2024-04-30 16:58 Karthikeyan Periyasamy
  2024-04-30 16:58 ` [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30 16:58 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.

v2:
 - Removed the dependency of the patch series "device group abstraction"
   and include tha dependent change "introduce the variable device_id" in
   this patch series itself

Karthikeyan Periyasamy (4):
  wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer
    manager
  wifi: ath12k: Refactor idle ring descriptor setup
  wifi: ath12k: Introduce device index
  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/core.h  |  1 +
 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 ++--
 8 files changed, 55 insertions(+), 19 deletions(-)


base-commit: ec460f4384ea105f2998ca6b0d014db1cee336de
-- 
2.34.1


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

* [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager
  2024-04-30 16:58 [PATCH v2 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
@ 2024-04-30 16:58 ` Karthikeyan Periyasamy
  2024-04-30 18:42   ` Jeff Johnson
  2024-05-03 13:19   ` Kalle Valo
  2024-04-30 16:58 ` [PATCH v2 2/4] wifi: ath12k: Refactor idle ring descriptor setup Karthikeyan Periyasamy
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 12+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30 16:58 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] 12+ messages in thread

* [PATCH v2 2/4] wifi: ath12k: Refactor idle ring descriptor setup
  2024-04-30 16:58 [PATCH v2 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
  2024-04-30 16:58 ` [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
@ 2024-04-30 16:58 ` Karthikeyan Periyasamy
  2024-04-30 18:43   ` Jeff Johnson
  2024-04-30 16:58 ` [PATCH v2 3/4] wifi: ath12k: Introduce device index Karthikeyan Periyasamy
  2024-04-30 16:58 ` [PATCH v2 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
  3 siblings, 1 reply; 12+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30 16:58 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 7843c76a82c1..f41b3f9dac3d 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;
 		}
@@ -1603,6 +1605,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] 12+ messages in thread

* [PATCH v2 3/4] wifi: ath12k: Introduce device index
  2024-04-30 16:58 [PATCH v2 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
  2024-04-30 16:58 ` [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
  2024-04-30 16:58 ` [PATCH v2 2/4] wifi: ath12k: Refactor idle ring descriptor setup Karthikeyan Periyasamy
@ 2024-04-30 16:58 ` Karthikeyan Periyasamy
  2024-04-30 18:44   ` Jeff Johnson
  2024-04-30 16:58 ` [PATCH v2 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
  3 siblings, 1 reply; 12+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30 16:58 UTC (permalink / raw
  To: ath12k; +Cc: linux-wireless, Karthikeyan Periyasamy

Introduce a device index parameter in the ath12k_base structure. This
value 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/core.h |  1 +
 drivers/net/wireless/ath/ath12k/qmi.c  |  4 ++--
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c
index 6663f4e1792d..1076efd35bcb 100644
--- a/drivers/net/wireless/ath/ath12k/core.c
+++ b/drivers/net/wireless/ath/ath12k/core.c
@@ -1262,6 +1262,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/core.h b/drivers/net/wireless/ath/ath12k/core.h
index 47dde4401210..d10d74e3a6d3 100644
--- a/drivers/net/wireless/ath/ath12k/core.h
+++ b/drivers/net/wireless/ath/ath12k/core.h
@@ -747,6 +747,7 @@ struct ath12k_base {
 	struct ath12k_qmi qmi;
 	struct ath12k_wmi_base wmi_ab;
 	struct completion fw_ready;
+	u8 device_id;
 	int num_radios;
 	/* HW channel counters frequency value in hertz common to all MACs */
 	u32 cc_freq_hz;
diff --git a/drivers/net/wireless/ath/ath12k/qmi.c b/drivers/net/wireless/ath/ath12k/qmi.c
index 5484112859a6..3bb730326a02 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] 12+ messages in thread

* [PATCH v2 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup
  2024-04-30 16:58 [PATCH v2 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
                   ` (2 preceding siblings ...)
  2024-04-30 16:58 ` [PATCH v2 3/4] wifi: ath12k: Introduce device index Karthikeyan Periyasamy
@ 2024-04-30 16:58 ` Karthikeyan Periyasamy
  2024-04-30 18:46   ` Jeff Johnson
  3 siblings, 1 reply; 12+ messages in thread
From: Karthikeyan Periyasamy @ 2024-04-30 16:58 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 f41b3f9dac3d..72ea9baaf8d7 100644
--- a/drivers/net/wireless/ath/ath12k/dp.c
+++ b/drivers/net/wireless/ath/ath12k/dp.c
@@ -1589,6 +1589,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;
@@ -1605,7 +1623,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] 12+ messages in thread

* Re: [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager
  2024-04-30 16:58 ` [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
@ 2024-04-30 18:42   ` Jeff Johnson
  2024-05-02 10:36     ` Kalle Valo
  2024-05-03 13:19   ` Kalle Valo
  1 sibling, 1 reply; 12+ messages in thread
From: Jeff Johnson @ 2024-04-30 18:42 UTC (permalink / raw
  To: Karthikeyan Periyasamy, ath12k; +Cc: linux-wireless

On 4/30/2024 9:58 AM, Karthikeyan Periyasamy wrote:
> Prefer the term "device" over "chip". Therefore, modify the relavant terms

Kalle, can you fix in pending (if there isn't a respin):

s/relavant /relevant /

> 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>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>


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

* Re: [PATCH v2 2/4] wifi: ath12k: Refactor idle ring descriptor setup
  2024-04-30 16:58 ` [PATCH v2 2/4] wifi: ath12k: Refactor idle ring descriptor setup Karthikeyan Periyasamy
@ 2024-04-30 18:43   ` Jeff Johnson
  0 siblings, 0 replies; 12+ messages in thread
From: Jeff Johnson @ 2024-04-30 18:43 UTC (permalink / raw
  To: Karthikeyan Periyasamy, ath12k; +Cc: linux-wireless

On 4/30/2024 9:58 AM, Karthikeyan Periyasamy wrote:
> 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>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>


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

* Re: [PATCH v2 3/4] wifi: ath12k: Introduce device index
  2024-04-30 16:58 ` [PATCH v2 3/4] wifi: ath12k: Introduce device index Karthikeyan Periyasamy
@ 2024-04-30 18:44   ` Jeff Johnson
  0 siblings, 0 replies; 12+ messages in thread
From: Jeff Johnson @ 2024-04-30 18:44 UTC (permalink / raw
  To: Karthikeyan Periyasamy, ath12k; +Cc: linux-wireless

On 4/30/2024 9:58 AM, Karthikeyan Periyasamy wrote:
> Introduce a device index parameter in the ath12k_base structure. This
> value 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>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>


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

* Re: [PATCH v2 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup
  2024-04-30 16:58 ` [PATCH v2 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
@ 2024-04-30 18:46   ` Jeff Johnson
  2024-05-02 10:37     ` Kalle Valo
  0 siblings, 1 reply; 12+ messages in thread
From: Jeff Johnson @ 2024-04-30 18:46 UTC (permalink / raw
  To: Karthikeyan Periyasamy, ath12k; +Cc: linux-wireless

On 4/30/2024 9:58 AM, Karthikeyan Periyasamy wrote:
> 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

Kalle, can you add the missing word in pending:
design *is* not meeting

> 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>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>


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

* Re: [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager
  2024-04-30 18:42   ` Jeff Johnson
@ 2024-05-02 10:36     ` Kalle Valo
  0 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2024-05-02 10:36 UTC (permalink / raw
  To: Jeff Johnson; +Cc: Karthikeyan Periyasamy, ath12k, linux-wireless

Jeff Johnson <quic_jjohnson@quicinc.com> writes:

> On 4/30/2024 9:58 AM, Karthikeyan Periyasamy wrote:
>> Prefer the term "device" over "chip". Therefore, modify the relavant terms
>
> Kalle, can you fix in pending (if there isn't a respin):
>
> s/relavant /relevant /

Yup, did that now.

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

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

* Re: [PATCH v2 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup
  2024-04-30 18:46   ` Jeff Johnson
@ 2024-05-02 10:37     ` Kalle Valo
  0 siblings, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2024-05-02 10:37 UTC (permalink / raw
  To: Jeff Johnson; +Cc: Karthikeyan Periyasamy, ath12k, linux-wireless

Jeff Johnson <quic_jjohnson@quicinc.com> writes:

> On 4/30/2024 9:58 AM, Karthikeyan Periyasamy wrote:
>> 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
>
> Kalle, can you add the missing word in pending:
> design *is* not meeting

Fixed in the pending branch.

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

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

* Re: [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager
  2024-04-30 16:58 ` [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
  2024-04-30 18:42   ` Jeff Johnson
@ 2024-05-03 13:19   ` Kalle Valo
  1 sibling, 0 replies; 12+ messages in thread
From: Kalle Valo @ 2024-05-03 13:19 UTC (permalink / raw
  To: Karthikeyan Periyasamy; +Cc: ath12k, linux-wireless, Karthikeyan Periyasamy

Karthikeyan Periyasamy <quic_periyasa@quicinc.com> wrote:

> Prefer the term "device" over "chip". Therefore, modify the relevant 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>
> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>

4 patches applied to ath-next branch of ath.git, thanks.

5f6c3a418b40 wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager
acc6afb31c3f wifi: ath12k: Refactor idle ring descriptor setup
b2d54ca73a5a wifi: ath12k: Introduce device index
53bf4a14f8c5 wifi: ath12k: add multi device support for WBM idle ring buffer setup

-- 
https://patchwork.kernel.org/project/linux-wireless/patch/20240430165811.1377182-2-quic_periyasa@quicinc.com/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


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

end of thread, other threads:[~2024-05-03 13:19 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-30 16:58 [PATCH v2 0/4] wifi: ath12k: Add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
2024-04-30 16:58 ` [PATCH v2 1/4] wifi: ath12k: Replace "chip" with "device" in hal Rx return buffer manager Karthikeyan Periyasamy
2024-04-30 18:42   ` Jeff Johnson
2024-05-02 10:36     ` Kalle Valo
2024-05-03 13:19   ` Kalle Valo
2024-04-30 16:58 ` [PATCH v2 2/4] wifi: ath12k: Refactor idle ring descriptor setup Karthikeyan Periyasamy
2024-04-30 18:43   ` Jeff Johnson
2024-04-30 16:58 ` [PATCH v2 3/4] wifi: ath12k: Introduce device index Karthikeyan Periyasamy
2024-04-30 18:44   ` Jeff Johnson
2024-04-30 16:58 ` [PATCH v2 4/4] wifi: ath12k: add multi device support for WBM idle ring buffer setup Karthikeyan Periyasamy
2024-04-30 18:46   ` Jeff Johnson
2024-05-02 10:37     ` Kalle Valo

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).