qcacmn: Add history for REO queue descriptor events

Add history to log REO queue desc update and free events.

Change-Id: If2992ff1256fad49ea4ea6bd90b6dfe4a63d2bc4
CRs-Fixed: 2926919
This commit is contained in:
Karthik Kantamneni
2021-04-21 23:07:51 +05:30
committed by Madan Koyyalamudi
parent 5d097b9e40
commit 26086e7971
3 changed files with 66 additions and 0 deletions

View File

@@ -41,6 +41,12 @@
#include "dp_hist.h"
#endif
#ifdef REO_QDESC_HISTORY
#define REO_QDESC_HISTORY_SIZE 512
uint64_t reo_qdesc_history_idx;
struct reo_qdesc_event reo_qdesc_history[REO_QDESC_HISTORY_SIZE];
#endif
#ifdef FEATURE_WDS
static inline bool
dp_peer_ast_free_in_unmap_supported(struct dp_soc *soc,
@@ -77,6 +83,42 @@ static void dp_soc_wds_detach(struct dp_soc *soc)
}
#endif
#ifdef REO_QDESC_HISTORY
static inline void
dp_rx_reo_qdesc_history_add(struct reo_desc_list_node *free_desc,
enum reo_qdesc_event_type type)
{
struct reo_qdesc_event *evt;
struct dp_rx_tid *rx_tid = &free_desc->rx_tid;
uint32_t idx;
reo_qdesc_history_idx++;
idx = (reo_qdesc_history_idx & (REO_QDESC_HISTORY_SIZE - 1));
evt = &reo_qdesc_history[idx];
qdf_mem_copy(evt->peer_mac, free_desc->peer_mac, QDF_MAC_ADDR_SIZE);
evt->qdesc_addr = rx_tid->hw_qdesc_paddr;
evt->ts = qdf_get_log_timestamp();
evt->type = type;
}
#define DP_RX_REO_QDESC_GET_MAC(freedesc, peer) \
qdf_mem_copy(freedesc->peer_mac, peer->mac_addr.raw, QDF_MAC_ADDR_SIZE)
#define DP_RX_REO_QDESC_UPDATE_EVT(free_desc) \
dp_rx_reo_qdesc_history_add((free_desc), REO_QDESC_UPDATE_CB)
#define DP_RX_REO_QDESC_FREE_EVT(free_desc) \
dp_rx_reo_qdesc_history_add((free_desc), REO_QDESC_FREE)
#else
#define DP_RX_REO_QDESC_GET_MAC(freedesc, peer)
#define DP_RX_REO_QDESC_UPDATE_EVT(free_desc)
#define DP_RX_REO_QDESC_FREE_EVT(free_desc)
#endif
static inline void
dp_set_ssn_valid_flag(struct hal_reo_cmd_params *params,
uint8_t valid)
@@ -2492,6 +2534,9 @@ static void dp_reo_desc_free(struct dp_soc *soc, void *cb_ctxt,
dp_peer_info("%pK: %lu hw_qdesc_paddr: %pK, tid:%d", soc,
curr_ts, (void *)(rx_tid->hw_qdesc_paddr),
rx_tid->tid);
DP_RX_REO_QDESC_FREE_EVT(freedesc);
qdf_mem_unmap_nbytes_single(soc->osdev,
rx_tid->hw_qdesc_paddr,
QDF_DMA_BIDIRECTIONAL,
@@ -2831,6 +2876,8 @@ void dp_rx_tid_delete_cb(struct dp_soc *soc, void *cb_ctxt,
struct hal_reo_cmd_params params;
bool flush_failure = false;
DP_RX_REO_QDESC_UPDATE_EVT(freedesc);
if (reo_status->rx_queue_status.header.status == HAL_REO_CMD_DRAIN) {
qdf_mem_zero(reo_status, sizeof(*reo_status));
reo_status->fl_cache_status.header.status = HAL_REO_CMD_DRAIN;
@@ -2982,6 +3029,8 @@ static int dp_rx_tid_delete_wifi3(struct dp_peer *peer, int tid)
qdf_mem_zero(&params, sizeof(params));
DP_RX_REO_QDESC_GET_MAC(freedesc, peer);
params.std.need_status = 1;
params.std.addr_lo = rx_tid->hw_qdesc_paddr & 0xffffffff;
params.std.addr_hi = (uint64_t)(rx_tid->hw_qdesc_paddr) >> 32;