Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6092f3e authored by Nilaan Gunabalachandran's avatar Nilaan Gunabalachandran
Browse files

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: default avatarNilaan Gunabalachandran <ngunabal@codeaurora.org>
parent 6a9e397c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -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 @@ static void sde_encoder_phys_vid_vblank_irq(void *arg, int irq_idx)
		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
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -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 */