drm/i915: Add cxsr toggle tracepoint
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 2 Mar 2017 17:15:07 +0000 (19:15 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 3 Mar 2017 14:50:11 +0000 (16:50 +0200)
Add a tracepoint for observing changes in the cxsr state. The tracepoint
will dump out the frame and scanline counters for each pipe so that the
information can be compared with eg. plane update tracepoints.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170302171508.1666-18-ville.syrjala@linux.intel.com
drivers/gpu/drm/i915/i915_trace.h
drivers/gpu/drm/i915/intel_pm.c

index ca81987853114599834efdc9b86593943cd589f0..2537a03555cc50fca2e5daeed0c09bb7ee5d837b 100644 (file)
 
 /* watermark/fifo updates */
 
+TRACE_EVENT(intel_memory_cxsr,
+           TP_PROTO(struct drm_i915_private *dev_priv, bool old, bool new),
+           TP_ARGS(dev_priv, old, new),
+
+           TP_STRUCT__entry(
+                            __array(u32, frame, 3)
+                            __array(u32, scanline, 3)
+                            __field(bool, old)
+                            __field(bool, new)
+                            ),
+
+           TP_fast_assign(
+                          enum pipe pipe;
+                          for_each_pipe(dev_priv, pipe) {
+                                  __entry->frame[pipe] =
+                                          dev_priv->drm.driver->get_vblank_counter(&dev_priv->drm, pipe);
+                                  __entry->scanline[pipe] =
+                                          intel_get_crtc_scanline(intel_get_crtc_for_pipe(dev_priv, pipe));
+                          }
+                          __entry->old = old;
+                          __entry->new = new;
+                          ),
+
+           TP_printk("%s->%s, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u",
+                     onoff(__entry->old), onoff(__entry->new),
+                     __entry->frame[PIPE_A], __entry->scanline[PIPE_A],
+                     __entry->frame[PIPE_B], __entry->scanline[PIPE_B],
+                     __entry->frame[PIPE_C], __entry->scanline[PIPE_C])
+);
+
 TRACE_EVENT(vlv_wm,
            TP_PROTO(struct intel_crtc *crtc, const struct vlv_wm_values *wm),
            TP_ARGS(crtc, wm),
index dc85501cfff3ff5a59aa53f7432ea3aa7b3d95bd..99e09f63d4b36a2f6e1435361a80dfe7d86d353f 100644 (file)
@@ -377,6 +377,8 @@ static bool _intel_set_memory_cxsr(struct drm_i915_private *dev_priv, bool enabl
                return false;
        }
 
+       trace_intel_memory_cxsr(dev_priv, was_enabled, enable);
+
        DRM_DEBUG_KMS("memory self-refresh is %s (was %s)\n",
                      enableddisabled(enable),
                      enableddisabled(was_enabled));