From: Ville Syrjälä <[email protected]> The plane fault tracepoints report the plane control and surface register values. In order to correlate those against the plane update tracepoints it might be helpful to also include that information in the plane update tracepoints as well.
The one caveat here is that the precomputed ctl/surf values that we include the tracepoint do not include the async flip bit(s) (as those are handled in a more dynamic fashion), whereas the ones read from the hardware in the plane fault tracepoint include everything. Signed-off-by: Ville Syrjälä <[email protected]> --- .../gpu/drm/i915/display/intel_atomic_plane.c | 2 +- .../drm/i915/display/intel_display_trace.h | 28 +++++++++++++------ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c index 264a50b29c16..24bb7ddbb06a 100644 --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c @@ -834,7 +834,7 @@ void intel_plane_async_flip(struct intel_dsb *dsb, { struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); - trace_intel_plane_async_flip(plane, crtc, async_flip); + trace_intel_plane_async_flip(plane_state, crtc, async_flip); plane->async_flip(dsb, plane, crtc_state, plane_state, async_flip); } diff --git a/drivers/gpu/drm/i915/display/intel_display_trace.h b/drivers/gpu/drm/i915/display/intel_display_trace.h index f0763d754eb7..91980567113d 100644 --- a/drivers/gpu/drm/i915/display/intel_display_trace.h +++ b/drivers/gpu/drm/i915/display/intel_display_trace.h @@ -381,16 +381,19 @@ TRACE_EVENT(vlv_fifo_size, ); TRACE_EVENT(intel_plane_async_flip, - TP_PROTO(struct intel_plane *plane, struct intel_crtc *crtc, bool async_flip), - TP_ARGS(plane, crtc, async_flip), + TP_PROTO(const struct intel_plane_state *plane_state, + struct intel_crtc *crtc, bool async_flip), + TP_ARGS(plane_state, crtc, async_flip), TP_STRUCT__entry( - __string(dev, __dev_name_kms(plane)) + __string(dev, __dev_name_drm(plane_state->uapi.plane)) __field(char, pipe_name) __field(u32, frame) __field(u32, scanline) __field(bool, async_flip) - __string(name, plane->base.name) + __string(name, plane_state->uapi.plane->name) + __field(u32, ctl) + __field(u32, surf) ), TP_fast_assign( @@ -400,11 +403,15 @@ TRACE_EVENT(intel_plane_async_flip, __entry->frame = intel_crtc_get_vblank_counter(crtc); __entry->scanline = intel_get_crtc_scanline(crtc); __entry->async_flip = async_flip; + __entry->ctl = plane_state->ctl; + __entry->surf = plane_state->surf; ), - TP_printk("dev %s, pipe %c, %s, frame=%u, scanline=%u, async_flip=%s", + TP_printk("dev %s, pipe %c, %s, frame=%u, scanline=%u, async_flip=%s, ctl=0x%x, surf=0x%x", __get_str(dev), __entry->pipe_name, __get_str(name), - __entry->frame, __entry->scanline, str_yes_no(__entry->async_flip)) + __entry->frame, __entry->scanline, + str_yes_no(__entry->async_flip), + __entry->ctl, __entry->surf) ); TRACE_EVENT(intel_plane_update_noarm, @@ -453,6 +460,8 @@ TRACE_EVENT(intel_plane_update_arm, __array(int, src, 4) __array(int, dst, 4) __string(name, plane_state->uapi.plane->name) + __field(u32, ctl) + __field(u32, surf) ), TP_fast_assign( @@ -464,13 +473,16 @@ TRACE_EVENT(intel_plane_update_arm, __entry->format = plane_state->hw.fb->format->format; memcpy(__entry->src, &plane_state->uapi.src, sizeof(__entry->src)); memcpy(__entry->dst, &plane_state->uapi.dst, sizeof(__entry->dst)); + __entry->ctl = plane_state->ctl; + __entry->surf = plane_state->surf; ), - TP_printk("dev %s, pipe %c, %s, frame=%u, scanline=%u, format=%p4cc, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT, + TP_printk("dev %s, pipe %c, %s, frame=%u, scanline=%u, format=%p4cc, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT " ctl=0x%x, surf=0x%x", __get_str(dev), __entry->pipe_name, __get_str(name), __entry->frame, __entry->scanline, &__entry->format, DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src), - DRM_RECT_ARG((const struct drm_rect *)__entry->dst)) + DRM_RECT_ARG((const struct drm_rect *)__entry->dst), + __entry->ctl, __entry->surf) ); TRACE_EVENT(intel_plane_disable_arm, -- 2.45.3
