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.