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: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Reviewed-by: Harry Wentland <Harry.Wentland@amd.com> Acked-by: Anson Jacob <Anson.Jacob@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
95574c6961
commit
4758823355
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue