]> www.infradead.org Git - nvme.git/commitdiff
drm/i915: Add async flip tracepoint
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 11 Jun 2024 13:33:35 +0000 (16:33 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 20 Jun 2024 12:36:42 +0000 (15:36 +0300)
Add a separate tracepoint for async flips vs. sync plane updates
to make it a bit easier to figure out what is happening.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240611133344.30673-3-ville.syrjala@linux.intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_atomic_plane.c
drivers/gpu/drm/i915/display/intel_atomic_plane.h
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_display_trace.h

index 8ec1bab1b15dda2e2fed02f43329f1d42f8fe0fa..79244ea06b9af64805296bbc8ba047166b09d3a3 100644 (file)
@@ -801,18 +801,30 @@ void intel_plane_update_noarm(struct intel_plane *plane,
                plane->update_noarm(plane, crtc_state, plane_state);
 }
 
+void intel_plane_async_flip(struct intel_plane *plane,
+                           const struct intel_crtc_state *crtc_state,
+                           const struct intel_plane_state *plane_state,
+                           bool async_flip)
+{
+       struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
+
+       trace_intel_plane_async_flip(plane, crtc, async_flip);
+       plane->async_flip(plane, crtc_state, plane_state, async_flip);
+}
+
 void intel_plane_update_arm(struct intel_plane *plane,
                            const struct intel_crtc_state *crtc_state,
                            const struct intel_plane_state *plane_state)
 {
        struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
 
-       trace_intel_plane_update_arm(plane, crtc);
+       if (crtc_state->do_async_flip && plane->async_flip) {
+               intel_plane_async_flip(plane, crtc_state, plane_state, true);
+               return;
+       }
 
-       if (crtc_state->do_async_flip && plane->async_flip)
-               plane->async_flip(plane, crtc_state, plane_state, true);
-       else
-               plane->update_arm(plane, crtc_state, plane_state);
+       trace_intel_plane_update_arm(plane, crtc);
+       plane->update_arm(plane, crtc_state, plane_state);
 }
 
 void intel_plane_disable_arm(struct intel_plane *plane,
index e7a0699f17c8ddf20e89e082ec5aed4c65fd3e14..84541d97c67befabdd3b3cfcd11f93a14deec035 100644 (file)
@@ -32,6 +32,10 @@ void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state,
                                       struct intel_crtc *crtc);
 void intel_plane_copy_hw_state(struct intel_plane_state *plane_state,
                               const struct intel_plane_state *from_plane_state);
+void intel_plane_async_flip(struct intel_plane *plane,
+                           const struct intel_crtc_state *crtc_state,
+                           const struct intel_plane_state *plane_state,
+                           bool async_flip);
 void intel_plane_update_noarm(struct intel_plane *plane,
                              const struct intel_crtc_state *crtc_state,
                              const struct intel_plane_state *plane_state);
index 7bc4f3de691e02deb61dcc7521b13055a34d78fb..9041dd3181ee8a12fd3457d86464f14e3663dd0c 100644 (file)
@@ -1160,8 +1160,8 @@ static void intel_crtc_async_flip_disable_wa(struct intel_atomic_state *state,
                         * Apart from the async flip bit we want to
                         * preserve the old state for the plane.
                         */
-                       plane->async_flip(plane, old_crtc_state,
-                                         old_plane_state, false);
+                       intel_plane_async_flip(plane, old_crtc_state,
+                                              old_plane_state, false);
                        need_vbl_wait = true;
                }
        }
index 49a5e6d9dc0d7f50e7f2f7d0acc8636d61aa207b..34c223ace5ea7cce600357ae1a22cdecc2973f2f 100644 (file)
@@ -308,6 +308,33 @@ TRACE_EVENT(vlv_fifo_size,
                      __entry->sprite0_start, __entry->sprite1_start, __entry->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_STRUCT__entry(
+                            __string(dev, __dev_name_kms(plane))
+                            __field(enum pipe, pipe)
+                            __field(u32, frame)
+                            __field(u32, scanline)
+                            __field(bool, async_flip)
+                            __string(name, plane->base.name)
+                            ),
+
+           TP_fast_assign(
+                          __assign_str(dev);
+                          __assign_str(name);
+                          __entry->pipe = crtc->pipe;
+                          __entry->frame = intel_crtc_get_vblank_counter(crtc);
+                          __entry->scanline = intel_get_crtc_scanline(crtc);
+                          __entry->async_flip = async_flip;
+                          ),
+
+           TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u, async_flip=%s",
+                     __get_str(dev), pipe_name(__entry->pipe), __get_str(name),
+                     __entry->frame, __entry->scanline, str_yes_no(__entry->async_flip))
+);
+
 TRACE_EVENT(intel_plane_update_noarm,
            TP_PROTO(struct intel_plane *plane, struct intel_crtc *crtc),
            TP_ARGS(plane, crtc),