From fe0463deb8d35912ceb6c27bc18e371f5d192230 Mon Sep 17 00:00:00 2001 From: Manikanta Pubbisetty Date: Thu, 20 May 2021 09:22:22 +0530 Subject: [PATCH] qcacmn: additional runtime PM stats for HTC layer Add few more stats to the existing runtime PM stats for HTC layer. Change-Id: I1610acc534997b14ae070c48da03b4e07a00d9ef CRs-Fixed: 2949969 --- hif/inc/hif.h | 12 ++++++++++++ hif/src/hif_runtime_pm.c | 12 ++++++++++++ hif/src/hif_runtime_pm.h | 4 ++++ htc/htc_send.c | 26 +++++++++++++++++++++++--- 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/hif/inc/hif.h b/hif/inc/hif.h index 29565906a0..3fc12f9ba6 100644 --- a/hif/inc/hif.h +++ b/hif/inc/hif.h @@ -1110,6 +1110,14 @@ enum hif_pm_link_state { with no response * HIF_PM_HTC_STATS_PUT_HTT_ERROR: PM stats for RTPM PUT for failed HTT packets * HIF_PM_HTC_STATS_PUT_HTC_CLEANUP: PM stats for RTPM PUT during HTC cleanup + * HIF_PM_HTC_STATS_GET_HTC_KICK_QUEUES: PM stats for RTPM GET done during + * htc_kick_queues() + * HIF_PM_HTC_STATS_PUT_HTC_KICK_QUEUES: PM stats for RTPM PUT done during + * htc_kick_queues() + * HIF_PM_HTC_STATS_GET_HTT_FETCH_PKTS: PM stats for RTPM GET while fetching + * HTT packets from endpoint TX queue + * HIF_PM_HTC_STATS_PUT_HTT_FETCH_PKTS: PM stats for RTPM PUT while fetching + * HTT packets from endpoint TX queue */ enum hif_pm_htc_stats { HIF_PM_HTC_STATS_GET_HTT_RESPONSE, @@ -1118,6 +1126,10 @@ enum hif_pm_htc_stats { HIF_PM_HTC_STATS_PUT_HTT_NO_RESPONSE, HIF_PM_HTC_STATS_PUT_HTT_ERROR, HIF_PM_HTC_STATS_PUT_HTC_CLEANUP, + HIF_PM_HTC_STATS_GET_HTC_KICK_QUEUES, + HIF_PM_HTC_STATS_PUT_HTC_KICK_QUEUES, + HIF_PM_HTC_STATS_GET_HTT_FETCH_PKTS, + HIF_PM_HTC_STATS_PUT_HTT_FETCH_PKTS, }; #ifdef FEATURE_RUNTIME_PM diff --git a/hif/src/hif_runtime_pm.c b/hif/src/hif_runtime_pm.c index 08fa9dcf7f..e0caff90c6 100644 --- a/hif/src/hif_runtime_pm.c +++ b/hif/src/hif_runtime_pm.c @@ -1854,6 +1854,18 @@ void hif_pm_runtime_update_stats(struct hif_opaque_softc *hif_ctx, case HIF_PM_HTC_STATS_PUT_HTC_CLEANUP: rpm_ctx->pm_stats.pm_stats_htc.rtpm_put_htc_cleanup++; break; + case HIF_PM_HTC_STATS_GET_HTC_KICK_QUEUES: + rpm_ctx->pm_stats.pm_stats_htc.rtpm_get_htc_kick_queues++; + break; + case HIF_PM_HTC_STATS_PUT_HTC_KICK_QUEUES: + rpm_ctx->pm_stats.pm_stats_htc.rtpm_put_htc_kick_queues++; + break; + case HIF_PM_HTC_STATS_GET_HTT_FETCH_PKTS: + rpm_ctx->pm_stats.pm_stats_htc.rtpm_get_htt_fetch_pkts++; + break; + case HIF_PM_HTC_STATS_PUT_HTT_FETCH_PKTS: + rpm_ctx->pm_stats.pm_stats_htc.rtpm_put_htt_fetch_pkts++; + break; default: break; } diff --git a/hif/src/hif_runtime_pm.h b/hif/src/hif_runtime_pm.h index b9e7da51bc..840af2be50 100644 --- a/hif/src/hif_runtime_pm.h +++ b/hif/src/hif_runtime_pm.h @@ -56,6 +56,10 @@ struct hif_pm_runtime_htc_stats { uint32_t rtpm_put_htt_no_resp; uint32_t rtpm_put_htt_error; uint32_t rtpm_put_htc_cleanup; + uint32_t rtpm_get_htc_kick_queues; + uint32_t rtpm_put_htc_kick_queues; + uint32_t rtpm_get_htt_fetch_pkts; + uint32_t rtpm_put_htt_fetch_pkts; }; /* Debugging stats for Runtime PM */ diff --git a/htc/htc_send.c b/htc/htc_send.c index 4560febac2..a0f681db6b 100644 --- a/htc/htc_send.c +++ b/htc/htc_send.c @@ -1340,19 +1340,30 @@ static void get_htc_send_packets(HTC_TARGET *target, } break; } + hif_pm_runtime_update_stats( + target->hif_dev, rtpm_dbgid, + HIF_PM_HTC_STATS_GET_HTT_FETCH_PKTS); } ret = hif_system_pm_state_check(target->hif_dev); if (ret) { - if (do_pm_get) + if (do_pm_get) { hif_pm_runtime_put(target->hif_dev, rtpm_dbgid); + hif_pm_runtime_update_stats( + target->hif_dev, rtpm_dbgid, + HIF_PM_HTC_STATS_PUT_HTT_FETCH_PKTS); + } break; } pPacket = htc_packet_dequeue(tx_queue); if (!pPacket) { - if (do_pm_get) + if (do_pm_get) { hif_pm_runtime_put(target->hif_dev, rtpm_dbgid); + hif_pm_runtime_update_stats( + target->hif_dev, rtpm_dbgid, + HIF_PM_HTC_STATS_PUT_HTT_FETCH_PKTS); + } break; } @@ -2577,6 +2588,10 @@ void htc_kick_queues(void *context) if (hif_pm_runtime_get_sync(target->hif_dev, RTPM_ID_HTC)) return; + hif_pm_runtime_update_stats( + target->hif_dev, RTPM_ID_HTC, + HIF_PM_HTC_STATS_GET_HTC_KICK_QUEUES); + for (i = 0; i < ENDPOINT_MAX; i++) { endpoint = &target->endpoint[i]; @@ -2592,7 +2607,12 @@ void htc_kick_queues(void *context) hif_fastpath_resume(target->hif_dev); - hif_pm_runtime_put(target->hif_dev, RTPM_ID_HTC); + if (hif_pm_runtime_put(target->hif_dev, RTPM_ID_HTC)) + return; + + hif_pm_runtime_update_stats( + target->hif_dev, RTPM_ID_HTC, + HIF_PM_HTC_STATS_PUT_HTC_KICK_QUEUES); } #endif