On Thu, 24 May 2012 20:51:40 +0100 Chris Wilson <chris at chris-wilson.co.uk> wrote: > 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, We'd probably want to do that on max_freq too, maybe if/when we move this to sysfs we can track the real max/min we read from hw at init time and clamp the values to that. -- Jesse Barnes, Intel Open Source Technology Center