Просмотр исходного кода

disp: msm: sde: log intf framecount in event logs

Log hardware interface framecount during te and vblank irqs for
command and video mode panels, respectively. This will help in
debugging any missed frames.

Change-Id: Ie86f686c4cc12de6a1f31aa47d4c7a5b8a68ea55
Signed-off-by: Nilaan Gunabalachandran <[email protected]>
Nilaan Gunabalachandran 6 лет назад
Родитель
Сommit
c6092f3e66
4 измененных файлов с 16 добавлено и 3 удалено
  1. 4 2
      msm/sde/sde_encoder_phys_cmd.c
  2. 7 1
      msm/sde/sde_encoder_phys_vid.c
  3. 3 0
      msm/sde/sde_hw_intf.c
  4. 2 0
      msm/sde/sde_hw_mdss.h

+ 4 - 2
msm/sde/sde_encoder_phys_cmd.c

@@ -243,8 +243,10 @@ static void sde_encoder_phys_cmd_te_rd_ptr_irq(void *arg, int irq_idx)
 
 	sde_encoder_helper_get_pp_line_count(phys_enc->parent, info);
 	SDE_EVT32_IRQ(DRMID(phys_enc->parent),
-		info[0].pp_idx, info[0].intf_idx, info[0].wr_ptr_line_count,
-		info[1].pp_idx, info[1].intf_idx, info[1].wr_ptr_line_count,
+		info[0].pp_idx, info[0].intf_idx,
+		info[0].wr_ptr_line_count, info[0].intf_frame_count,
+		info[1].pp_idx, info[1].intf_idx,
+		info[1].wr_ptr_line_count, info[1].intf_frame_count,
 		scheduler_status);
 
 	if (phys_enc->parent_ops.handle_vblank_virt)

+ 7 - 1
msm/sde/sde_encoder_phys_vid.c

@@ -474,6 +474,7 @@ static void sde_encoder_phys_vid_vblank_irq(void *arg, int irq_idx)
 {
 	struct sde_encoder_phys *phys_enc = arg;
 	struct sde_hw_ctl *hw_ctl;
+	struct intf_status intf_status = {0};
 	unsigned long lock_flags;
 	u32 flush_register = ~0;
 	u32 reset_status = 0;
@@ -530,11 +531,16 @@ not_flushed:
 		phys_enc->parent_ops.handle_vblank_virt(phys_enc->parent,
 				phys_enc);
 
+	if (phys_enc->hw_intf->ops.get_status)
+		phys_enc->hw_intf->ops.get_status(phys_enc->hw_intf,
+			&intf_status);
+
 	SDE_EVT32_IRQ(DRMID(phys_enc->parent), phys_enc->hw_intf->idx - INTF_0,
 			old_cnt, atomic_read(&phys_enc->pending_kickoff_cnt),
 			reset_status ? SDE_EVTLOG_ERROR : 0,
 			flush_register, event,
-			atomic_read(&phys_enc->pending_retire_fence_cnt));
+			atomic_read(&phys_enc->pending_retire_fence_cnt),
+			intf_status.frame_count);
 
 	/* Signal any waiting atomic commit thread */
 	wake_up_all(&phys_enc->pending_kickoff_wq);

+ 3 - 0
msm/sde/sde_hw_intf.c

@@ -628,6 +628,9 @@ static int sde_hw_intf_get_vsync_info(struct sde_hw_intf *intf,
 	val = SDE_REG_READ(c, INTF_TEAR_LINE_COUNT);
 	info->wr_ptr_line_count = val & 0xffff;
 
+	val = SDE_REG_READ(c, INTF_FRAME_COUNT);
+	info->intf_frame_count = val;
+
 	return 0;
 }
 

+ 2 - 0
msm/sde/sde_hw_mdss.h

@@ -680,6 +680,7 @@ struct sde_hw_autorefresh {
  * @rd_ptr_frame_count:	num frames sent since enabling interface
  * @rd_ptr_line_count:	current line on panel (rd ptr)
  * @wr_ptr_line_count:	current line within pp fifo (wr ptr)
+ * @intf_frame_count:	num frames read from intf
  */
 struct sde_hw_pp_vsync_info {
 	u32 pp_idx;
@@ -688,6 +689,7 @@ struct sde_hw_pp_vsync_info {
 	u32 rd_ptr_frame_count;
 	u32 rd_ptr_line_count;
 	u32 wr_ptr_line_count;
+	u32 intf_frame_count;
 };
 
 #endif  /* _SDE_HW_MDSS_H */