On Wed, 26 Jun 2013 17:43:24 +0300
ville.syrj...@linux.intel.com wrote:

> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> Use wait_for() instead of the open coded loop to avoid spreading the
> same old timeout related bugs.
> 
> This changes the loop to use msleep(1) instead of udelay(10) when the
> Punit had not yet completed the frequency change. In practice that
> doesn't seem to hurt performance as the Punit appears to be ready pretty
> much always.
> 
> Also give the status bit a name, instead of using the magic number 1.
> 
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_reg.h |  1 +
>  drivers/gpu/drm/i915/intel_pm.c | 11 ++---------
>  2 files changed, 3 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 10ac3d5..d5199a3 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -363,6 +363,7 @@
>  #define PUNIT_REG_GPU_LFM                    0xd3
>  #define PUNIT_REG_GPU_FREQ_REQ                       0xd4
>  #define PUNIT_REG_GPU_FREQ_STS                       0xd8
> +#define   GENFREQSTATUS                              (1<<0)
>  #define PUNIT_REG_MEDIA_TURBO_FREQ_REQ               0xdc
>  
>  #define PUNIT_FUSE_BUS2                              0xf6 /* bits 47:40 */
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index aa48fc6..bff5709 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -3074,19 +3074,12 @@ void gen6_set_rps(struct drm_device *dev, u8 val)
>   */
>  static void vlv_update_rps_cur_delay(struct drm_i915_private *dev_priv)
>  {
> -     unsigned long timeout = jiffies + msecs_to_jiffies(10);
>       u32 pval;
>  
>       WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock));
>  
> -     do {
> -             pval = vlv_punit_read(dev_priv, PUNIT_REG_GPU_FREQ_STS);
> -             if (time_after(jiffies, timeout)) {
> -                     DRM_DEBUG_DRIVER("timed out waiting for Punit\n");
> -                     break;
> -             }
> -             udelay(10);
> -     } while (pval & 1);
> +     if (wait_for(((pval = vlv_punit_read(dev_priv, PUNIT_REG_GPU_FREQ_STS)) 
> & GENFREQSTATUS) == 0, 10))
> +             DRM_DEBUG_DRIVER("timed out waiting for Punit\n");
>  
>       pval >>= 8;
>  

Reviewed-by: Jesse Barnes <jbar...@virtuousgeek.org>

-- 
Jesse Barnes, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to