[PATCH] Experimental patch: Check how much intel_crtc_get_scanline and get_vblank_counter functions contribute to "evasion time > 250 us" warning.
Stanislav Lisovskiy
stanislav.lisovskiy at intel.com
Tue Oct 27 15:32:25 UTC 2020
---
drivers/gpu/drm/i915/display/intel_sprite.c | 2 +-
drivers/gpu/drm/i915/i915_irq.c | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_sprite.c b/drivers/gpu/drm/i915/display/intel_sprite.c
index b6deeb338477..6b7b139d5fef 100644
--- a/drivers/gpu/drm/i915/display/intel_sprite.c
+++ b/drivers/gpu/drm/i915/display/intel_sprite.c
@@ -199,7 +199,7 @@ void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state)
{
struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
enum pipe pipe = crtc->pipe;
- int scanline_end = intel_get_crtc_scanline(crtc);
+ int scanline_end = 1;/*intel_get_crtc_scanline(crtc);*/
u32 end_vbl_count = intel_crtc_get_vblank_counter(crtc);
ktime_t end_vbl_time = ktime_get();
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index dc33c96d741d..7968d5442314 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -629,6 +629,7 @@ u32 i915_get_vblank_counter(struct drm_crtc *crtc)
i915_reg_t high_frame, low_frame;
u32 high1, high2, low, pixel, vbl_start, hsync_start, htotal;
unsigned long irqflags;
+ ktime_t start;
/*
* On i965gm TV output the frame counter only works up to
@@ -661,6 +662,8 @@ u32 i915_get_vblank_counter(struct drm_crtc *crtc)
spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
+ start = ktime_get();
+
/*
* High & low register fields aren't synchronized, so make sure
* we get a low value that's stable across two reads of the high
@@ -670,6 +673,10 @@ u32 i915_get_vblank_counter(struct drm_crtc *crtc)
high1 = intel_de_read_fw(dev_priv, high_frame) & PIPE_FRAME_HIGH_MASK;
low = intel_de_read_fw(dev_priv, low_frame);
high2 = intel_de_read_fw(dev_priv, high_frame) & PIPE_FRAME_HIGH_MASK;
+
+ if (ktime_us_delta(ktime_get(), start) >= 60)
+ break;
+
} while (high1 != high2);
spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
--
2.24.1.485.gad05a3d8e5
More information about the Intel-gfx-trybot
mailing list