max_freq = rp_state_cap & 0xff;
                seq_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n",
                           max_freq * GT_FREQUENCY_MULTIPLIER);
+
+               seq_printf(m, "Max overclocked frequency: %dMHz\n",
+                          dev_priv->rps.hw_max * GT_FREQUENCY_MULTIPLIER);
        } else {
                seq_printf(m, "no P-state info available\n");
        }
 
        int ret;
 
        mutex_lock(&dev_priv->rps.hw_lock);
-       ret = dev_priv->rps.max_delay * GT_FREQUENCY_MULTIPLIER;
+       ret = dev_priv->rps.hw_max * GT_FREQUENCY_MULTIPLIER;
        mutex_unlock(&dev_priv->rps.hw_lock);
 
        return snprintf(buf, PAGE_SIZE, "%d\n", ret);
        struct drm_minor *minor = container_of(kdev, struct drm_minor, kdev);
        struct drm_device *dev = minor->dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
-       u32 val, rp_state_cap, hw_max, hw_min;
+       u32 val, rp_state_cap, hw_max, hw_min, non_oc_max;
        ssize_t ret;
 
        ret = kstrtou32(buf, 0, &val);
        mutex_lock(&dev_priv->rps.hw_lock);
 
        rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
-       hw_max = (rp_state_cap & 0xff);
+       hw_max = dev_priv->rps.hw_max;
+       non_oc_max = (rp_state_cap & 0xff);
        hw_min = ((rp_state_cap & 0xff0000) >> 16);
 
        if (val < hw_min || val > hw_max || val < dev_priv->rps.min_delay) {
                return -EINVAL;
        }
 
+       if (val > non_oc_max)
+               DRM_DEBUG("User requested overclocking to %d\n",
+                         val * GT_FREQUENCY_MULTIPLIER);
+
        if (dev_priv->rps.cur_delay > val)
                gen6_set_rps(dev_priv->dev, val);
 
        mutex_lock(&dev_priv->rps.hw_lock);
 
        rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
-       hw_max = (rp_state_cap & 0xff);
+       hw_max = dev_priv->rps.hw_max;
        hw_min = ((rp_state_cap & 0xff0000) >> 16);
 
        if (val < hw_min || val > hw_max || val > dev_priv->rps.max_delay) {
 
        rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
        gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
 
-       /* In units of 100MHz */
-       dev_priv->rps.max_delay = rp_state_cap & 0xff;
+       /* In units of 50MHz */
+       dev_priv->rps.hw_max = dev_priv->rps.max_delay = rp_state_cap & 0xff;
        dev_priv->rps.min_delay = (rp_state_cap & 0xff0000) >> 16;
        dev_priv->rps.cur_delay = 0;
 
                        DRM_DEBUG_DRIVER("overclocking supported, adjusting frequency max from %dMHz to %dMHz\n",
                                         (dev_priv->rps.max_delay & 0xff) * 50,
                                         (pcu_mbox & 0xff) * 50);
+                       dev_priv->rps.hw_max = pcu_mbox & 0xff;
                        dev_priv->rps.max_delay = pcu_mbox & 0xff;
                }
        } else {