[PATCH ath-next] wifi: ath12k: Enable AST index based address search in Station Mode

Mahendran P quic_mahep at quicinc.com
Mon Apr 28 21:43:45 PDT 2025


On 4/22/2025 3:12 PM, Nithyanantham Paramasivam wrote:
> From: Thiraviyam Mariyappan <quic_tmariyap at quicinc.com>
> 
> Currently, TCL performs the TX address search for each entry during
> transmission, which may lead to packet delays.
> 
> To mitigate this issue, enable AST index-based address search during
> transmission in station mode. This AST index-based search is not
> enabled in AP mode due to the complexity involved in fetching peer
> information.
> 
> Implement changes to retrieve the offset of ast_idx/ast_hash values
> from the PEER_MAP3 event, update the vdev search type to ADDRX, and
> enable AST lookup in the bank configuration.
> 
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
> 
> Signed-off-by: Thiraviyam Mariyappan <quic_tmariyap at quicinc.com>
> Signed-off-by: Nithyanantham Paramasivam <nithyanantham.paramasivam at oss.qualcomm.com>
> ---
>  drivers/net/wireless/ath/ath12k/dp.c    | 10 +++++-----
>  drivers/net/wireless/ath/ath12k/dp.h    |  2 ++
>  drivers/net/wireless/ath/ath12k/dp_rx.c |  6 +++++-
>  3 files changed, 12 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath12k/dp.c b/drivers/net/wireless/ath/ath12k/dp.c
> index ad873013e46c..0291fbea6312 100644
> --- a/drivers/net/wireless/ath/ath12k/dp.c
> +++ b/drivers/net/wireless/ath/ath12k/dp.c
> @@ -354,7 +354,10 @@ u32 ath12k_dp_tx_get_vdev_bank_config(struct ath12k_base *ab,
>  			u32_encode_bits(0, HAL_TX_BANK_CONFIG_EPD);
>  
>  	/* only valid if idx_lookup_override is not set in tcl_data_cmd */
> -	bank_config |= u32_encode_bits(0, HAL_TX_BANK_CONFIG_INDEX_LOOKUP_EN);
> +	if (ahvif->vdev_type == WMI_VDEV_TYPE_STA)
> +		bank_config |= u32_encode_bits(1, HAL_TX_BANK_CONFIG_INDEX_LOOKUP_EN);
> +	else
> +		bank_config |= u32_encode_bits(0, HAL_TX_BANK_CONFIG_INDEX_LOOKUP_EN);
>  
>  	bank_config |= u32_encode_bits(arvif->hal_addr_search_flags & HAL_TX_ADDRX_EN,
>  					HAL_TX_BANK_CONFIG_ADDRX_EN) |
> @@ -1107,11 +1110,8 @@ static void ath12k_dp_update_vdev_search(struct ath12k_link_vif *arvif)
>  {
>  	switch (arvif->ahvif->vdev_type) {
>  	case WMI_VDEV_TYPE_STA:
> -		/* TODO: Verify the search type and flags since ast hash
> -		 * is not part of peer mapv3
> -		 */
>  		arvif->hal_addr_search_flags = HAL_TX_ADDRY_EN;
> -		arvif->search_type = HAL_TX_ADDR_SEARCH_DEFAULT;
> +		arvif->search_type = HAL_TX_ADDR_SEARCH_INDEX;
>  		break;
>  	case WMI_VDEV_TYPE_AP:
>  	case WMI_VDEV_TYPE_IBSS:
> diff --git a/drivers/net/wireless/ath/ath12k/dp.h b/drivers/net/wireless/ath/ath12k/dp.h
> index 706d766d8c81..e3923ff02dbd 100644
> --- a/drivers/net/wireless/ath/ath12k/dp.h
> +++ b/drivers/net/wireless/ath/ath12k/dp.h
> @@ -1330,6 +1330,8 @@ struct htt_t2h_version_conf_msg {
>  #define HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16	GENMASK(15, 0)
>  #define HTT_T2H_PEER_MAP_INFO1_HW_PEER_ID	GENMASK(31, 16)
>  #define HTT_T2H_PEER_MAP_INFO2_AST_HASH_VAL	GENMASK(15, 0)
> +#define HTT_T2H_PEER_MAP3_INFO2_HW_PEER_ID	GENMASK(15, 0)
> +#define HTT_T2H_PEER_MAP3_INFO2_AST_HASH_VAL	GENMASK(31, 16)
>  #define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_M	BIT(16)
>  #define HTT_T2H_PEER_MAP_INFO2_NEXT_HOP_S	16
>  
> diff --git a/drivers/net/wireless/ath/ath12k/dp_rx.c b/drivers/net/wireless/ath/ath12k/dp_rx.c
> index 1abfbd15f13c..f83e34db83c0 100644
> --- a/drivers/net/wireless/ath/ath12k/dp_rx.c
> +++ b/drivers/net/wireless/ath/ath12k/dp_rx.c
> @@ -1802,8 +1802,12 @@ void ath12k_dp_htt_htc_t2h_msg_handler(struct ath12k_base *ab,
>  					     HTT_T2H_PEER_MAP_INFO1_MAC_ADDR_H16);
>  		ath12k_dp_get_mac_addr(le32_to_cpu(resp->peer_map_ev.mac_addr_l32),
>  				       peer_mac_h16, mac_addr);
> +		ast_hash = le32_get_bits(resp->peer_map_ev.info2,
> +					 HTT_T2H_PEER_MAP3_INFO2_AST_HASH_VAL);
> +		hw_peer_id = le32_get_bits(resp->peer_map_ev.info2,
> +					   HTT_T2H_PEER_MAP3_INFO2_HW_PEER_ID);
>  		ath12k_peer_map_event(ab, vdev_id, peer_id, mac_addr, ast_hash,
> -				      peer_id);
> +				      hw_peer_id);
>  		break;
>  	case HTT_T2H_MSG_TYPE_PEER_UNMAP:
>  	case HTT_T2H_MSG_TYPE_PEER_UNMAP2:
> 
> base-commit: d33705bb41ff786b537f8ed50a187a474db111c1

Reviewed-by: Mahendran P <quic_mahep at quicinc.com>




More information about the ath12k mailing list