Message ID | 20191213133453.22152-5-ville.syrjala@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | None | expand |
On Fri, Dec 13, 2019 at 01:41:55PM +0000, Chris Wilson wrote: > Quoting Ville Syrjala (2019-12-13 13:34:52) > > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > > > Add tracepoints which let us know when fbc activates/deactivates/nukes. > > > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Passing comment, prepare for multiple devices? Yeah, we should add the device to most tracepoints somehow. However not quite sure what the best way to do that is. Would be nice if we could use the filter thing to filter based on the device. Can't immediately see any standard thing for that in ftrace so I guess we need to roll something ourselves.
On Fri, Dec 13, 2019 at 03:34:52PM +0200, Ville Syrjala wrote: > From: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Add tracepoints which let us know when fbc activates/deactivates/nukes. > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> > --- > drivers/gpu/drm/i915/display/intel_fbc.c | 9 ++++ > drivers/gpu/drm/i915/i915_trace.h | 62 ++++++++++++++++++++++++ > 2 files changed, 71 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c > index 28adf4636800..88a9c2fea695 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbc.c > +++ b/drivers/gpu/drm/i915/display/intel_fbc.c > @@ -41,6 +41,7 @@ > #include <drm/drm_fourcc.h> > > #include "i915_drv.h" > +#include "i915_trace.h" > #include "intel_display_types.h" > #include "intel_fbc.h" > #include "intel_frontbuffer.h" > @@ -200,6 +201,10 @@ static bool g4x_fbc_is_active(struct drm_i915_private *dev_priv) > /* This function forces a CFB recompression through the nuke operation. */ > static void intel_fbc_recompress(struct drm_i915_private *dev_priv) > { > + struct intel_fbc *fbc = &dev_priv->fbc; > + > + trace_intel_fbc_nuke(fbc->crtc); > + > I915_WRITE(MSG_FBC_REND_STATE, FBC_REND_NUKE); > POSTING_READ(MSG_FBC_REND_STATE); > } > @@ -356,6 +361,8 @@ static void intel_fbc_hw_activate(struct drm_i915_private *dev_priv) > { > struct intel_fbc *fbc = &dev_priv->fbc; > > + trace_intel_fbc_activate(fbc->crtc); > + > fbc->active = true; > fbc->activated = true; > > @@ -373,6 +380,8 @@ static void intel_fbc_hw_deactivate(struct drm_i915_private *dev_priv) > { > struct intel_fbc *fbc = &dev_priv->fbc; > > + trace_intel_fbc_deactivate(fbc->crtc); > + > fbc->active = false; > > if (INTEL_GEN(dev_priv) >= 5) > diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h > index 7ef7a1e1664c..66ff96303b95 100644 > --- a/drivers/gpu/drm/i915/i915_trace.h > +++ b/drivers/gpu/drm/i915/i915_trace.h > @@ -339,6 +339,68 @@ TRACE_EVENT(intel_disable_plane, > __entry->frame, __entry->scanline) > ); > > +/* fbc */ > + > +TRACE_EVENT(intel_fbc_activate, > + TP_PROTO(struct intel_crtc *crtc), > + TP_ARGS(crtc), > + > + TP_STRUCT__entry( > + __field(enum pipe, pipe) > + __field(u32, frame) > + __field(u32, scanline) > + ), > + > + TP_fast_assign( > + __entry->pipe = crtc->pipe; > + __entry->frame = intel_crtc_get_vblank_counter(crtc); > + __entry->scanline = intel_get_crtc_scanline(crtc); > + ), > + > + TP_printk("pipe %c, frame=%u, scanline=%u", > + pipe_name(__entry->pipe), __entry->frame, __entry->scanline) > +); > + > +TRACE_EVENT(intel_fbc_deactivate, > + TP_PROTO(struct intel_crtc *crtc), > + TP_ARGS(crtc), > + > + TP_STRUCT__entry( > + __field(enum pipe, pipe) > + __field(u32, frame) > + __field(u32, scanline) > + ), > + > + TP_fast_assign( > + __entry->pipe = crtc->pipe; > + __entry->frame = intel_crtc_get_vblank_counter(crtc); > + __entry->scanline = intel_get_crtc_scanline(crtc); > + ), > + > + TP_printk("pipe %c, frame=%u, scanline=%u", > + pipe_name(__entry->pipe), __entry->frame, __entry->scanline) > +); > + > +TRACE_EVENT(intel_fbc_nuke, > + TP_PROTO(struct intel_crtc *crtc), > + TP_ARGS(crtc), > + > + TP_STRUCT__entry( > + __field(enum pipe, pipe) > + __field(u32, frame) > + __field(u32, scanline) > + ), > + > + TP_fast_assign( > + __entry->pipe = crtc->pipe; > + __entry->frame = intel_crtc_get_vblank_counter(crtc); > + __entry->scanline = intel_get_crtc_scanline(crtc); > + ), > + > + TP_printk("pipe %c, frame=%u, scanline=%u", > + pipe_name(__entry->pipe), __entry->frame, __entry->scanline) > +); > + > /* pipe updates */ > > TRACE_EVENT(i915_pipe_update_start, > -- > 2.23.0 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c index 28adf4636800..88a9c2fea695 100644 --- a/drivers/gpu/drm/i915/display/intel_fbc.c +++ b/drivers/gpu/drm/i915/display/intel_fbc.c @@ -41,6 +41,7 @@ #include <drm/drm_fourcc.h> #include "i915_drv.h" +#include "i915_trace.h" #include "intel_display_types.h" #include "intel_fbc.h" #include "intel_frontbuffer.h" @@ -200,6 +201,10 @@ static bool g4x_fbc_is_active(struct drm_i915_private *dev_priv) /* This function forces a CFB recompression through the nuke operation. */ static void intel_fbc_recompress(struct drm_i915_private *dev_priv) { + struct intel_fbc *fbc = &dev_priv->fbc; + + trace_intel_fbc_nuke(fbc->crtc); + I915_WRITE(MSG_FBC_REND_STATE, FBC_REND_NUKE); POSTING_READ(MSG_FBC_REND_STATE); } @@ -356,6 +361,8 @@ static void intel_fbc_hw_activate(struct drm_i915_private *dev_priv) { struct intel_fbc *fbc = &dev_priv->fbc; + trace_intel_fbc_activate(fbc->crtc); + fbc->active = true; fbc->activated = true; @@ -373,6 +380,8 @@ static void intel_fbc_hw_deactivate(struct drm_i915_private *dev_priv) { struct intel_fbc *fbc = &dev_priv->fbc; + trace_intel_fbc_deactivate(fbc->crtc); + fbc->active = false; if (INTEL_GEN(dev_priv) >= 5) diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h index 7ef7a1e1664c..66ff96303b95 100644 --- a/drivers/gpu/drm/i915/i915_trace.h +++ b/drivers/gpu/drm/i915/i915_trace.h @@ -339,6 +339,68 @@ TRACE_EVENT(intel_disable_plane, __entry->frame, __entry->scanline) ); +/* fbc */ + +TRACE_EVENT(intel_fbc_activate, + TP_PROTO(struct intel_crtc *crtc), + TP_ARGS(crtc), + + TP_STRUCT__entry( + __field(enum pipe, pipe) + __field(u32, frame) + __field(u32, scanline) + ), + + TP_fast_assign( + __entry->pipe = crtc->pipe; + __entry->frame = intel_crtc_get_vblank_counter(crtc); + __entry->scanline = intel_get_crtc_scanline(crtc); + ), + + TP_printk("pipe %c, frame=%u, scanline=%u", + pipe_name(__entry->pipe), __entry->frame, __entry->scanline) +); + +TRACE_EVENT(intel_fbc_deactivate, + TP_PROTO(struct intel_crtc *crtc), + TP_ARGS(crtc), + + TP_STRUCT__entry( + __field(enum pipe, pipe) + __field(u32, frame) + __field(u32, scanline) + ), + + TP_fast_assign( + __entry->pipe = crtc->pipe; + __entry->frame = intel_crtc_get_vblank_counter(crtc); + __entry->scanline = intel_get_crtc_scanline(crtc); + ), + + TP_printk("pipe %c, frame=%u, scanline=%u", + pipe_name(__entry->pipe), __entry->frame, __entry->scanline) +); + +TRACE_EVENT(intel_fbc_nuke, + TP_PROTO(struct intel_crtc *crtc), + TP_ARGS(crtc), + + TP_STRUCT__entry( + __field(enum pipe, pipe) + __field(u32, frame) + __field(u32, scanline) + ), + + TP_fast_assign( + __entry->pipe = crtc->pipe; + __entry->frame = intel_crtc_get_vblank_counter(crtc); + __entry->scanline = intel_get_crtc_scanline(crtc); + ), + + TP_printk("pipe %c, frame=%u, scanline=%u", + pipe_name(__entry->pipe), __entry->frame, __entry->scanline) +); + /* pipe updates */ TRACE_EVENT(i915_pipe_update_start,