wifi: ath12k: Support Received FSE Stats
Add support to request received Finite State Entropy stats from firmware through HTT stats type 28. These stats give software and hardware FSE stats such as cache entry count, full cache count, current and peak occupancy count, pending search counts, etc. Sample output: ------------- echo 28 > /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_STATS_RX_FSE_STATS_TLV: === Software RX FSE STATS === Enable count = 0 Disable count = 0 Cache invalidate entry count = 0 Full cache invalidate count = 0 === Hardware RX FSE STATS === Cache hits count = 0 Cache no. of searches = 0 Cache occupancy peak count: [0] = 0 [1-16] = 0 [17-32] = 0 [33-48] = 0 [49-64] = 0 [65-80] = 0 [81-96] = 0 [97-112] = 0 [113-127] = 0 [128] = 0 Cache occupancy current count: [0] = 0 [1-16] = 0 [17-32] = 0 [33-48] = 0 [49-64] = 0 [65-80] = 0 [81-96] = 0 [97-112] = 0 [113-127] = 0 [128] = 0 Cache search square count: [0] = 0 [1-50] = 0 [51-100] = 0 [101-200] = 0 [201-255] = 0 [256] = 0 Cache search peak pending count: [0] = 0 [1-2] = 0 [3-4] = 0 [Greater/Equal to 5] = 0 Cache search tot pending count: [0] = 0 [1-2] = 0 [3-4] = 0 [Greater/Equal to 5] = 0 Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0-03427-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.15378.4 Signed-off-by: Dinesh Karthikeyan <quic_dinek@quicinc.com> Signed-off-by: Roopni Devanathan <quic_rdevanat@quicinc.com> Link: https://patch.msgid.link/20250204064417.3671928-6-quic_rdevanat@quicinc.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
This commit is contained in:
committed by
Jeff Johnson
parent
1dbaae78e7
commit
7b19d5adad
@@ -3200,6 +3200,94 @@ ath12k_htt_print_ul_mumimo_trig_stats(const void *tag_buf, u16 tag_len,
|
||||
stats_req->buf_len = len;
|
||||
}
|
||||
|
||||
static void
|
||||
ath12k_htt_print_rx_fse_stats_tlv(const void *tag_buf, u16 tag_len,
|
||||
struct debug_htt_stats_req *stats_req)
|
||||
{
|
||||
const struct ath12k_htt_rx_fse_stats_tlv *htt_stats_buf = tag_buf;
|
||||
u32 buf_len = ATH12K_HTT_STATS_BUF_SIZE;
|
||||
u32 len = stats_req->buf_len;
|
||||
u8 *buf = stats_req->buf;
|
||||
|
||||
if (tag_len < sizeof(*htt_stats_buf))
|
||||
return;
|
||||
|
||||
len += scnprintf(buf + len, buf_len - len, "HTT_STATS_RX_FSE_STATS_TLV:\n");
|
||||
len += scnprintf(buf + len, buf_len - len, "=== Software RX FSE STATS ===\n");
|
||||
len += scnprintf(buf + len, buf_len - len, "Enable count = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_enable_cnt));
|
||||
len += scnprintf(buf + len, buf_len - len, "Disable count = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_disable_cnt));
|
||||
len += scnprintf(buf + len, buf_len - len, "Cache invalidate entry count = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_invalidate_entry_cnt));
|
||||
len += scnprintf(buf + len, buf_len - len, "Full cache invalidate count = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_full_cache_invalidate_cnt));
|
||||
|
||||
len += scnprintf(buf + len, buf_len - len, "\n=== Hardware RX FSE STATS ===\n");
|
||||
len += scnprintf(buf + len, buf_len - len, "Cache hits count = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_num_cache_hits_cnt));
|
||||
len += scnprintf(buf + len, buf_len - len, "Cache no. of searches = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_num_searches_cnt));
|
||||
len += scnprintf(buf + len, buf_len - len, "Cache occupancy peak count:\n");
|
||||
len += scnprintf(buf + len, buf_len - len, "[0] = %u [1-16] = %u [17-32] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[0]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[1]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[2]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[33-48] = %u [49-64] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[3]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[4]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[65-80] = %u [81-96] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[5]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[6]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[97-112] = %u [113-127] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[7]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[8]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[128] = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_peak_cnt[9]));
|
||||
len += scnprintf(buf + len, buf_len - len, "Cache occupancy current count:\n");
|
||||
len += scnprintf(buf + len, buf_len - len, "[0] = %u [1-16] = %u [17-32] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[0]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[1]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[2]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[33-48] = %u [49-64] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[3]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[4]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[65-80] = %u [81-96] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[5]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[6]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[97-112] = %u [113-127] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[7]),
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[8]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[128] = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_cache_occupancy_curr_cnt[9]));
|
||||
len += scnprintf(buf + len, buf_len - len, "Cache search square count:\n");
|
||||
len += scnprintf(buf + len, buf_len - len, "[0] = %u [1-50] = %u [51-100] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_square_cnt[0]),
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_square_cnt[1]),
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_square_cnt[2]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[101-200] = %u [201-255] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_square_cnt[3]),
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_square_cnt[4]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[256] = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_square_cnt[5]));
|
||||
len += scnprintf(buf + len, buf_len - len, "Cache search peak pending count:\n");
|
||||
len += scnprintf(buf + len, buf_len - len, "[0] = %u [1-2] = %u [3-4] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_peak_cnt[0]),
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_peak_cnt[1]),
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_peak_cnt[2]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[Greater/Equal to 5] = %u\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_peak_cnt[3]));
|
||||
len += scnprintf(buf + len, buf_len - len, "Cache search tot pending count:\n");
|
||||
len += scnprintf(buf + len, buf_len - len, "[0] = %u [1-2] = %u [3-4] = %u ",
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_pending_cnt[0]),
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_pending_cnt[1]),
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_pending_cnt[2]));
|
||||
len += scnprintf(buf + len, buf_len - len, "[Greater/Equal to 5] = %u\n\n",
|
||||
le32_to_cpu(htt_stats_buf->fse_search_stat_pending_cnt[3]));
|
||||
|
||||
stats_req->buf_len = len;
|
||||
}
|
||||
|
||||
static void
|
||||
ath12k_htt_print_pdev_tx_rate_txbf_stats_tlv(const void *tag_buf, u16 tag_len,
|
||||
struct debug_htt_stats_req *stats_req)
|
||||
@@ -5121,6 +5209,9 @@ static int ath12k_dbg_htt_ext_stats_parse(struct ath12k_base *ab,
|
||||
case HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_TAG:
|
||||
ath12k_htt_print_ul_mumimo_trig_stats(tag_buf, len, stats_req);
|
||||
break;
|
||||
case HTT_STATS_RX_FSE_STATS_TAG:
|
||||
ath12k_htt_print_rx_fse_stats_tlv(tag_buf, len, stats_req);
|
||||
break;
|
||||
case HTT_STATS_PDEV_TX_RATE_TXBF_STATS_TAG:
|
||||
ath12k_htt_print_pdev_tx_rate_txbf_stats_tlv(tag_buf, len, stats_req);
|
||||
break;
|
||||
|
||||
@@ -141,6 +141,7 @@ enum ath12k_dbg_htt_ext_stats_type {
|
||||
ATH12K_DBG_HTT_EXT_STATS_LATENCY_PROF_STATS = 25,
|
||||
ATH12K_DBG_HTT_EXT_STATS_PDEV_UL_TRIG_STATS = 26,
|
||||
ATH12K_DBG_HTT_EXT_STATS_PDEV_UL_MUMIMO_TRIG_STATS = 27,
|
||||
ATH12K_DBG_HTT_EXT_STATS_FSE_RX = 28,
|
||||
ATH12K_DBG_HTT_EXT_STATS_PDEV_RX_RATE_EXT = 30,
|
||||
ATH12K_DBG_HTT_EXT_STATS_PDEV_TX_RATE_TXBF = 31,
|
||||
ATH12K_DBG_HTT_EXT_STATS_TXBF_OFDMA = 32,
|
||||
@@ -215,6 +216,7 @@ enum ath12k_dbg_htt_tlv_tag {
|
||||
HTT_STATS_RX_PDEV_UL_TRIG_STATS_TAG = 94,
|
||||
HTT_STATS_RX_PDEV_UL_OFDMA_USER_STATS_TAG = 95,
|
||||
HTT_STATS_RX_PDEV_UL_MUMIMO_TRIG_STATS_TAG = 97,
|
||||
HTT_STATS_RX_FSE_STATS_TAG = 98,
|
||||
HTT_STATS_SCHED_TXQ_SUPERCYCLE_TRIGGER_TAG = 100,
|
||||
HTT_STATS_PDEV_CTRL_PATH_TX_STATS_TAG = 102,
|
||||
HTT_STATS_RX_PDEV_RATE_EXT_STATS_TAG = 103,
|
||||
@@ -1450,6 +1452,26 @@ struct ath12k_htt_rx_ul_mumimo_trig_stats_tlv {
|
||||
__le32 mumimo_bsc_trig_rx_qos_null_only;
|
||||
} __packed;
|
||||
|
||||
#define ATH12K_HTT_RX_NUM_MAX_PEAK_OCCUPANCY_INDEX 10
|
||||
#define ATH12K_HTT_RX_NUM_MAX_CURR_OCCUPANCY_INDEX 10
|
||||
#define ATH12K_HTT_RX_NUM_SQUARE_INDEX 6
|
||||
#define ATH12K_HTT_RX_NUM_MAX_PEAK_SEARCH_INDEX 4
|
||||
#define ATH12K_HTT_RX_NUM_MAX_PENDING_SEARCH_INDEX 4
|
||||
|
||||
struct ath12k_htt_rx_fse_stats_tlv {
|
||||
__le32 fse_enable_cnt;
|
||||
__le32 fse_disable_cnt;
|
||||
__le32 fse_cache_invalidate_entry_cnt;
|
||||
__le32 fse_full_cache_invalidate_cnt;
|
||||
__le32 fse_num_cache_hits_cnt;
|
||||
__le32 fse_num_searches_cnt;
|
||||
__le32 fse_cache_occupancy_peak_cnt[ATH12K_HTT_RX_NUM_MAX_PEAK_OCCUPANCY_INDEX];
|
||||
__le32 fse_cache_occupancy_curr_cnt[ATH12K_HTT_RX_NUM_MAX_CURR_OCCUPANCY_INDEX];
|
||||
__le32 fse_search_stat_square_cnt[ATH12K_HTT_RX_NUM_SQUARE_INDEX];
|
||||
__le32 fse_search_stat_peak_cnt[ATH12K_HTT_RX_NUM_MAX_PEAK_SEARCH_INDEX];
|
||||
__le32 fse_search_stat_pending_cnt[ATH12K_HTT_RX_NUM_MAX_PENDING_SEARCH_INDEX];
|
||||
} __packed;
|
||||
|
||||
#define ATH12K_HTT_TX_BF_RATE_STATS_NUM_MCS_COUNTERS 14
|
||||
#define ATH12K_HTT_TX_PDEV_STATS_NUM_LEGACY_OFDM_STATS 8
|
||||
#define ATH12K_HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
|
||||
|
||||
Reference in New Issue
Block a user