Commit 47588233 authored by Rodrigo Siqueira's avatar Rodrigo Siqueira Committed by Alex Deucher
Browse files

drm/amd/display: Add refresh rate trace



When we have to debug VRR issues, we usually want to know the current
refresh rate; for this reason, it is handy to have a way to check in
real-time the refresh rate value. This commit introduces a kernel trace
that can provide such information.

Signed-off-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Reviewed-by: default avatarHarry Wentland <Harry.Wentland@amd.com>
Acked-by: default avatarAnson Jacob <Anson.Jacob@amd.com>
Tested-by: default avatarDan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 95574c69
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -460,6 +460,9 @@ static void dm_vupdate_high_irq(void *interrupt_params)
	struct common_irq_params *irq_params = interrupt_params;
	struct amdgpu_device *adev = irq_params->adev;
	struct amdgpu_crtc *acrtc;
	struct drm_device *drm_dev;
	struct drm_vblank_crtc *vblank;
	ktime_t frame_duration_ns, previous_timestamp;
	unsigned long flags;
	int vrr_active;

@@ -467,6 +470,17 @@ static void dm_vupdate_high_irq(void *interrupt_params)

	if (acrtc) {
		vrr_active = amdgpu_dm_vrr_active_irq(acrtc);
		drm_dev = acrtc->base.dev;
		vblank = &drm_dev->vblank[acrtc->base.index];
		previous_timestamp = atomic64_read(&irq_params->previous_timestamp);
		frame_duration_ns = vblank->time - previous_timestamp;

		if (frame_duration_ns > 0) {
			trace_amdgpu_refresh_rate_track(acrtc->base.index,
						frame_duration_ns,
						ktime_divns(NSEC_PER_SEC, frame_duration_ns));
			atomic64_set(&irq_params->previous_timestamp, vblank->time);
		}

		DRM_DEBUG_VBL("crtc:%d, vupdate-vrr:%d\n",
			      acrtc->crtc_id,
+1 −0
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ struct dc_plane_state;
struct common_irq_params {
	struct amdgpu_device *adev;
	enum dc_irq_source irq_src;
	atomic64_t previous_timestamp;
};

/**
+19 −0
Original line number Diff line number Diff line
@@ -618,6 +618,25 @@ TRACE_EVENT(amdgpu_dmub_trace_high_irq,
		  __entry->param0, __entry->param1)
);

TRACE_EVENT(amdgpu_refresh_rate_track,
	TP_PROTO(int crtc_index, ktime_t refresh_rate_ns, uint32_t refresh_rate_hz),
	TP_ARGS(crtc_index, refresh_rate_ns, refresh_rate_hz),
	TP_STRUCT__entry(
		__field(int, crtc_index)
		__field(ktime_t, refresh_rate_ns)
		__field(uint32_t, refresh_rate_hz)
		),
	TP_fast_assign(
		__entry->crtc_index = crtc_index;
		__entry->refresh_rate_ns = refresh_rate_ns;
		__entry->refresh_rate_hz = refresh_rate_hz;
	),
	TP_printk("crtc_index=%d refresh_rate=%dHz (%lld)",
		  __entry->crtc_index,
		  __entry->refresh_rate_hz,
		  __entry->refresh_rate_ns)
);

#endif /* _AMDGPU_DM_TRACE_H_ */

#undef TRACE_INCLUDE_PATH