瀏覽代碼

disp: msm: sde: add events to input and output hw-fences

Add extra display driver debug events for input and output
hw-fences.

Change-Id: I32be1d25d98c510ebba5d39f8aff2a0c54144ba1
Signed-off-by: Ingrid Gallardo <[email protected]>
Ingrid Gallardo 2 年之前
父節點
當前提交
7427045102
共有 3 個文件被更改,包括 30 次插入1 次删除
  1. 0 1
      msm/sde/sde_encoder_phys_vid.c
  2. 27 0
      msm/sde/sde_fence.c
  3. 3 0
      msm/sde_dbg.h

+ 0 - 1
msm/sde/sde_encoder_phys_vid.c

@@ -963,7 +963,6 @@ static void sde_encoder_phys_vid_update_txq(struct sde_encoder_phys *phys_enc)
 	if (!sde_enc)
 	if (!sde_enc)
 		return;
 		return;
 
 
-	SDE_EVT32(DRMID(phys_enc->parent));
 	sde_encoder_helper_update_out_fence_txq(sde_enc, true);
 	sde_encoder_helper_update_out_fence_txq(sde_enc, true);
 }
 }
 
 

+ 27 - 0
msm/sde/sde_fence.c

@@ -302,10 +302,26 @@ int sde_fence_register_hw_fences_wait(struct sde_hw_ctl *hw_ctl, struct dma_fenc
 					dma_fence_get(array->fences[j]);
 					dma_fence_get(array->fences[j]);
 					fence_list[fence_list_index++] = array->fences[j];
 					fence_list[fence_list_index++] = array->fences[j];
 				}
 				}
+
+				if (array->num_fences) /* print the first fence from array */
+					SDE_EVT32(ctl_id, num_fences, array->num_fences, i,
+						SDE_EVTLOG_H32(array->fences[0]->context),
+						SDE_EVTLOG_L32(array->fences[0]->context),
+						SDE_EVTLOG_H32(array->fences[0]->seqno),
+						SDE_EVTLOG_L32(array->fences[0]->seqno));
+				else
+					SDE_EVT32(ctl_id, num_fences, array->num_fences, i,
+						SDE_EVTLOG_ERROR);
+
 				/* remove refcount on parent */
 				/* remove refcount on parent */
 				dma_fence_put(fences[i]);
 				dma_fence_put(fences[i]);
 			} else {
 			} else {
 				fence_list[fence_list_index++] = fences[i];
 				fence_list[fence_list_index++] = fences[i];
+
+				SDE_EVT32(ctl_id, num_fences, i, SDE_EVTLOG_H32(fences[i]->context),
+					SDE_EVTLOG_L32(fences[i]->context),
+					SDE_EVTLOG_H32(fences[i]->seqno),
+					SDE_EVTLOG_L32(fences[i]->seqno));
 			}
 			}
 		}
 		}
 
 
@@ -323,8 +339,17 @@ int sde_fence_register_hw_fences_wait(struct sde_hw_ctl *hw_ctl, struct dma_fenc
 		num_hw_fences = 1;
 		num_hw_fences = 1;
 
 
 	} else {
 	} else {
+		struct dma_fence_array *tmp_array;
+
 		hw_fences = fences;
 		hw_fences = fences;
 		num_hw_fences = num_fences;
 		num_hw_fences = num_fences;
+		tmp_array = dma_fence_is_array(fences[0]) ?
+				container_of(fences[0], struct dma_fence_array, base) :
+				NULL;
+		SDE_EVT32(ctl_id, num_hw_fences, SDE_EVTLOG_H32(fences[0]->context),
+			SDE_EVTLOG_L32(fences[0]->context), SDE_EVTLOG_H32(fences[0]->seqno),
+			SDE_EVTLOG_L32(fences[0]->seqno), fences[0]->flags,
+			tmp_array ? tmp_array->num_fences : SDE_EVTLOG_FUNC_CASE2);
 	}
 	}
 
 
 	/* register for wait */
 	/* register for wait */
@@ -482,6 +507,8 @@ int sde_fence_update_hw_fences_txq(struct sde_fence_context *ctx, bool vid_mode,
 		}
 		}
 
 
 		/* update hw-fence tx queue */
 		/* update hw-fence tx queue */
+		SDE_EVT32(ctl_id, SDE_EVTLOG_H32(fc->hwfence_index),
+			SDE_EVTLOG_L32(fc->hwfence_index));
 		ret = msm_hw_fence_update_txq(data->hw_fence_handle, fc->hwfence_index, 0, 0);
 		ret = msm_hw_fence_update_txq(data->hw_fence_handle, fc->hwfence_index, 0, 0);
 		if (ret) {
 		if (ret) {
 			SDE_ERROR("fail txq update index:%llu fctx:%llu seqno:%llu client:%d\n",
 			SDE_ERROR("fail txq update index:%llu fctx:%llu seqno:%llu client:%d\n",

+ 3 - 0
msm/sde_dbg.h

@@ -31,6 +31,9 @@
 #define SDE_EVTLOG_FATAL	0xbad
 #define SDE_EVTLOG_FATAL	0xbad
 #define SDE_EVTLOG_ERROR	0xebad
 #define SDE_EVTLOG_ERROR	0xebad
 
 
+#define SDE_EVTLOG_H32(val) (val >> 32)
+#define SDE_EVTLOG_L32(val) (val & 0xffffffff)
+
 /* flags to enable the HW block dumping */
 /* flags to enable the HW block dumping */
 #define SDE_DBG_SDE		BIT(0)
 #define SDE_DBG_SDE		BIT(0)
 #define SDE_DBG_RSC		BIT(1)
 #define SDE_DBG_RSC		BIT(1)