diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index e0dbda1..12d43a2 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -159,6 +159,8 @@
 #define WLAN_HDD_P2P_SOCIAL_CHANNELS 3
 #define WLAN_HDD_P2P_SINGLE_CHANNEL_SCAN 1
 
+#define WLAN_HDD_PUBLIC_ACTION_TDLS_DISC_RESP 14
+#define WLAN_HDD_TDLS_ACTION_FRAME 12
 #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
 #define HDD_WAKE_LOCK_DURATION 50
 #endif
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 8528401..212ec52 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -1861,7 +1861,19 @@
 {
     hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
     eHalStatus status = eHAL_STATUS_FAILURE ;
- 
+
+#ifdef WLAN_FEATURE_TDLS_DEBUG
+    VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+    ("hdd_tdlsStatusUpdate: %s staIdx %d %02x:%02x:%02x:%02x:%02x:%02x \n"), roamResult == eCSR_ROAM_RESULT_ADD_TDLS_PEER ? "ADD_TDLS_PEER" :
+    roamResult == eCSR_ROAM_RESULT_DELETE_TDLS_PEER ? "DEL_TDLS_PEER": "UNKNOWN",
+        pRoamInfo->staId,
+        pRoamInfo->peerMac[0],
+        pRoamInfo->peerMac[1],
+        pRoamInfo->peerMac[2],
+        pRoamInfo->peerMac[3],
+        pRoamInfo->peerMac[4],
+        pRoamInfo->peerMac[5]) ;
+#endif
     switch( roamResult )
     {
         case eCSR_ROAM_RESULT_ADD_TDLS_PEER:
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 144bcdf..f479da8 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -6467,9 +6467,12 @@
     }
     vos_mem_copy( peerMac, peer, 6);
 
-    VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, 
-                     "Request to send TDLS management: action = %d, status = %d, \
-                      len = %d", action_code, status_code, len);
+#ifdef WLAN_FEATURE_TDLS_DEBUG
+    VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+                     "%s: %02x:%02x:%02x:%02x:%02x:%02x) action %d, dialog_token %d status %d, len = %d",
+                     "tdls_mgmt", peer[0], peer[1], peer[2], peer[3], peer[4], peer[5],
+                      action_code, dialog_token, status_code, len);
+#endif
 
     buf_1 = vos_mem_malloc(len);
     if(buf_1 == NULL) {
@@ -6497,6 +6500,15 @@
 {
     hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
     hdd_context_t *pHddCtx = wiphy_priv(wiphy);
+#ifdef WLAN_FEATURE_TDLS_DEBUG
+    const char *tdls_oper_str[]= {
+        "NL80211_TDLS_DISCOVERY_REQ",
+        "NL80211_TDLS_SETUP",
+        "NL80211_TDLS_TEARDOWN",
+        "NL80211_TDLS_ENABLE_LINK",
+        "NL80211_TDLS_DISABLE_LINK",
+        "NL80211_TDLS_UNKONW_OPER"};
+#endif
 
     if( NULL == pHddCtx || NULL == pHddCtx->cfg_ini )
     {
@@ -6504,14 +6516,21 @@
                 "Invalid arguments");
         return -EINVAL;
     }
-       
-    VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, 
-            "Request for TDLS oper: %d", (int)oper);
+
+#ifdef WLAN_FEATURE_TDLS_DEBUG
+    if((int)oper > 4)
+        oper = 5;
+
+    VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+            "%s: %02x:%02x:%02x:%02x:%02x:%02x: %d (%s) ", "tdls_oper",
+            peer[0], peer[1], peer[2], peer[3], peer[4], peer[5], (int)oper,
+            tdls_oper_str[(int)oper]);
+#endif
 
     if( FALSE == pHddCtx->cfg_ini->fEnableTDLSSupport ||
-        FALSE == sme_IsFeatureSupportedByFW(TDLS)) 
+        FALSE == sme_IsFeatureSupportedByFW(TDLS))
     {
-        VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, 
+        VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
                 "TDLS Disabled in INI OR not enabled in FW.\
                 Cannot process TDLS commands \n");
         return -ENOTSUPP;
@@ -6520,7 +6539,7 @@
     switch (oper) {
         case NL80211_TDLS_ENABLE_LINK:
             {
-                v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pAdapter))->pvosContext;  
+                v_CONTEXT_t pVosContext = (WLAN_HDD_GET_CTX(pAdapter))->pvosContext;
                 v_U8_t my_peer[6];
                 v_U8_t ucSTAId;
                 VOS_STATUS status;
diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c
index 243e30c..04a1881 100644
--- a/CORE/HDD/src/wlan_hdd_p2p.c
+++ b/CORE/HDD/src/wlan_hdd_p2p.c
@@ -63,6 +63,9 @@
 #include <linux/skbuff.h>
 #include <linux/etherdevice.h>
 #include <net/ieee80211_radiotap.h>
+#ifdef FEATURE_WLAN_TDLS
+#include "wlan_hdd_tdls.h"
+#endif
 
 //Ms to Micro Sec
 #define MS_TO_MUS(x)   ((x)*1000);
@@ -87,6 +90,20 @@
 tP2PConnectionStatus globalP2PConnectionStatus = P2P_NOT_ACTIVE;
 
 #endif
+#ifdef WLAN_FEATURE_TDLS_DEBUG
+#define MAX_TDLS_ACTION_FRAME_TYPE 11
+const char *tdls_action_frame_type[] = {"TDLS Setup Request",
+                                        "TDLS Setup Response",
+                                        "TDLS Setup Confirm",
+                                        "TDLS Teardown",
+                                        "TDLS Peer Traffic Indication",
+                                        "TDLS Channel Switch Request",
+                                        "TDLS Channel Switch Response",
+                                        "TDLS Peer PSM Request",
+                                        "TDLS Peer PSM Response",
+                                        "TDLS Peer Traffic Response",
+                                        "TDLS Discovery Request" };
+#endif
 
 extern struct net_device_ops net_ops_struct;
 
@@ -514,7 +531,7 @@
             (buf[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET] == WLAN_HDD_PUBLIC_ACTION_FRAME))
     {
         actionFrmType = buf[WLAN_HDD_PUBLIC_ACTION_FRAME_TYPE_OFFSET];
-        if(actionFrmType > MAX_P2P_ACTION_FRAME_TYPE)
+        if(actionFrmType >= MAX_P2P_ACTION_FRAME_TYPE)
         {
             hddLog(VOS_TRACE_LEVEL_ERROR,"[P2P] unknown[%d] ---> OTA",
                                    actionFrmType);
@@ -697,6 +714,7 @@
        )
     {
         tANI_U8 sessionId = pAdapter->sessionId;
+
         if ((type == SIR_MAC_MGMT_FRAME) &&
                 (subType == SIR_MAC_MGMT_ACTION) &&
                 (buf[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET] == WLAN_HDD_PUBLIC_ACTION_FRAME))
@@ -1315,54 +1333,84 @@
     cfgState = WLAN_HDD_GET_CFG_STATE_PTR( pAdapter );
     
     if ((type == SIR_MAC_MGMT_FRAME) && 
-            (subType == SIR_MAC_MGMT_ACTION) &&
-            (pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET] == WLAN_HDD_PUBLIC_ACTION_FRAME))
+        (subType == SIR_MAC_MGMT_ACTION))
     {
-        actionFrmType = pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_TYPE_OFFSET];
-        hddLog(LOG1, "Rx Action Frame %u", actionFrmType);
+        if(pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET] == WLAN_HDD_PUBLIC_ACTION_FRAME)
+        {
+            // public action frame
+            if((pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET+1] == SIR_MAC_ACTION_VENDOR_SPECIFIC) &&
+                !vos_mem_compare(&pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET+2], SIR_MAC_P2P_OUI, SIR_MAC_P2P_OUI_SIZE))
+            // P2P action frames
+            {
+                actionFrmType = pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_TYPE_OFFSET];
+                hddLog(LOG1, "Rx Action Frame %u \n", actionFrmType);
 #ifdef WLAN_FEATURE_P2P_DEBUG
-        if(actionFrmType > MAX_P2P_ACTION_FRAME_TYPE)
-        {
-            hddLog(VOS_TRACE_LEVEL_ERROR,"[P2P] unknown[%d] <--- OTA",
-                                                        actionFrmType);
-        }
-        else
-        {
-            hddLog(VOS_TRACE_LEVEL_ERROR,"[P2P] %s <--- OTA",
-            p2p_action_frame_type[actionFrmType]);
-            if( (actionFrmType == WLAN_HDD_PROV_DIS_REQ) &&
-                (globalP2PConnectionStatus == P2P_NOT_ACTIVE) )
-            {
-                 globalP2PConnectionStatus = P2P_GO_NEG_PROCESS;
-                 hddLog(LOGE,"[P2P State]Inactive state to "
+                if(actionFrmType >= MAX_P2P_ACTION_FRAME_TYPE)
+                {
+                    hddLog(VOS_TRACE_LEVEL_ERROR,"[P2P] unknown[%d] <--- OTA",
+                                                                actionFrmType);
+                }
+                else
+                {
+                    hddLog(VOS_TRACE_LEVEL_ERROR,"[P2P] %s <--- OTA",
+                    p2p_action_frame_type[actionFrmType]);
+                    if( (actionFrmType == WLAN_HDD_PROV_DIS_REQ) &&
+                        (globalP2PConnectionStatus == P2P_NOT_ACTIVE) )
+                    {
+                         globalP2PConnectionStatus = P2P_GO_NEG_PROCESS;
+                         hddLog(LOGE,"[P2P State]Inactive state to "
                            "GO negotiation progress state");
-            }
-            else if( (actionFrmType == WLAN_HDD_GO_NEG_CNF) &&
-                (globalP2PConnectionStatus == P2P_GO_NEG_PROCESS) )
-            {
-                 globalP2PConnectionStatus = P2P_GO_NEG_COMPLETED;
+                    }
+                    else if( (actionFrmType == WLAN_HDD_GO_NEG_CNF) &&
+                        (globalP2PConnectionStatus == P2P_GO_NEG_PROCESS) )
+                    {
+                         globalP2PConnectionStatus = P2P_GO_NEG_COMPLETED;
                  hddLog(LOGE,"[P2P State]GO negotiation progress to "
                              "GO negotiation completed state");
+                    }
+                    else if( (actionFrmType == WLAN_HDD_INVITATION_REQ) &&
+                        (globalP2PConnectionStatus == P2P_NOT_ACTIVE) )
+                    {
+                         globalP2PConnectionStatus = P2P_GO_NEG_COMPLETED;
+                         hddLog(LOGE,"[P2P State]Inactive state to GO negotiation"
+                                     " completed state Autonomous GO formation");
+                    }
+                }
+#endif
+
+                if (((actionFrmType == WLAN_HDD_PROV_DIS_RESP) &&
+                            (cfgState->actionFrmState == HDD_PD_REQ_ACK_PENDING)) ||
+                        ((actionFrmType == WLAN_HDD_GO_NEG_RESP) &&
+                         (cfgState->actionFrmState == HDD_GO_NEG_REQ_ACK_PENDING)))
+                {
+                    hddLog(LOG1, "%s: ACK_PENDING and But received RESP for Action frame ",
+                            __func__);
+                    hdd_sendActionCnf(pAdapter, TRUE);
+                }
             }
-            else if( (actionFrmType == WLAN_HDD_INVITATION_REQ) &&
-                (globalP2PConnectionStatus == P2P_NOT_ACTIVE) )
+#ifdef WLAN_FEATURE_TDLS_DEBUG
+            else if(pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET+1] == WLAN_HDD_PUBLIC_ACTION_TDLS_DISC_RESP)
             {
-                 globalP2PConnectionStatus = P2P_GO_NEG_COMPLETED;
-                 hddLog(LOGE,"[P2P State]Inactive state to GO negotiation"
-                             " completed state Autonomous GO formation");
+                hddLog(VOS_TRACE_LEVEL_ERROR,"[TDLS] TDLS Discovery Response <--- OTA");
+            }
+#endif
+        }
+#ifdef WLAN_FEATURE_TDLS_DEBUG
+        if(pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET] == WLAN_HDD_TDLS_ACTION_FRAME)
+        {
+            actionFrmType = pbFrames[WLAN_HDD_PUBLIC_ACTION_FRAME_OFFSET+1];
+            if(actionFrmType >= MAX_TDLS_ACTION_FRAME_TYPE)
+            {
+                hddLog(VOS_TRACE_LEVEL_ERROR,"[TDLS] unknown[%d] <--- OTA",
+                                                            actionFrmType);
+            }
+            else
+            {
+                hddLog(VOS_TRACE_LEVEL_ERROR,"[TDLS] %s <--- OTA",
+                    tdls_action_frame_type[actionFrmType]);
             }
         }
 #endif
-
-        if (((actionFrmType == WLAN_HDD_PROV_DIS_RESP) &&
-                    (cfgState->actionFrmState == HDD_PD_REQ_ACK_PENDING)) ||
-                ((actionFrmType == WLAN_HDD_GO_NEG_RESP) &&
-                 (cfgState->actionFrmState == HDD_GO_NEG_REQ_ACK_PENDING)))
-        {
-            hddLog(LOG1, "%s: ACK_PENDING and But received RESP for Action frame ", 
-                    __func__);
-            hdd_sendActionCnf(pAdapter, TRUE);
-        }
     }
 
     //Indicate Frame Over Normal Interface
