@@ -112,6 +112,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.fixed_fw_mem = false,
.support_off_channel_tx = false,
.tcl_ring_retry = true,
+ .tx_ring_size = DP_TCL_DATA_RING_SIZE,
},
{
.hw_rev = ATH11K_HW_IPQ6018_HW10,
@@ -189,6 +190,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.fixed_fw_mem = false,
.support_off_channel_tx = false,
.tcl_ring_retry = true,
+ .tx_ring_size = DP_TCL_DATA_RING_SIZE,
},
{
.name = "qca6390 hw2.0",
@@ -265,6 +267,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.fixed_fw_mem = false,
.support_off_channel_tx = true,
.tcl_ring_retry = true,
+ .tx_ring_size = DP_TCL_DATA_RING_SIZE,
},
{
.name = "qcn9074 hw1.0",
@@ -341,6 +344,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.fixed_fw_mem = false,
.support_off_channel_tx = false,
.tcl_ring_retry = true,
+ .tx_ring_size = DP_TCL_DATA_RING_SIZE,
},
{
.name = "wcn6855 hw2.0",
@@ -417,6 +421,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.fixed_fw_mem = false,
.support_off_channel_tx = true,
.tcl_ring_retry = true,
+ .tx_ring_size = DP_TCL_DATA_RING_SIZE,
},
{
.name = "wcn6855 hw2.1",
@@ -492,6 +497,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.fixed_fw_mem = false,
.support_off_channel_tx = true,
.tcl_ring_retry = true,
+ .tx_ring_size = DP_TCL_DATA_RING_SIZE,
},
{
.name = "wcn6750 hw1.0",
@@ -567,6 +573,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.fixed_fw_mem = true,
.support_off_channel_tx = false,
.tcl_ring_retry = false,
+ .tx_ring_size = DP_TCL_DATA_RING_SIZE_WCN6750,
},
};
@@ -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);
@@ -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
@@ -213,6 +213,7 @@ struct ath11k_hw_params {
bool fixed_fw_mem;
bool support_off_channel_tx;
bool tcl_ring_retry;
+ u32 tx_ring_size;
};
struct ath11k_hw_ops {
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@quicinc.com> --- 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(-)