[Intel-gfx] [PATCH 2/2] drm/i915: Use drm_vblank_count() on gen2 for crc frame count
Rodrigo Vivi
rodrigo.vivi at intel.com
Tue Jul 26 17:52:10 UTC 2016
From: Ville Syrjälä <ville.syrjala at linux.intel.com>
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 at linux.intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
---
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
More information about the Intel-gfx
mailing list