wifi: ath12k: Support Pdev Scheduled Algorithm Stats

Add support to request scheduled algorithm stats from firmware
through HTT stats type 49. These stats give information such
as count of DLOFDMA enabled, disabled, probed and monitored
based on rate and latency, consecutive number of MPDUs tried
and succeeded, etc.

Note: WCN7850 firmware version -
WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4
does not support HTT stats type 49.

Sample output:
-------------
echo 49 > /sys/kernel/debug/ath12k/pci-0000\:06\:00.0/mac0/htt_stats_type
cat /sys/kernel/debug/ath12k/pci-0000\:06\:00.0/mac0/htt_stats
HTT_PDEV_SCHED_ALGO_TLV:
mac_id = 0
rate_based_dlofdma_enabled_count =  0:0, 1:0, 2:0, 3:0
rate_based_dlofdma_disabled_count =  0:0, 1:0, 2:0, 3:0
rate_based_dlofdma_probing_count =  0:0, 1:0, 2:0, 3:0
rate_based_dlofdma_monitoring_count =  0:0, 1:0, 2:0, 3:0
chan_acc_lat_based_dlofdma_enabled_count =  0:0, 1:0, 2:0, 3:0
chan_acc_lat_based_dlofdma_disabled_count =  0:0, 1:0, 2:0, 3:0
chan_acc_lat_based_dlofdma_monitoring_count =  0:0, 1:0, 2:0, 3:0
downgrade_to_dl_su_ru_alloc_fail =  0:0, 1:0, 2:0, 3:0
candidate_list_single_user_disable_ofdma =  0:0, 1:0, 2:0, 3:0
dl_cand_list_dropped_high_ul_qos_weight =  0:0, 1:0, 2:0, 3:0
ax_dlofdma_disabled_due_to_pipelining =  0:0, 1:0, 2:0, 3:0
dlofdma_disabled_su_only_eligible =  0:0, 1:0, 2:0, 3:0
dlofdma_disabled_consec_no_mpdus_tried =  0:0, 1:0, 2:0, 3:0
dlofdma_disabled_consec_no_mpdus_success =  0:0, 1:0, 2:0, 3:0

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00214-QCAHKSWPL_SILICONZ-1

Signed-off-by: Sidhanta Sahu <quic_sidhanta@quicinc.com>
Signed-off-by: Roopni Devanathan <quic_rdevanat@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Link: https://patch.msgid.link/20241014070610.3982173-2-quic_rdevanat@quicinc.com
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
This commit is contained in:
Sidhanta Sahu
2024-10-14 12:36:09 +05:30
committed by Jeff Johnson
parent 6c3bd9c31a
commit 9fa60c6d40
2 changed files with 87 additions and 0 deletions

View File

@@ -2548,6 +2548,70 @@ ath12k_htt_print_dmac_reset_stats_tlv(const void *tag_buf, u16 tag_len,
stats_req->buf_len = len;
}
static void
ath12k_htt_print_pdev_sched_algo_ofdma_stats_tlv(const void *tag_buf, u16 tag_len,
struct debug_htt_stats_req *stats_req)
{
const struct ath12k_htt_pdev_sched_algo_ofdma_stats_tlv *htt_stats_buf = tag_buf;
u8 *buf = stats_req->buf;
u32 len = stats_req->buf_len;
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
u32 mac_id_word;
if (tag_len < sizeof(*htt_stats_buf))
return;
mac_id_word = le32_to_cpu(htt_stats_buf->mac_id__word);
len += scnprintf(buf + len, buf_len - len, "HTT_PDEV_SCHED_ALGO_TLV:\n");
len += scnprintf(buf + len, buf_len - len, "mac_id = %u\n",
u32_get_bits(mac_id_word, ATH12K_HTT_STATS_MAC_ID));
len += print_array_to_buf(buf, len, "rate_based_dlofdma_enabled_count",
htt_stats_buf->rate_based_dlofdma_enabled_cnt,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "rate_based_dlofdma_disabled_count",
htt_stats_buf->rate_based_dlofdma_disabled_cnt,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "rate_based_dlofdma_probing_count",
htt_stats_buf->rate_based_dlofdma_disabled_cnt,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "rate_based_dlofdma_monitoring_count",
htt_stats_buf->rate_based_dlofdma_monitor_cnt,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "chan_acc_lat_based_dlofdma_enabled_count",
htt_stats_buf->chan_acc_lat_based_dlofdma_enabled_cnt,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "chan_acc_lat_based_dlofdma_disabled_count",
htt_stats_buf->chan_acc_lat_based_dlofdma_disabled_cnt,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "chan_acc_lat_based_dlofdma_monitoring_count",
htt_stats_buf->chan_acc_lat_based_dlofdma_monitor_cnt,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "downgrade_to_dl_su_ru_alloc_fail",
htt_stats_buf->downgrade_to_dl_su_ru_alloc_fail,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "candidate_list_single_user_disable_ofdma",
htt_stats_buf->candidate_list_single_user_disable_ofdma,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "dl_cand_list_dropped_high_ul_qos_weight",
htt_stats_buf->dl_cand_list_dropped_high_ul_qos_weight,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "ax_dlofdma_disabled_due_to_pipelining",
htt_stats_buf->ax_dlofdma_disabled_due_to_pipelining,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "dlofdma_disabled_su_only_eligible",
htt_stats_buf->dlofdma_disabled_su_only_eligible,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "dlofdma_disabled_consec_no_mpdus_tried",
htt_stats_buf->dlofdma_disabled_consec_no_mpdus_tried,
ATH12K_HTT_NUM_AC_WMM, "\n");
len += print_array_to_buf(buf, len, "dlofdma_disabled_consec_no_mpdus_success",
htt_stats_buf->dlofdma_disabled_consec_no_mpdus_success,
ATH12K_HTT_NUM_AC_WMM, "\n\n");
stats_req->buf_len = len;
}
static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
u16 tag, u16 len, const void *tag_buf,
void *user_data)
@@ -2724,6 +2788,9 @@ static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
case HTT_STATS_DMAC_RESET_STATS_TAG:
ath12k_htt_print_dmac_reset_stats_tlv(tag_buf, len, stats_req);
break;
case HTT_STATS_PDEV_SCHED_ALGO_OFDMA_STATS_TAG:
ath12k_htt_print_pdev_sched_algo_ofdma_stats_tlv(tag_buf, len, stats_req);
break;
default:
break;
}

View File

@@ -136,6 +136,7 @@ enum ath12k_dbg_htt_ext_stats_type {
ATH12K_DBG_HTT_EXT_STATS_PDEV_CCA_STATS = 19,
ATH12K_DBG_HTT_EXT_STATS_PDEV_OBSS_PD_STATS = 23,
ATH12K_DBG_HTT_EXT_STATS_SOC_ERROR = 45,
ATH12K_DBG_HTT_EXT_STATS_PDEV_SCHED_ALGO = 49,
/* keep this last */
ATH12K_DBG_HTT_NUM_EXT_STATS,
@@ -198,6 +199,7 @@ enum ath12k_dbg_htt_tlv_tag {
HTT_STATS_TX_SELFGEN_BE_STATS_TAG = 138,
HTT_STATS_TX_SELFGEN_BE_SCHED_STATUS_STATS_TAG = 139,
HTT_STATS_DMAC_RESET_STATS_TAG = 155,
HTT_STATS_PDEV_SCHED_ALGO_OFDMA_STATS_TAG = 165,
HTT_STATS_MAX_TAG,
};
@@ -1063,4 +1065,22 @@ struct ath12k_htt_dmac_reset_stats_tlv {
__le32 drain_dest_ring_mask;
} __packed;
struct ath12k_htt_pdev_sched_algo_ofdma_stats_tlv {
__le32 mac_id__word;
__le32 rate_based_dlofdma_enabled_cnt[ATH12K_HTT_NUM_AC_WMM];
__le32 rate_based_dlofdma_disabled_cnt[ATH12K_HTT_NUM_AC_WMM];
__le32 rate_based_dlofdma_probing_cnt[ATH12K_HTT_NUM_AC_WMM];
__le32 rate_based_dlofdma_monitor_cnt[ATH12K_HTT_NUM_AC_WMM];
__le32 chan_acc_lat_based_dlofdma_enabled_cnt[ATH12K_HTT_NUM_AC_WMM];
__le32 chan_acc_lat_based_dlofdma_disabled_cnt[ATH12K_HTT_NUM_AC_WMM];
__le32 chan_acc_lat_based_dlofdma_monitor_cnt[ATH12K_HTT_NUM_AC_WMM];
__le32 downgrade_to_dl_su_ru_alloc_fail[ATH12K_HTT_NUM_AC_WMM];
__le32 candidate_list_single_user_disable_ofdma[ATH12K_HTT_NUM_AC_WMM];
__le32 dl_cand_list_dropped_high_ul_qos_weight[ATH12K_HTT_NUM_AC_WMM];
__le32 ax_dlofdma_disabled_due_to_pipelining[ATH12K_HTT_NUM_AC_WMM];
__le32 dlofdma_disabled_su_only_eligible[ATH12K_HTT_NUM_AC_WMM];
__le32 dlofdma_disabled_consec_no_mpdus_tried[ATH12K_HTT_NUM_AC_WMM];
__le32 dlofdma_disabled_consec_no_mpdus_success[ATH12K_HTT_NUM_AC_WMM];
} __packed;
#endif