wlan: Debug enhancement
Add WCN host kernel time-stamp to compare to FW timestamp
Change-Id: I660b243a8d2ef6b30246b1baebdde5cddc917abc
CRs-Fixed: 542881
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
index f48a649..0d32a97 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
@@ -1150,6 +1150,13 @@
/* enable/disable SSR on WDI timeout */
wpt_boolean bEnableSSR;
+
+ /* timestamp derived from msm arch counter. */
+ /*timestamp when we start response timer*/
+ wpt_uint64 uArchTimeStampRspTmrStart;
+
+ /*timestamp when we get response timer event*/
+ wpt_uint64 uArchTimeStampRspTmrExp;
}WDI_ControlBlockType;
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index 59e9a30..3ccf3bf 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -21219,6 +21219,7 @@
/*cache current timestamp for debugging */
pWDICtx->uTimeStampRspTmrStart = wpalGetSystemTime();
+ pWDICtx->uArchTimeStampRspTmrStart = wpalGetArchCounterTime();
}
else
{
@@ -21379,6 +21380,7 @@
/*cache current timestamp for debugging */
pWDICtx->uTimeStampRspTmrExp = wpalGetSystemTime();
+ pWDICtx->uArchTimeStampRspTmrExp = wpalGetArchCounterTime();
/* If response timer is running at this time that means this timer
* event is not for the last request but rather last-to-last request and
@@ -21391,6 +21393,12 @@
"WDI_ResponseTimerCB: timer in running state on timer event, "
"ignore tmr event, timeStampTmrStart: %u, timeStampTmrExp: %u",
pWDICtx->uTimeStampRspTmrStart, pWDICtx->uTimeStampRspTmrExp);
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
+ "uArchTimeStampTmrStart: %llu seconds, "
+ "uArchTimeStampTmrExp: %llu seconds",
+ pWDICtx->uArchTimeStampRspTmrStart,
+ pWDICtx->uArchTimeStampRspTmrExp);
+
return;
}
@@ -21403,6 +21411,11 @@
WDI_getRespMsgString(pWDICtx->wdiExpectedResponse),
pWDICtx->wdiExpectedResponse, pWDICtx->uTimeStampRspTmrStart,
pWDICtx->uTimeStampRspTmrExp);
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
+ "uArchTimeStampTmrStart: %llu seconds, "
+ "uArchTimeStampTmrExp: %llu seconds",
+ pWDICtx->uArchTimeStampRspTmrStart,
+ pWDICtx->uArchTimeStampRspTmrExp);
/* WDI timeout means Riva is not responding or SMD communication to Riva
* is not happening. The only possible way to recover from this error
@@ -21433,6 +21446,12 @@
"timeStampTmrStart: %u, timeStampTmrExp: %u",
pWDICtx->wdiExpectedResponse, pWDICtx->uTimeStampRspTmrStart,
pWDICtx->uTimeStampRspTmrExp);
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_FATAL,
+ "uArchTimeStampTmrStart: %llu seconds, "
+ "uArchTimeStampTmrExp: %llu seconds",
+ pWDICtx->uArchTimeStampRspTmrStart,
+ pWDICtx->uArchTimeStampRspTmrExp);
+
}
return;
diff --git a/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h b/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h
index df7debf..8c8645e 100644
--- a/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h
+++ b/CORE/WDI/WPAL/inc/wlan_qct_pal_timer.h
@@ -131,6 +131,14 @@
wpt_uint32 wpalGetSystemTime(void);
/*---------------------------------------------------------------------------
+ wpalGetArchCounterTime - Get time from physical counter
+
+ return
+ MPM counter value
+---------------------------------------------------------------------------*/
+wpt_uint64 wpalGetArchCounterTime(void);
+
+/*---------------------------------------------------------------------------
wpalSleep - sleep for a specified interval
Param:
timeout - amount of time to sleep. In unit of milli-seconds.
diff --git a/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c b/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c
index efb2eb7..b2170fc 100644
--- a/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c
+++ b/CORE/WDI/WPAL/src/wlan_qct_pal_timer.c
@@ -61,6 +61,9 @@
#include "vos_threads.h"
#include <linux/delay.h>
+#if defined(ANI_OS_TYPE_ANDROID)
+#include <asm/arch_timer.h>
+#endif
/*---------------------------------------------------------------------------
\brief wpalTimerCback - VOS timer callback function
@@ -226,6 +229,24 @@
}/*wpalGetSystemTime*/
/*---------------------------------------------------------------------------
+ \brief wpalGetArchCounterTime - Get time from physical counter
+
+ \return
+ MPM counter value
+---------------------------------------------------------------------------*/
+#if defined(ANI_OS_TYPE_ANDROID)
+wpt_uint64 wpalGetArchCounterTime(void)
+{
+ return arch_counter_get_cntpct();
+}/*wpalGetArchCounterTime*/
+#else
+wpt_uint64 wpalGetArchCounterTime(void)
+{
+ return 0;
+}/*wpalGetArchCounterTime*/
+#endif
+
+/*---------------------------------------------------------------------------
wpalSleep - sleep for a specified interval
Param:
timeout - amount of time to sleep. In unit of milli-seconds.