2024-04-27 16:27:32

by Tamizh Chelvam Raja

[permalink] [raw]
Subject: [PATCHv2 0/3] wifi: ath12k: Remove unsupported and unused ring configurations

Currently in driver doing memory allocation for tx_monitor,
tcl_cmd_ring and tcl_status ring. Here driver support for
tx_monitor mode is not there and memory for tcl_cmd and tcl_status
rings are allocated by firmware and it uses that memory instead of
host allocated. So avoid these unused ring setup configuration.

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

Tamizh Chelvam Raja (3):
wifi: ath12k: fix calling correct function for rx monitor mode
wifi: ath12k: Remove unsupported tx monitor handling
wifi: ath12k: Remove unused tcl_*_ring configuration

v2:
* Rebased on top of ToT

drivers/net/wireless/ath/ath12k/dp.c | 16 -------
drivers/net/wireless/ath/ath12k/dp.h | 2 -
drivers/net/wireless/ath/ath12k/dp_mon.c | 40 +----------------
drivers/net/wireless/ath/ath12k/dp_rx.c | 56 ------------------------
drivers/net/wireless/ath/ath12k/dp_tx.c | 44 +------------------
drivers/net/wireless/ath/ath12k/dp_tx.h | 1 -
6 files changed, 2 insertions(+), 157 deletions(-)


base-commit: bf99bc7423e18aa3475ef00a7a6fb773c31ce6df
--
2.34.1



2024-04-27 16:27:39

by Tamizh Chelvam Raja

[permalink] [raw]
Subject: [PATCHv2 1/3] wifi: ath12k: fix calling correct function for rx monitor mode

Currently in ath12k_dp_tx_htt_monitor_mode_ring_config()
ath12k_dp_tx_htt_tx_monitor_mode_ring_config() function wrongly called twice.
Fix that by calling ath12k_dp_tx_htt_rx_monitor_mode_ring_config().

Currently monitor mode is disabled in driver so the change is compile
tested and boot sequence verified.

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

Signed-off-by: Tamizh Chelvam Raja <[email protected]>
---
drivers/net/wireless/ath/ath12k/dp_tx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath12k/dp_tx.c b/drivers/net/wireless/ath/ath12k/dp_tx.c
index 9b6d7d72f57c..2fb9fc42db11 100644
--- a/drivers/net/wireless/ath/ath12k/dp_tx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_tx.c
@@ -1044,7 +1044,7 @@ int ath12k_dp_tx_htt_monitor_mode_ring_config(struct ath12k *ar, bool reset)
struct ath12k_base *ab = ar->ab;
int ret;

- ret = ath12k_dp_tx_htt_tx_monitor_mode_ring_config(ar, reset);
+ ret = ath12k_dp_tx_htt_rx_monitor_mode_ring_config(ar, reset);
if (ret) {
ath12k_err(ab, "failed to setup tx monitor filter %d\n", ret);
return ret;
--
2.34.1


2024-04-27 16:27:48

by Tamizh Chelvam Raja

[permalink] [raw]
Subject: [PATCHv2 2/3] wifi: ath12k: Remove unsupported tx monitor handling

Currently tx monitor is not supported in driver.So remove
the tx monitor ring configuration, allocation and handling.

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

Signed-off-by: Tamizh Chelvam Raja <[email protected]>
---
drivers/net/wireless/ath/ath12k/dp_mon.c | 40 +----------------
drivers/net/wireless/ath/ath12k/dp_rx.c | 56 ------------------------
drivers/net/wireless/ath/ath12k/dp_tx.c | 42 ------------------
drivers/net/wireless/ath/ath12k/dp_tx.h | 1 -
4 files changed, 1 insertion(+), 138 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/dp_mon.c b/drivers/net/wireless/ath/ath12k/dp_mon.c
index 6b0b72477540..5c6749bc4039 100644
--- a/drivers/net/wireless/ath/ath12k/dp_mon.c
+++ b/drivers/net/wireless/ath/ath12k/dp_mon.c
@@ -1903,43 +1903,6 @@ ath12k_dp_mon_tx_parse_status_tlv(struct ath12k_base *ab,
break;
}

- case HAL_MON_BUF_ADDR: {
- struct dp_rxdma_mon_ring *buf_ring = &ab->dp.tx_mon_buf_ring;
- struct dp_mon_packet_info *packet_info =
- (struct dp_mon_packet_info *)tlv_data;
- int buf_id = u32_get_bits(packet_info->cookie,
- DP_RXDMA_BUF_COOKIE_BUF_ID);
- struct sk_buff *msdu;
- struct dp_mon_mpdu *mon_mpdu = tx_ppdu_info->tx_mon_mpdu;
- struct ath12k_skb_rxcb *rxcb;
-
- spin_lock_bh(&buf_ring->idr_lock);
- msdu = idr_remove(&buf_ring->bufs_idr, buf_id);
- spin_unlock_bh(&buf_ring->idr_lock);
-
- if (unlikely(!msdu)) {
- ath12k_warn(ab, "monitor destination with invalid buf_id %d\n",
- buf_id);
- return DP_MON_TX_STATUS_PPDU_NOT_DONE;
- }
-
- rxcb = ATH12K_SKB_RXCB(msdu);
- dma_unmap_single(ab->dev, rxcb->paddr,
- msdu->len + skb_tailroom(msdu),
- DMA_FROM_DEVICE);
-
- if (!mon_mpdu->head)
- mon_mpdu->head = msdu;
- else if (mon_mpdu->tail)
- mon_mpdu->tail->next = msdu;
-
- mon_mpdu->tail = msdu;
-
- ath12k_dp_mon_buf_replenish(ab, buf_ring, 1);
- status = DP_MON_TX_BUFFER_ADDR;
- break;
- }
-
case HAL_TX_MPDU_END:
list_add_tail(&tx_ppdu_info->tx_mon_mpdu->list,
&tx_ppdu_info->dp_tx_mon_mpdu_list);
@@ -2088,8 +2051,7 @@ int ath12k_dp_mon_srng_process(struct ath12k *ar, int mac_id, int *budget,
mon_dst_ring = &pdev_dp->rxdma_mon_dst_ring[srng_id];
buf_ring = &dp->rxdma_mon_buf_ring;
} else {
- mon_dst_ring = &pdev_dp->tx_mon_dst_ring[srng_id];
- buf_ring = &dp->tx_mon_buf_ring;
+ return 0;
}

srng = &ab->hal.srng_list[mon_dst_ring->ring_id];
diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
index 75df622f25d8..ada7bc8719b7 100644
--- a/drivers/net/wireless/ath/ath12k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
@@ -422,8 +422,6 @@ static int ath12k_dp_rxdma_buf_free(struct ath12k_base *ab)

ath12k_dp_rxdma_mon_buf_ring_free(ab, &dp->rxdma_mon_buf_ring);

- ath12k_dp_rxdma_mon_buf_ring_free(ab, &dp->tx_mon_buf_ring);
-
return 0;
}

@@ -476,15 +474,6 @@ static int ath12k_dp_rxdma_buf_setup(struct ath12k_base *ab)
"failed to setup HAL_RXDMA_MONITOR_BUF\n");
return ret;
}
-
- ret = ath12k_dp_rxdma_mon_ring_buf_setup(ab,
- &dp->tx_mon_buf_ring,
- HAL_TX_MONITOR_BUF);
- if (ret) {
- ath12k_warn(ab,
- "failed to setup HAL_TX_MONITOR_BUF\n");
- return ret;
- }
}

return 0;
@@ -498,7 +487,6 @@ static void ath12k_dp_rx_pdev_srng_free(struct ath12k *ar)

for (i = 0; i < ab->hw_params->num_rxmda_per_pdev; i++) {
ath12k_dp_srng_cleanup(ab, &dp->rxdma_mon_dst_ring[i]);
- ath12k_dp_srng_cleanup(ab, &dp->tx_mon_dst_ring[i]);
}
}

@@ -554,17 +542,6 @@ static int ath12k_dp_rx_pdev_srng_alloc(struct ath12k *ar)
"failed to setup HAL_RXDMA_MONITOR_DST\n");
return ret;
}
-
- ret = ath12k_dp_srng_setup(ar->ab,
- &dp->tx_mon_dst_ring[i],
- HAL_TX_MONITOR_DST,
- 0, mac_id + i,
- DP_TX_MONITOR_DEST_RING_SIZE);
- if (ret) {
- ath12k_warn(ar->ab,
- "failed to setup HAL_TX_MONITOR_DST\n");
- return ret;
- }
}

return 0;
@@ -3970,7 +3947,6 @@ void ath12k_dp_rx_free(struct ath12k_base *ab)
ath12k_dp_srng_cleanup(ab, &dp->rxdma_err_dst_ring[i]);

ath12k_dp_srng_cleanup(ab, &dp->rxdma_mon_buf_ring.refill_buf_ring);
- ath12k_dp_srng_cleanup(ab, &dp->tx_mon_buf_ring.refill_buf_ring);

ath12k_dp_rxdma_buf_free(ab);
}
@@ -4113,15 +4089,6 @@ int ath12k_dp_rx_htt_setup(struct ath12k_base *ab)
ret);
return ret;
}
-
- ring_id = dp->tx_mon_buf_ring.refill_buf_ring.ring_id;
- ret = ath12k_dp_tx_htt_srng_setup(ab, ring_id,
- 0, HAL_TX_MONITOR_BUF);
- if (ret) {
- ath12k_warn(ab, "failed to configure rxdma_mon_buf_ring %d\n",
- ret);
- return ret;
- }
}

ret = ab->hw_params->hw_ops->rxdma_ring_sel_config(ab);
@@ -4141,9 +4108,6 @@ int ath12k_dp_rx_alloc(struct ath12k_base *ab)
idr_init(&dp->rxdma_mon_buf_ring.bufs_idr);
spin_lock_init(&dp->rxdma_mon_buf_ring.idr_lock);

- idr_init(&dp->tx_mon_buf_ring.bufs_idr);
- spin_lock_init(&dp->tx_mon_buf_ring.idr_lock);
-
ret = ath12k_dp_srng_setup(ab,
&dp->rx_refill_buf_ring.refill_buf_ring,
HAL_RXDMA_BUF, 0, 0,
@@ -4186,15 +4150,6 @@ int ath12k_dp_rx_alloc(struct ath12k_base *ab)
ath12k_warn(ab, "failed to setup HAL_RXDMA_MONITOR_BUF\n");
return ret;
}
-
- ret = ath12k_dp_srng_setup(ab,
- &dp->tx_mon_buf_ring.refill_buf_ring,
- HAL_TX_MONITOR_BUF, 0, 0,
- DP_TX_MONITOR_BUF_RING_SIZE);
- if (ret) {
- ath12k_warn(ab, "failed to setup DP_TX_MONITOR_BUF_RING_SIZE\n");
- return ret;
- }
}

ret = ath12k_dp_rxdma_buf_setup(ab);
@@ -4234,17 +4189,6 @@ int ath12k_dp_rx_pdev_alloc(struct ath12k_base *ab, int mac_id)
i, ret);
return ret;
}
-
- ring_id = dp->tx_mon_dst_ring[i].ring_id;
- ret = ath12k_dp_tx_htt_srng_setup(ab, ring_id,
- mac_id + i,
- HAL_TX_MONITOR_DST);
- if (ret) {
- ath12k_warn(ab,
- "failed to configure tx_mon_dst_ring %d %d\n",
- i, ret);
- return ret;
- }
}
out:
return 0;
diff --git a/drivers/net/wireless/ath/ath12k/dp_tx.c b/drivers/net/wireless/ath/ath12k/dp_tx.c
index 2fb9fc42db11..a9534d31a8b4 100644
--- a/drivers/net/wireless/ath/ath12k/dp_tx.c
+++ b/drivers/net/wireless/ath/ath12k/dp_tx.c
@@ -669,14 +669,6 @@ ath12k_dp_tx_get_ring_id_type(struct ath12k_base *ab,
*htt_ring_id = HTT_RXDMA_MONITOR_DESC_RING;
*htt_ring_type = HTT_SW_TO_HW_RING;
break;
- case HAL_TX_MONITOR_BUF:
- *htt_ring_id = HTT_TX_MON_HOST2MON_BUF_RING;
- *htt_ring_type = HTT_SW_TO_HW_RING;
- break;
- case HAL_TX_MONITOR_DST:
- *htt_ring_id = HTT_TX_MON_MON2HOST_DEST_RING;
- *htt_ring_type = HTT_HW_TO_SW_RING;
- break;
default:
ath12k_warn(ab, "Unsupported ring type in DP :%d\n", ring_type);
ret = -EINVAL;
@@ -1050,12 +1042,6 @@ int ath12k_dp_tx_htt_monitor_mode_ring_config(struct ath12k *ar, bool reset)
return ret;
}

- ret = ath12k_dp_tx_htt_tx_monitor_mode_ring_config(ar, reset);
- if (ret) {
- ath12k_err(ab, "failed to setup rx monitor filter %d\n", ret);
- return ret;
- }
-
return 0;
}

@@ -1209,31 +1195,3 @@ int ath12k_dp_tx_htt_tx_filter_setup(struct ath12k_base *ab, u32 ring_id,
dev_kfree_skb_any(skb);
return ret;
}
-
-int ath12k_dp_tx_htt_tx_monitor_mode_ring_config(struct ath12k *ar, bool reset)
-{
- struct ath12k_base *ab = ar->ab;
- struct ath12k_dp *dp = &ab->dp;
- struct htt_tx_ring_tlv_filter tlv_filter = {0};
- int ret, ring_id;
-
- ring_id = dp->tx_mon_buf_ring.refill_buf_ring.ring_id;
-
- /* TODO: Need to set upstream/downstream tlv filters
- * here
- */
-
- if (ab->hw_params->rxdma1_enable) {
- ret = ath12k_dp_tx_htt_tx_filter_setup(ar->ab, ring_id, 0,
- HAL_TX_MONITOR_BUF,
- DP_RXDMA_REFILL_RING_SIZE,
- &tlv_filter);
- if (ret) {
- ath12k_err(ab,
- "failed to setup filter for monitor buf %d\n", ret);
- return ret;
- }
- }
-
- return 0;
-}
diff --git a/drivers/net/wireless/ath/ath12k/dp_tx.h b/drivers/net/wireless/ath/ath12k/dp_tx.h
index 436d77e5e9ee..5f2fa3b69577 100644
--- a/drivers/net/wireless/ath/ath12k/dp_tx.h
+++ b/drivers/net/wireless/ath/ath12k/dp_tx.h
@@ -36,6 +36,5 @@ int ath12k_dp_tx_htt_tx_filter_setup(struct ath12k_base *ab, u32 ring_id,
int mac_id, enum hal_ring_type ring_type,
int tx_buf_size,
struct htt_tx_ring_tlv_filter *htt_tlv_filter);
-int ath12k_dp_tx_htt_tx_monitor_mode_ring_config(struct ath12k *ar, bool reset);
int ath12k_dp_tx_htt_monitor_mode_ring_config(struct ath12k *ar, bool reset);
#endif
--
2.34.1


Subject: Re: [PATCHv2 0/3] wifi: ath12k: Remove unsupported and unused ring configurations



On 4/27/2024 9:56 PM, Tamizh Chelvam Raja wrote:
> Currently in driver doing memory allocation for tx_monitor,
> tcl_cmd_ring and tcl_status ring. Here driver support for
> tx_monitor mode is not there and memory for tcl_cmd and tcl_status
> rings are allocated by firmware and it uses that memory instead of
> host allocated. So avoid these unused ring setup configuration.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
>
> Tamizh Chelvam Raja (3):
> wifi: ath12k: fix calling correct function for rx monitor mode
> wifi: ath12k: Remove unsupported tx monitor handling
> wifi: ath12k: Remove unused tcl_*_ring configuration
>
> v2:
> * Rebased on top of ToT
>
> drivers/net/wireless/ath/ath12k/dp.c | 16 -------
> drivers/net/wireless/ath/ath12k/dp.h | 2 -
> drivers/net/wireless/ath/ath12k/dp_mon.c | 40 +----------------
> drivers/net/wireless/ath/ath12k/dp_rx.c | 56 ------------------------
> drivers/net/wireless/ath/ath12k/dp_tx.c | 44 +------------------
> drivers/net/wireless/ath/ath12k/dp_tx.h | 1 -
> 6 files changed, 2 insertions(+), 157 deletions(-)
>
>

It nice to see code removal in general :)
But I've also seen some concerns internally around code removal
especially when the code will have to be re-added in future while
properly supporting the feature. I guess the cover letter
may need to clarify those concerns at least for internal review.

Other than that, the series LGTM

Vasanth

2024-04-28 04:58:42

by Karthikeyan Periyasamy

[permalink] [raw]
Subject: Re: [PATCHv2 1/3] wifi: ath12k: fix calling correct function for rx monitor mode



On 4/27/2024 9:56 PM, Tamizh Chelvam Raja wrote:
> Currently in ath12k_dp_tx_htt_monitor_mode_ring_config()
> ath12k_dp_tx_htt_tx_monitor_mode_ring_config() function wrongly called twice.
> Fix that by calling ath12k_dp_tx_htt_rx_monitor_mode_ring_config().
>
> Currently monitor mode is disabled in driver so the change is compile
> tested and boot sequence verified.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
>
> Signed-off-by: Tamizh Chelvam Raja <[email protected]>
> ---
> drivers/net/wireless/ath/ath12k/dp_tx.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/ath/ath12k/dp_tx.c b/drivers/net/wireless/ath/ath12k/dp_tx.c
> index 9b6d7d72f57c..2fb9fc42db11 100644
> --- a/drivers/net/wireless/ath/ath12k/dp_tx.c
> +++ b/drivers/net/wireless/ath/ath12k/dp_tx.c
> @@ -1044,7 +1044,7 @@ int ath12k_dp_tx_htt_monitor_mode_ring_config(struct ath12k *ar, bool reset)
> struct ath12k_base *ab = ar->ab;
> int ret;
>
> - ret = ath12k_dp_tx_htt_tx_monitor_mode_ring_config(ar, reset);
> + ret = ath12k_dp_tx_htt_rx_monitor_mode_ring_config(ar, reset);
> if (ret) {
> ath12k_err(ab, "failed to setup tx monitor filter %d\n", ret);
> return ret;


Looks like you modifying in wrong place because the debug log
information is not matching the rx message. no ?

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

2024-04-29 04:26:17

by Tamizh Chelvam Raja

[permalink] [raw]
Subject: Re: [PATCHv2 0/3] wifi: ath12k: Remove unsupported and unused ring configurations

On 4/28/2024 8:59 AM, Vasanthakumar Thiagarajan wrote:
>
>
> On 4/27/2024 9:56 PM, Tamizh Chelvam Raja wrote:
>> Currently in driver doing memory allocation for tx_monitor,
>> tcl_cmd_ring and tcl_status ring. Here driver support for
>> tx_monitor mode is not there and memory for tcl_cmd and tcl_status
>> rings are allocated by firmware and it uses that memory instead of
>> host allocated. So avoid these unused ring setup configuration.
>>
>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
>>
>> Tamizh Chelvam Raja (3):
>>    wifi: ath12k: fix calling correct function for rx monitor mode
>>    wifi: ath12k: Remove unsupported tx monitor handling
>>    wifi: ath12k: Remove unused tcl_*_ring configuration
>>
>> v2:
>>    * Rebased on top of ToT
>>
>>   drivers/net/wireless/ath/ath12k/dp.c     | 16 -------
>>   drivers/net/wireless/ath/ath12k/dp.h     |  2 -
>>   drivers/net/wireless/ath/ath12k/dp_mon.c | 40 +----------------
>>   drivers/net/wireless/ath/ath12k/dp_rx.c  | 56 ------------------------
>>   drivers/net/wireless/ath/ath12k/dp_tx.c  | 44 +------------------
>>   drivers/net/wireless/ath/ath12k/dp_tx.h  |  1 -
>>   6 files changed, 2 insertions(+), 157 deletions(-)
>>
>>
>
> It nice to see code removal in general :)
> But I've also seen some concerns internally around code removal
> especially when the code will have to be re-added in future while
> properly supporting the feature. I guess the cover letter
> may need to clarify those concerns at least for internal review.
>
This is mainly to avoid unnecessary memory allocation for the unused rings.
And this can be added in the future while enabling the feature.
> Other than that, the series LGTM
> > Vasanth
Tamizh

Subject: Re: [PATCHv2 0/3] wifi: ath12k: Remove unsupported and unused ring configurations



On 4/29/2024 9:54 AM, Tamizh Chelvam Raja wrote:
> On 4/28/2024 8:59 AM, Vasanthakumar Thiagarajan wrote:
>>
>>
>> On 4/27/2024 9:56 PM, Tamizh Chelvam Raja wrote:
>>> Currently in driver doing memory allocation for tx_monitor,
>>> tcl_cmd_ring and tcl_status ring. Here driver support for
>>> tx_monitor mode is not there and memory for tcl_cmd and tcl_status
>>> rings are allocated by firmware and it uses that memory instead of
>>> host allocated. So avoid these unused ring setup configuration.
>>>
>>> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
>>>
>>> Tamizh Chelvam Raja (3):
>>>    wifi: ath12k: fix calling correct function for rx monitor mode
>>>    wifi: ath12k: Remove unsupported tx monitor handling
>>>    wifi: ath12k: Remove unused tcl_*_ring configuration
>>>
>>> v2:
>>>    * Rebased on top of ToT
>>>
>>>   drivers/net/wireless/ath/ath12k/dp.c     | 16 -------
>>>   drivers/net/wireless/ath/ath12k/dp.h     |  2 -
>>>   drivers/net/wireless/ath/ath12k/dp_mon.c | 40 +----------------
>>>   drivers/net/wireless/ath/ath12k/dp_rx.c  | 56 ------------------------
>>>   drivers/net/wireless/ath/ath12k/dp_tx.c  | 44 +------------------
>>>   drivers/net/wireless/ath/ath12k/dp_tx.h  |  1 -
>>>   6 files changed, 2 insertions(+), 157 deletions(-)
>>>
>>>
>>
>> It nice to see code removal in general :)
>> But I've also seen some concerns internally around code removal
>> especially when the code will have to be re-added in future while
>> properly supporting the feature. I guess the cover letter
>> may need to clarify those concerns at least for internal review.
>>
> This is mainly to avoid unnecessary memory allocation for the unused rings.
> And this can be added in the future while enabling the feature.

I agree. I think I somehow overlooked the memory optimization part. Thanks
for the clarification.

Vasanth