On Wed, 26 Jun 2013 17:43:24 +0300 ville.syrjala at linux.intel.com wrote: > From: Ville Syrj?l? <ville.syrjala at 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.syrjala at 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 <jbarnes at virtuousgeek.org> -- Jesse Barnes, Intel Open Source Technology Center