]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ath10k: change htt tx desc/qcache peer limit config
authorMichal Kazior <michal.kazior@tieto.com>
Tue, 1 Mar 2016 12:16:11 +0000 (13:16 +0100)
committerKalle Valo <kvalo@qca.qualcomm.com>
Sun, 6 Mar 2016 14:31:13 +0000 (16:31 +0200)
The number of HTT Tx descriptors and qcache peer
limit aren't hw-specific. In fact they are
firmware specific and should not be placed in
hw_params.

The QCA4019 limits were submitted with the peer
flow control firmware only and to my understanding
there's no non-peer-flow-ctrl QCA4019 firmware.

However QCA99X0 is planned to run firmware
supporting the feature as well. Therefore this
patch enables QCA99X0 to use 2500 tx descriptors
whenever possible instead of just 1424.

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/core.c
drivers/net/wireless/ath/ath10k/core.h
drivers/net/wireless/ath/ath10k/hw.h
drivers/net/wireless/ath/ath10k/wmi.c

index 6f606f8fce25c6a30340c70896ed1119aca1f8d9..2389c0713c13a902130265ef8ff056f42489106c 100644 (file)
@@ -156,8 +156,6 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
                .channel_counters_freq_hz = 150000,
                .max_probe_resp_desc_thres = 24,
                .hw_4addr_pad = ATH10K_HW_4ADDR_PAD_BEFORE,
-               .num_msdu_desc = 1424,
-               .qcache_active_peers = 50,
                .tx_chain_mask = 0xf,
                .rx_chain_mask = 0xf,
                .max_spatial_stream = 4,
@@ -217,8 +215,6 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
                .channel_counters_freq_hz = 125000,
                .max_probe_resp_desc_thres = 24,
                .hw_4addr_pad = ATH10K_HW_4ADDR_PAD_BEFORE,
-               .num_msdu_desc = 2500,
-               .qcache_active_peers = 35,
                .tx_chain_mask = 0x3,
                .rx_chain_mask = 0x3,
                .max_spatial_stream = 2,
@@ -1538,9 +1534,14 @@ static int ath10k_core_init_firmware_features(struct ath10k *ar)
                ar->num_active_peers = TARGET_10_4_ACTIVE_PEERS;
                ar->max_num_vdevs = TARGET_10_4_NUM_VDEVS;
                ar->num_tids = TARGET_10_4_TGT_NUM_TIDS;
-               ar->htt.max_num_pending_tx = ar->hw_params.num_msdu_desc;
                ar->fw_stats_req_mask = WMI_STAT_PEER;
                ar->max_spatial_stream = ar->hw_params.max_spatial_stream;
+
+               if (test_bit(ATH10K_FW_FEATURE_PEER_FLOW_CONTROL,
+                            ar->fw_features))
+                       ar->htt.max_num_pending_tx = TARGET_10_4_NUM_MSDU_DESC_PFC;
+               else
+                       ar->htt.max_num_pending_tx = TARGET_10_4_NUM_MSDU_DESC;
                break;
        case ATH10K_FW_WMI_OP_VERSION_UNSET:
        case ATH10K_FW_WMI_OP_VERSION_MAX:
index 3050e497fd22debace3f0380da711a9b02504a94..23ba03fb7a5f5e1663edb54bf34b254c53c3f1d0 100644 (file)
@@ -692,8 +692,6 @@ struct ath10k {
                /* The padding bytes's location is different on various chips */
                enum ath10k_hw_4addr_pad hw_4addr_pad;
 
-               u32 num_msdu_desc;
-               u32 qcache_active_peers;
                u32 tx_chain_mask;
                u32 rx_chain_mask;
                u32 max_spatial_stream;
index f0cfbc745c97dea91d368e5de4ef72bdb00702e2..1ff617b05010bafeaa2e04944547bccd593bcc13 100644 (file)
@@ -431,10 +431,14 @@ enum ath10k_hw_4addr_pad {
 #define TARGET_10_4_ACTIVE_PEERS               0
 
 #define TARGET_10_4_NUM_QCACHE_PEERS_MAX       512
+#define TARGET_10_4_QCACHE_ACTIVE_PEERS                50
+#define TARGET_10_4_QCACHE_ACTIVE_PEERS_PFC    35
 #define TARGET_10_4_NUM_OFFLOAD_PEERS          0
 #define TARGET_10_4_NUM_OFFLOAD_REORDER_BUFFS  0
 #define TARGET_10_4_NUM_PEER_KEYS              2
 #define TARGET_10_4_TGT_NUM_TIDS               ((TARGET_10_4_NUM_PEERS) * 2)
+#define TARGET_10_4_NUM_MSDU_DESC              (1024 + 400)
+#define TARGET_10_4_NUM_MSDU_DESC_PFC          2500
 #define TARGET_10_4_AST_SKID_LIMIT             32
 
 /* 100 ms for video, best-effort, and background */
index 70261387d1a5733a6069e9274222d49ec9a8cb99..c31b4878cdc6fb1957ff677b4e498b14d3938b0e 100644 (file)
@@ -4617,10 +4617,16 @@ static void ath10k_wmi_event_service_ready_work(struct work_struct *work)
        }
 
        if (test_bit(WMI_SERVICE_PEER_CACHING, ar->wmi.svc_map)) {
+               if (test_bit(ATH10K_FW_FEATURE_PEER_FLOW_CONTROL,
+                            ar->fw_features))
+                       ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS_PFC +
+                                              ar->max_num_vdevs;
+               else
+                       ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS +
+                                              ar->max_num_vdevs;
+
                ar->max_num_peers = TARGET_10_4_NUM_QCACHE_PEERS_MAX +
                                    ar->max_num_vdevs;
-               ar->num_active_peers = ar->hw_params.qcache_active_peers +
-                                      ar->max_num_vdevs;
                ar->num_tids = ar->num_active_peers * 2;
                ar->max_num_stations = TARGET_10_4_NUM_QCACHE_PEERS_MAX;
        }