On Thu, 24 May 2012 09:22:23 -0700, Jesse Barnes <jbarnes at virtuousgeek.org> wrote: > This makes for easier benchmarking and testing. One can set a fixed > frequency by setting min and max to the same value. > > Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org> > --- > drivers/gpu/drm/i915/i915_debugfs.c | 70 +++++++++++++++++++++++++++++++++++ > 1 files changed, 70 insertions(+), 0 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c > index eb2b3c2..c0b7688 100644 > --- a/drivers/gpu/drm/i915/i915_debugfs.c > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > @@ -1765,6 +1765,68 @@ static const struct file_operations i915_max_freq_fops = { > }; > > static ssize_t > +i915_min_freq_read(struct file *filp, > + char __user *ubuf, > + size_t max, > + loff_t *ppos) > +{ > + struct drm_device *dev = filp->private_data; > + drm_i915_private_t *dev_priv = dev->dev_private; > + char buf[80]; > + int len; > + > + len = snprintf(buf, sizeof(buf), > + "min freq: %d\n", dev_priv->min_delay * 50); > + > + if (len > sizeof(buf)) > + len = sizeof(buf); > + > + return simple_read_from_buffer(ubuf, max, ppos, buf, len); > +} > + > +static ssize_t > +i915_min_freq_write(struct file *filp, > + const char __user *ubuf, > + size_t cnt, > + loff_t *ppos) > +{ > + struct drm_device *dev = filp->private_data; > + struct drm_i915_private *dev_priv = dev->dev_private; > + char buf[20]; > + int val = 1; > + > + if (cnt > 0) { > + if (cnt > sizeof(buf) - 1) > + return -EINVAL; > + > + if (copy_from_user(buf, ubuf, cnt)) > + return -EFAULT; > + buf[cnt] = 0; > + > + val = simple_strtoul(buf, NULL, 0); > + } > + > + DRM_DEBUG_DRIVER("Manually setting min freq to %d\n", val); > + > + /* > + * Turbo will still be enabled, but won't go above the set value. > + */ > + dev_priv->min_delay = val / 50; Do we need some sanity checking here to prevent the user from being silly? Looks good otherwise, -Chris -- Chris Wilson, Intel Open Source Technology Centre