[PATCH 9/9] drm/i915: Include plane ctl/surf registers in the plane update_arm() tracepoint

Ville Syrjala ville.syrjala at linux.intel.com
Wed Apr 2 00:22:09 UTC 2025


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

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ä <ville.syrjala at linux.intel.com>
---
 .../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



More information about the Intel-xe mailing list