[Intel-gfx] [PATCH 2/2] drm/i915: Use drm_vblank_count() on gen2 for crc frame count

Rodrigo Vivi rodrigo.vivi at gmail.com
Tue Jul 26 18:27:02 UTC 2016


On Tue, Jul 26, 2016 at 10:52 AM, Rodrigo Vivi <rodrigo.vivi at intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>

I believe we should change the subject and commit message if the patch
that disables hw counter for platforms with DMC is accepted.
But since that is uncertain and I didn't want to change what Ville had
done, I just sent this rebased version for now.

>
> 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
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Rodrigo Vivi
Blog: http://blog.vivi.eng.br


More information about the Intel-gfx mailing list