aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2015-09-01 06:15:33 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-09-02 07:51:40 -0400
commit85a62bf9d8ef8d533635270ae985281c58e8c974 (patch)
treeb8fbe6c3f327b94c71fa936bee3abac94934c65d
parent34e0adbb4508a318e8039ee3959383e4bf080f04 (diff)
drm/i915: Also record time difference if vblank evasion fails, v2.
This makes the error message slightly more useful. Changes since v1: - Use ktime_get() while irqs are still disabled. (vsyrjala) Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h2
-rw-r--r--drivers/gpu/drm/i915/intel_sprite.c7
2 files changed, 7 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 8f8d320486ff..090d67b04307 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -564,6 +564,8 @@ struct intel_crtc {
564 int scanline_offset; 564 int scanline_offset;
565 565
566 unsigned start_vbl_count; 566 unsigned start_vbl_count;
567 ktime_t start_vbl_time;
568
567 struct intel_crtc_atomic_commit atomic; 569 struct intel_crtc_atomic_commit atomic;
568 570
569 /* scalers available on this crtc */ 571 /* scalers available on this crtc */
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index c35c2339f472..ca7e26430e66 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -134,6 +134,7 @@ void intel_pipe_update_start(struct intel_crtc *crtc)
134 134
135 drm_crtc_vblank_put(&crtc->base); 135 drm_crtc_vblank_put(&crtc->base);
136 136
137 crtc->start_vbl_time = ktime_get();
137 crtc->start_vbl_count = dev->driver->get_vblank_counter(dev, pipe); 138 crtc->start_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
138 139
139 trace_i915_pipe_update_vblank_evaded(crtc, min, max, 140 trace_i915_pipe_update_vblank_evaded(crtc, min, max,
@@ -154,14 +155,16 @@ void intel_pipe_update_end(struct intel_crtc *crtc)
154 struct drm_device *dev = crtc->base.dev; 155 struct drm_device *dev = crtc->base.dev;
155 enum pipe pipe = crtc->pipe; 156 enum pipe pipe = crtc->pipe;
156 u32 end_vbl_count = dev->driver->get_vblank_counter(dev, pipe); 157 u32 end_vbl_count = dev->driver->get_vblank_counter(dev, pipe);
158 ktime_t end_vbl_time = ktime_get();
157 159
158 trace_i915_pipe_update_end(crtc, end_vbl_count); 160 trace_i915_pipe_update_end(crtc, end_vbl_count);
159 161
160 local_irq_enable(); 162 local_irq_enable();
161 163
162 if (crtc->start_vbl_count && crtc->start_vbl_count != end_vbl_count) 164 if (crtc->start_vbl_count && crtc->start_vbl_count != end_vbl_count)
163 DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u)\n", 165 DRM_ERROR("Atomic update failure on pipe %c (start=%u end=%u) time %lld us\n",
164 pipe_name(pipe), crtc->start_vbl_count, end_vbl_count); 166 pipe_name(pipe), crtc->start_vbl_count, end_vbl_count,
167 ktime_us_delta(end_vbl_time, crtc->start_vbl_time));
165} 168}
166 169
167static void 170static void