Increase TCL data ring size to 2048 for WCN6750. This is needed to meet 160 MHz TX throughput. Add a new hw_param to indicate the TX ring size for individual devices. Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1 Signed-off-by: Manikanta Pubbisetty <quic_mpubbise@xxxxxxxxxxx> --- drivers/net/wireless/ath/ath11k/core.c | 7 +++++++ drivers/net/wireless/ath/ath11k/dp.c | 2 +- drivers/net/wireless/ath/ath11k/dp.h | 2 ++ drivers/net/wireless/ath/ath11k/hw.h | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c index 1bcc108e9a85..e054514b3b09 100644 --- a/drivers/net/wireless/ath/ath11k/core.c +++ b/drivers/net/wireless/ath/ath11k/core.c @@ -109,6 +109,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .support_off_channel_tx = false, .supports_multi_bssid = false, .tcl_ring_retry = true, + .tx_ring_size = DP_TCL_DATA_RING_SIZE, }, { .hw_rev = ATH11K_HW_IPQ6018_HW10, @@ -183,6 +184,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .support_off_channel_tx = false, .supports_multi_bssid = false, .tcl_ring_retry = true, + .tx_ring_size = DP_TCL_DATA_RING_SIZE, }, { .name = "qca6390 hw2.0", @@ -256,6 +258,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .support_off_channel_tx = true, .supports_multi_bssid = true, .tcl_ring_retry = true, + .tx_ring_size = DP_TCL_DATA_RING_SIZE, }, { .name = "qcn9074 hw1.0", @@ -329,6 +332,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .support_off_channel_tx = false, .supports_multi_bssid = false, .tcl_ring_retry = true, + .tx_ring_size = DP_TCL_DATA_RING_SIZE, }, { .name = "wcn6855 hw2.0", @@ -402,6 +406,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .support_off_channel_tx = true, .supports_multi_bssid = true, .tcl_ring_retry = true, + .tx_ring_size = DP_TCL_DATA_RING_SIZE, }, { .name = "wcn6855 hw2.1", @@ -474,6 +479,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .support_off_channel_tx = true, .supports_multi_bssid = true, .tcl_ring_retry = true, + .tx_ring_size = DP_TCL_DATA_RING_SIZE, }, { .name = "wcn6750 hw1.0", @@ -546,6 +552,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .support_off_channel_tx = false, .supports_multi_bssid = true, .tcl_ring_retry = false, + .tx_ring_size = DP_TCL_DATA_RING_SIZE_WCN6750, }, }; diff --git a/drivers/net/wireless/ath/ath11k/dp.c b/drivers/net/wireless/ath/ath11k/dp.c index 4f7381719840..fff8decf311b 100644 --- a/drivers/net/wireless/ath/ath11k/dp.c +++ b/drivers/net/wireless/ath/ath11k/dp.c @@ -401,7 +401,7 @@ static int ath11k_dp_srng_common_setup(struct ath11k_base *ab) ret = ath11k_dp_srng_setup(ab, &dp->tx_ring[i].tcl_data_ring, HAL_TCL_DATA, tcl_num, 0, - DP_TCL_DATA_RING_SIZE); + ab->hw_params.tx_ring_size); if (ret) { ath11k_warn(ab, "failed to set up tcl_data ring (%d) :%d\n", i, ret); diff --git a/drivers/net/wireless/ath/ath11k/dp.h b/drivers/net/wireless/ath/ath11k/dp.h index 8af2985ca2d9..16fb536da5cf 100644 --- a/drivers/net/wireless/ath/ath11k/dp.h +++ b/drivers/net/wireless/ath/ath11k/dp.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause-Clear */ /* * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. */ #ifndef ATH11K_DP_H @@ -203,6 +204,7 @@ struct ath11k_pdev_dp { #define DP_WBM_RELEASE_RING_SIZE 64 #define DP_TCL_DATA_RING_SIZE 512 +#define DP_TCL_DATA_RING_SIZE_WCN6750 2048 #define DP_TX_COMP_RING_SIZE 32768 #define DP_TX_IDR_SIZE DP_TX_COMP_RING_SIZE #define DP_TCL_CMD_RING_SIZE 32 diff --git a/drivers/net/wireless/ath/ath11k/hw.h b/drivers/net/wireless/ath/ath11k/hw.h index 5164c471da6e..06c4dc30827b 100644 --- a/drivers/net/wireless/ath/ath11k/hw.h +++ b/drivers/net/wireless/ath/ath11k/hw.h @@ -210,6 +210,7 @@ struct ath11k_hw_params { bool support_off_channel_tx; bool supports_multi_bssid; bool tcl_ring_retry; + u32 tx_ring_size; }; struct ath11k_hw_ops { -- 2.37.1