ath11k: Update tx descriptor search index properly
PATCH v2 1/1 ath11k: Update tx descriptor search index properly
Tx descriptor search index field should be updated with hw peer id and not by AST Hash as per the HW/FW recommendation. Incorrect search index causes throughput degradation in all scenario for all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms. Also no need of these configuration for non station type. seen 10% throughput increase in WDS traffic with this change.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
---
v2:
- updated the commit message with more details
drivers/net/wireless/ath/ath11k/core.h | 1 + drivers/net/wireless/ath/ath11k/dp_rx.c | 8 ++++++-- drivers/net/wireless/ath/ath11k/dp_tx.c | 1 + drivers/net/wireless/ath/ath11k/hal_tx.c | 2 ++ drivers/net/wireless/ath/ath11k/hal_tx.h | 1 + drivers/net/wireless/ath/ath11k/peer.c | 9 +++++++-- drivers/net/wireless/ath/ath11k/peer.h | 3 ++- 7 files changed, 20 insertions(+), 5 deletions(-)
drivers/net/wireless/ath/ath11k/core.h +1 -0
@@ -200,6 +200,7 @@ struct ath11k_vif {u32 beacon_interval;u32 dtim_period;u16 ast_hash; +u16 ast_idx;u16 tcl_metadata;u8 hal_addr_search_flags;u8 search_type;
drivers/net/wireless/ath/ath11k/dp_rx.c +6 -2
@@ -1652,6 +1652,7 @@ void ath11k_dp_htt_htc_t2h_msg_handler(struct ath11k_base *ab,u8 mac_addr[ETH_ALEN ];u16 peer_mac_h16;u16 ast_hash; +u16 hw_peer_id;ath11k_dbg (ab,ATH11K_DBG_DP_HTT ,"dp_htt rx msg type :0x%0x\n" , type);
@@ -1672,7 +1673,7 @@ void ath11k_dp_htt_htc_t2h_msg_handler(struct ath11k_base *ab, resp->peer_map_ev.info1);ath11k_dp_get_mac_addr (resp->peer_map_ev.mac_addr_l32, peer_mac_h16, mac_addr); -ath11k_peer_map_event (ab, vdev_id, peer_id, mac_addr,0 ); +ath11k_peer_map_event (ab, vdev_id, peer_id, mac_addr,0 ,0 );break ;case HTT_T2H_MSG_TYPE_PEER_MAP2 : vdev_id = FIELD_GET(HTT_T2H_PEER_MAP_INFO_VDEV_ID,
@@ -1685,7 +1686,10 @@ void ath11k_dp_htt_htc_t2h_msg_handler(struct ath11k_base *ab, peer_mac_h16, mac_addr); ast_hash =FIELD_GET (HTT_T2H_PEER_MAP_INFO2_AST_HASH_VAL , resp->peer_map_ev.info2); -ath11k_peer_map_event (ab, vdev_id, peer_id, mac_addr, ast_hash); + hw_peer_id =FIELD_GET (HTT_T2H_PEER_MAP_INFO1_HW_PEER_ID , + resp->peer_map_ev.info1); +ath11k_peer_map_event (ab, vdev_id, peer_id, mac_addr, ast_hash, + hw_peer_id);break ;case HTT_T2H_MSG_TYPE_PEER_UNMAP :case HTT_T2H_MSG_TYPE_PEER_UNMAP2 :
drivers/net/wireless/ath/ath11k/dp_tx.c +1 -0
@@ -165,6 +165,7 @@ int ath11k_dp_tx(struct ath11k *ar, struct ath11k_vif *arvif, ti.pkt_offset =0 ; ti.lmac_id = ar->lmac_id; ti.bss_ast_hash = arvif->ast_hash; + ti.bss_ast_idx = arvif->ast_idx; ti.dscp_tid_tbl_idx =0 ; if (skb->ip_summed == CHECKSUM_PARTIAL &&
drivers/net/wireless/ath/ath11k/hal_tx.c +2 -0
@@ -71,6 +71,8 @@ void ath11k_hal_tx_cmd_desc_setup(struct ath11k_base *ab, void *cmd, tcl_cmd->info3 =FIELD_PREP (HAL_TCL_DATA_CMD_INFO3_DSCP_TID_TABLE_IDX , ti->dscp_tid_tbl_idx) |FIELD_PREP (HAL_TCL_DATA_CMD_INFO3_SEARCH_INDEX , + ti->bss_ast_idx) | +FIELD_PREP (HAL_TCL_DATA_CMD_INFO3_CACHE_SET_NUM , ti->bss_ast_hash); tcl_cmd->info4 =0 ; }
drivers/net/wireless/ath/ath11k/hal_tx.h +1 -0
@@ -29,6 +29,7 @@ struct hal_tx_info {u32 flags1;/* %HAL_TCL_DATA_CMD_INFO2_ */ u16 addr_search_flags;/* %HAL_TCL_DATA_CMD_INFO0_ADDR(X/Y)_ */ u16 bss_ast_hash; +u16 bss_ast_idx;u8 tid;u8 search_type;/* %HAL_TX_ADDR_SEARCH_ */ u8 lmac_id;
drivers/net/wireless/ath/ath11k/peer.c +7 -2
@@ -118,7 +118,7 @@ void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id) }void ath11k_peer_map_event (struct ath11k_base *ab,u8 vdev_id,u16 peer_id, -u8 *mac_addr,u16 ast_hash) +u8 *mac_addr,u16 ast_hash,u16 hw_peer_id) {struct ath11k_peer *peer;
@@ -132,6 +132,7 @@ void ath11k_peer_map_event(struct ath11k_base *ab, u8 vdev_id, u16 peer_id, peer->vdev_id = vdev_id; peer->peer_id = peer_id; peer->ast_hash = ast_hash; + peer->hw_peer_id = hw_peer_id;ether_addr_copy (peer->addr, mac_addr);list_add (&peer->list, &ab->peers);wake_up (&ab->peer_mapping_wq);
@@ -309,7 +310,11 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif, peer->pdev_idx = ar->pdev_idx; peer->sta = sta; - arvif->ast_hash = peer->ast_hash; + +if (arvif->vif->type ==NL80211_IFTYPE_STATION ) { + arvif->ast_hash = peer->ast_hash; + arvif->ast_idx = peer->hw_peer_id; + } peer->sec_type =HAL_ENCRYPT_TYPE_OPEN ; peer->sec_type_grp =HAL_ENCRYPT_TYPE_OPEN ;
drivers/net/wireless/ath/ath11k/peer.h +2 -1
@@ -14,6 +14,7 @@ struct ath11k_peer {int peer_id;u16 ast_hash;u8 pdev_idx; +u16 hw_peer_id;/* protected by ab->data_lock */ struct ieee80211_key_conf *keys[WMI_MAX_KEY_INDEX +1 ];
@@ -31,7 +32,7 @@ struct ath11k_peer {void ath11k_peer_unmap_event (struct ath11k_base *ab,u16 peer_id);void ath11k_peer_map_event (struct ath11k_base *ab,u8 vdev_id,u16 peer_id, -u8 *mac_addr,u16 ast_hash); +u8 *mac_addr,u16 ast_hash,u16 hw_peer_id);struct ath11k_peer *ath11k_peer_find (struct ath11k_base *ab,int vdev_id,const u8 *addr); struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab,
Signature · 7 lines
2.7.4 -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 11 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash as per the HW/FW recommendation. Incorrect search index causes throughput degradation in all scenario for all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms. Also no need of these configuration for non station type. seen 10% throughput increase in WDS traffic with this change.
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
Signed-off-by Karthikeyan Periyasamy <[email protected]>
Thank you for the details.
Peter
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Kalle Valo
Reviewed-by Peter OhQuoted 9 lines · Peter Oh
Quoted 8 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash as per the HW/FW recommendation. Incorrect search index causes throughput degradation in all scenario for all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms. Also no need of these configuration for non station type. seen 10% throughput increase in WDS traffic with this change.
Quoted 5 lines
Quoted 3 lines
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
Signed-off-by Karthikeyan Periyasamy <[email protected]>Thank you for the details.
BTW after you have reviewed the patch, and you think the patch is ok, you could reply with:
Patchwork automatically picks up that and then it would be an indication for me that the patch is ready to be applied. I like the Reviewed-by tag a lot as then I can see that others have also reviewed the patch.
Signature · 8 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 8 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash as per the HW/FW recommendation. Incorrect search index causes throughput degradation in all scenario for all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms. Also no need of these configuration for non station type. seen 10% throughput increase in WDS traffic with this change.
Quoted 4 lines
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
Signed-off-by Karthikeyan Periyasamy <[email protected]>Signed-off-by Kalle Valo <[email protected]>
Patch applied to ath-next branch of ath.git, thanks.
4b965be536ee ath11k: Update tx descriptor search index properly
Signature · 9 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 8 lines · Karthikeyan Periyasamy
Tx descriptor search index field should be updated with hw peer id and not by AST Hash as per the HW/FW recommendation. Incorrect search index causes throughput degradation in all scenario for all the platforms. so updated the search index field with hw peer id, which is a common change applicable for all the platforms. Also no need of these configuration for non station type. seen 10% throughput increase in WDS traffic with this change.
Quoted 4 lines
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01492-QCAHKSWPL_SILICONZ-1
Signed-off-by Karthikeyan Periyasamy <[email protected]>Signed-off-by Kalle Valo <[email protected]>
Patch applied to ath-next branch of ath.git, thanks.
4b965be536ee ath11k: Update tx descriptor search index properly
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches