From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Gen2 doesn't have a hardware frame counter, so let's use the sw counter value instead. v2: Rodrigo: Rebase patch: - using drm_crtc_vblank_{get,put} since legacy is no longer available - declare struct dev when needed since dev_priv become the default. Testcase: igt/kms_pipe_crc_basic/read-crc-pipe-?-frame-sequence Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> --- drivers/gpu/drm/i915/i915_debugfs.c | 11 +++++++++++ drivers/gpu/drm/i915/i915_irq.c | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 9aa62c5..327a091 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c @@ -4130,6 +4130,14 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, goto out; } + if (dev->max_vblank_count == 0) { + ret = drm_crtc_vblank_get(&crtc->base); + if (ret) { + kfree(entries); + return ret; + } + } + /* * When IPS gets enabled, the pipe CRC changes. Since IPS gets * enabled and disabled dynamically based on package C states, @@ -4182,6 +4190,9 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe, hsw_trans_edp_pipe_A_crc_wa(dev, false); hsw_enable_ips(crtc); + + if (dev->max_vblank_count == 0) + drm_crtc_vblank_put(&crtc->base); } ret = 0; diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 6ae201e..a8b5e3a 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -1491,6 +1491,7 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, uint32_t crc2, uint32_t crc3, uint32_t crc4) { + struct drm_device *dev = &dev_priv->drm; struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[pipe]; struct intel_pipe_crc_entry *entry; int head, tail; @@ -1514,8 +1515,11 @@ static void display_pipe_crc_irq_handler(struct drm_i915_private *dev_priv, entry = &pipe_crc->entries[head]; - entry->frame = dev_priv->drm.driver->get_vblank_counter(&dev_priv->drm, - pipe); + if (dev->max_vblank_count == 0) + entry->frame = drm_vblank_count(dev, pipe); + else + entry->frame = dev_priv->drm.driver->get_vblank_counter(dev, + pipe); entry->crc[0] = crc0; entry->crc[1] = crc1; entry->crc[2] = crc2; -- 2.4.3 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx