qcacmn: Add API to print UMAC reset stats
Add API to print UMAC reset and MLO UMAC reset related stats. Change-Id: I0925cb8df74a9d33633d180a4cbecd11856d67a5 CRs-Fixed: 3425706
This commit is contained in:

committed by
Madan Koyyalamudi

parent
d458f39acf
commit
56160b1881
@@ -1690,6 +1690,7 @@ enum cdp_vdev_param_type {
|
|||||||
* @CDP_UMAC_RST_SKEL_ENABLE: Enable Umac reset skeleton code for debug
|
* @CDP_UMAC_RST_SKEL_ENABLE: Enable Umac reset skeleton code for debug
|
||||||
* @CDP_PPEDS_ENABLE: PPEDS is enabled or not
|
* @CDP_PPEDS_ENABLE: PPEDS is enabled or not
|
||||||
* @CDP_SAWF_STATS: set SAWF stats config
|
* @CDP_SAWF_STATS: set SAWF stats config
|
||||||
|
* @CDP_UMAC_RESET_STATS: UMAC reset stats
|
||||||
*/
|
*/
|
||||||
enum cdp_psoc_param_type {
|
enum cdp_psoc_param_type {
|
||||||
CDP_ENABLE_RATE_STATS,
|
CDP_ENABLE_RATE_STATS,
|
||||||
@@ -1702,6 +1703,7 @@ enum cdp_psoc_param_type {
|
|||||||
CDP_UMAC_RST_SKEL_ENABLE,
|
CDP_UMAC_RST_SKEL_ENABLE,
|
||||||
CDP_PPEDS_ENABLE,
|
CDP_PPEDS_ENABLE,
|
||||||
CDP_SAWF_STATS,
|
CDP_SAWF_STATS,
|
||||||
|
CDP_UMAC_RESET_STATS,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TXRX_FW_STATS_TXSTATS 1
|
#define TXRX_FW_STATS_TXSTATS 1
|
||||||
|
@@ -1247,4 +1247,45 @@ bool dp_umac_reset_is_soc_ignored(struct dp_soc *soc)
|
|||||||
return !qdf_atomic_test_bit(dp_mlo_get_chip_id(soc),
|
return !qdf_atomic_test_bit(dp_mlo_get_chip_id(soc),
|
||||||
&mlo_ctx->grp_umac_reset_ctx.partner_map);
|
&mlo_ctx->grp_umac_reset_ctx.partner_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_STATUS dp_mlo_umac_reset_stats_print(struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
struct dp_mlo_ctxt *mlo_ctx;
|
||||||
|
struct dp_soc_be *be_soc;
|
||||||
|
struct dp_soc_mlo_umac_reset_ctx *grp_umac_reset_ctx;
|
||||||
|
|
||||||
|
be_soc = dp_get_be_soc_from_dp_soc(soc);
|
||||||
|
if (!be_soc) {
|
||||||
|
dp_umac_reset_err("null be_soc");
|
||||||
|
return QDF_STATUS_E_NULL_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
mlo_ctx = be_soc->ml_ctxt;
|
||||||
|
if (!mlo_ctx) {
|
||||||
|
/* This API can be called for non-MLO SOC as well. Hence, return
|
||||||
|
* the status as success when mlo_ctx is NULL.
|
||||||
|
*/
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
grp_umac_reset_ctx = &mlo_ctx->grp_umac_reset_ctx;
|
||||||
|
|
||||||
|
DP_UMAC_RESET_PRINT_STATS("MLO UMAC RESET stats\n"
|
||||||
|
"\t\tPartner map :%x\n"
|
||||||
|
"\t\tRequest map :%x\n"
|
||||||
|
"\t\tResponse map :%x\n"
|
||||||
|
"\t\tIs target recovery :%d\n"
|
||||||
|
"\t\tIs Umac reset inprogress :%d\n"
|
||||||
|
"\t\tNumber of UMAC reset triggered:%d\n"
|
||||||
|
"\t\tInitiator chip ID :%d\n",
|
||||||
|
grp_umac_reset_ctx->partner_map,
|
||||||
|
grp_umac_reset_ctx->request_map,
|
||||||
|
grp_umac_reset_ctx->response_map,
|
||||||
|
grp_umac_reset_ctx->is_target_recovery,
|
||||||
|
grp_umac_reset_ctx->umac_reset_in_progress,
|
||||||
|
grp_umac_reset_ctx->umac_reset_count,
|
||||||
|
grp_umac_reset_ctx->initiator_chip_id);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2735,6 +2735,20 @@ bool dp_umac_reset_target_recovery_check(struct dp_soc *soc);
|
|||||||
* Return: true if the soc is ignored or false otherwise
|
* Return: true if the soc is ignored or false otherwise
|
||||||
*/
|
*/
|
||||||
bool dp_umac_reset_is_soc_ignored(struct dp_soc *soc);
|
bool dp_umac_reset_is_soc_ignored(struct dp_soc *soc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_mlo_umac_reset_stats_print() - API to print MLO umac reset stats
|
||||||
|
* @soc: dp soc handle
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS dp_mlo_umac_reset_stats_print(struct dp_soc *soc);
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
QDF_STATUS dp_mlo_umac_reset_stats_print(struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -11323,6 +11323,9 @@ dp_set_psoc_param(struct cdp_soc_t *cdp_soc,
|
|||||||
case CDP_UMAC_RST_SKEL_ENABLE:
|
case CDP_UMAC_RST_SKEL_ENABLE:
|
||||||
dp_umac_rst_skel_enable_update(soc, val.cdp_umac_rst_skel);
|
dp_umac_rst_skel_enable_update(soc, val.cdp_umac_rst_skel);
|
||||||
break;
|
break;
|
||||||
|
case CDP_UMAC_RESET_STATS:
|
||||||
|
dp_umac_reset_stats_print(soc);
|
||||||
|
break;
|
||||||
case CDP_SAWF_STATS:
|
case CDP_SAWF_STATS:
|
||||||
wlan_cfg_set_sawf_stats_config(wlan_cfg_ctx,
|
wlan_cfg_set_sawf_stats_config(wlan_cfg_ctx,
|
||||||
val.cdp_sawf_stats);
|
val.cdp_sawf_stats);
|
||||||
|
@@ -931,3 +931,84 @@ QDF_STATUS dp_soc_umac_reset_deinit(struct cdp_soc_t *txrx_soc)
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline const char *dp_umac_reset_current_state_to_str(
|
||||||
|
enum umac_reset_state current_state)
|
||||||
|
{
|
||||||
|
switch (current_state) {
|
||||||
|
case UMAC_RESET_STATE_WAIT_FOR_TRIGGER:
|
||||||
|
return "UMAC_RESET_STATE_WAIT_FOR_TRIGGER";
|
||||||
|
case UMAC_RESET_STATE_DO_TRIGGER_RECEIVED:
|
||||||
|
return "UMAC_RESET_STATE_DO_TRIGGER_RECEIVED";
|
||||||
|
case UMAC_RESET_STATE_HOST_TRIGGER_DONE:
|
||||||
|
return "UMAC_RESET_STATE_HOST_TRIGGER_DONE";
|
||||||
|
case UMAC_RESET_STATE_WAIT_FOR_DO_PRE_RESET:
|
||||||
|
return "UMAC_RESET_STATE_WAIT_FOR_DO_PRE_RESET";
|
||||||
|
case UMAC_RESET_STATE_DO_PRE_RESET_RECEIVED:
|
||||||
|
return "UMAC_RESET_STATE_DO_PRE_RESET_RECEIVED";
|
||||||
|
case UMAC_RESET_STATE_HOST_PRE_RESET_DONE:
|
||||||
|
return "UMAC_RESET_STATE_HOST_PRE_RESET_DONE";
|
||||||
|
case UMAC_RESET_STATE_WAIT_FOR_DO_POST_RESET_START:
|
||||||
|
return "UMAC_RESET_STATE_WAIT_FOR_DO_POST_RESET_START";
|
||||||
|
case UMAC_RESET_STATE_DO_POST_RESET_START_RECEIVED:
|
||||||
|
return "UMAC_RESET_STATE_DO_POST_RESET_START_RECEIVED";
|
||||||
|
case UMAC_RESET_STATE_HOST_POST_RESET_START_DONE:
|
||||||
|
return "UMAC_RESET_STATE_HOST_POST_RESET_START_DONE";
|
||||||
|
case UMAC_RESET_STATE_WAIT_FOR_DO_POST_RESET_COMPLETE:
|
||||||
|
return "UMAC_RESET_STATE_WAIT_FOR_DO_POST_RESET_COMPLETE";
|
||||||
|
case UMAC_RESET_STATE_DO_POST_RESET_COMPLETE_RECEIVED:
|
||||||
|
return "UMAC_RESET_STATE_DO_POST_RESET_COMPLETE_RECEIVED";
|
||||||
|
case UMAC_RESET_STATE_HOST_POST_RESET_COMPLETE_DONE:
|
||||||
|
return "UMAC_RESET_STATE_HOST_POST_RESET_COMPLETE_DONE";
|
||||||
|
default:
|
||||||
|
return "Invalid UMAC Reset state";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline const char *dp_umac_reset_pending_action_to_str(
|
||||||
|
enum umac_reset_rx_event pending_action)
|
||||||
|
{
|
||||||
|
switch (pending_action) {
|
||||||
|
case UMAC_RESET_RX_EVENT_NONE:
|
||||||
|
return "UMAC_RESET_RX_EVENT_NONE";
|
||||||
|
case UMAC_RESET_RX_EVENT_DO_TRIGGER_RECOVERY:
|
||||||
|
return "UMAC_RESET_RX_EVENT_DO_TRIGGER_RECOVERY";
|
||||||
|
case UMAC_RESET_RX_EVENT_DO_PRE_RESET:
|
||||||
|
return "UMAC_RESET_RX_EVENT_DO_PRE_RESET";
|
||||||
|
case UMAC_RESET_RX_EVENT_DO_POST_RESET_START:
|
||||||
|
return "UMAC_RESET_RX_EVENT_DO_POST_RESET_START";
|
||||||
|
case UMAC_RESET_RX_EVENT_DO_POST_RESET_COMPELTE:
|
||||||
|
return "UMAC_RESET_RX_EVENT_DO_POST_RESET_COMPELTE";
|
||||||
|
default:
|
||||||
|
return "Invalid pending action";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS dp_umac_reset_stats_print(struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
struct dp_soc_umac_reset_ctx *umac_reset_ctx;
|
||||||
|
|
||||||
|
umac_reset_ctx = &soc->umac_reset_ctx;
|
||||||
|
|
||||||
|
DP_UMAC_RESET_PRINT_STATS("UMAC reset stats for soc:%pK\n"
|
||||||
|
"\t\ttrigger time :%u us\n"
|
||||||
|
"\t\tPre_reset time :%u us\n"
|
||||||
|
"\t\tPost_reset time :%u us\n"
|
||||||
|
"\t\tPost_reset_complete time :%u us\n"
|
||||||
|
"\t\tCurrent state :%s\n"
|
||||||
|
"\t\tPending action :%s",
|
||||||
|
soc,
|
||||||
|
umac_reset_ctx->ts.trigger_done -
|
||||||
|
umac_reset_ctx->ts.trigger_start,
|
||||||
|
umac_reset_ctx->ts.pre_reset_done -
|
||||||
|
umac_reset_ctx->ts.pre_reset_start,
|
||||||
|
umac_reset_ctx->ts.post_reset_done -
|
||||||
|
umac_reset_ctx->ts.post_reset_start,
|
||||||
|
umac_reset_ctx->ts.post_reset_complete_done -
|
||||||
|
umac_reset_ctx->ts.post_reset_complete_start,
|
||||||
|
dp_umac_reset_current_state_to_str(
|
||||||
|
umac_reset_ctx->current_state),
|
||||||
|
dp_umac_reset_pending_action_to_str(
|
||||||
|
umac_reset_ctx->pending_action));
|
||||||
|
|
||||||
|
return dp_mlo_umac_reset_stats_print(soc);
|
||||||
|
}
|
||||||
|
@@ -55,6 +55,10 @@ enum umac_reset_action {
|
|||||||
#define dp_umac_reset_debug(params...) \
|
#define dp_umac_reset_debug(params...) \
|
||||||
QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_UMAC_RESET, params)
|
QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_UMAC_RESET, params)
|
||||||
|
|
||||||
|
#define DP_UMAC_RESET_PRINT_STATS(fmt, args ...)\
|
||||||
|
QDF_TRACE(QDF_MODULE_ID_DP_UMAC_RESET, QDF_TRACE_LEVEL_FATAL,\
|
||||||
|
fmt, ## args)
|
||||||
|
|
||||||
#define DP_UMAC_RESET_SHMEM_ALIGN 8
|
#define DP_UMAC_RESET_SHMEM_ALIGN 8
|
||||||
#define DP_UMAC_RESET_SHMEM_MAGIC_NUM (0xDEADBEEF)
|
#define DP_UMAC_RESET_SHMEM_MAGIC_NUM (0xDEADBEEF)
|
||||||
|
|
||||||
@@ -298,6 +302,14 @@ void dp_umac_reset_post_tx_cmd_via_shmem(struct dp_soc *soc, void *ctxt,
|
|||||||
* Return: true if Umac reset is in progress or false otherwise
|
* Return: true if Umac reset is in progress or false otherwise
|
||||||
*/
|
*/
|
||||||
bool dp_check_umac_reset_in_progress(struct dp_soc *soc);
|
bool dp_check_umac_reset_in_progress(struct dp_soc *soc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dp_umac_reset_stats_print - API to print UMAC reset stats
|
||||||
|
* @soc: dp soc handle
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS dp_umac_reset_stats_print(struct dp_soc *soc);
|
||||||
#else
|
#else
|
||||||
static inline bool dp_check_umac_reset_in_progress(struct dp_soc *soc)
|
static inline bool dp_check_umac_reset_in_progress(struct dp_soc *soc)
|
||||||
{
|
{
|
||||||
@@ -332,5 +344,11 @@ QDF_STATUS dp_umac_reset_notify_action_completion(
|
|||||||
{
|
{
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
QDF_STATUS dp_umac_reset_stats_print(struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
#endif /* DP_UMAC_HW_RESET_SUPPORT */
|
#endif /* DP_UMAC_HW_RESET_SUPPORT */
|
||||||
#endif /* _DP_UMAC_RESET_H_ */
|
#endif /* _DP_UMAC_RESET_H_ */
|
||||||
|
Reference in New Issue
Block a user