drm/i915: Setup static bias for GPU
authorDeepak S <deepak.s@linux.intel.com>
Wed, 29 Apr 2015 03:06:24 +0000 (08:36 +0530)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 8 May 2015 11:03:25 +0000 (13:03 +0200)
Based on the spec, Setting up static BIAS for GPU to improve the
rps performace.

v2: rename reg defn to match spec. (Ville)

v3: Updated bias setting for chv (Deepak)

Signed-off-by: Deepak S <deepak.s@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/intel_pm.c

index 1b31238fa531de36845c42eb61c55cbb25fbb21f..1d4871b8fdab75a047de0220c2f861e985d1115a 100644 (file)
@@ -670,6 +670,12 @@ enum skl_disp_power_wells {
 #define   FB_FMAX_VMIN_FREQ_LO_SHIFT           27
 #define   FB_FMAX_VMIN_FREQ_LO_MASK            0xf8000000
 
+#define VLV_TURBO_SOC_OVERRIDE 0x04
+#define        VLV_OVERRIDE_EN 1
+#define        VLV_SOC_TDP_EN  (1 << 1)
+#define        VLV_BIAS_CPU_125_SOC_875 (6 << 2)
+#define        CHV_BIAS_CPU_50_SOC_50 (3 << 2)
+
 #define VLV_CZ_CLOCK_TO_MILLI_SEC              100000
 
 /* vlv2 north clock has */
index a7516ed24eee5fd827edb216b1591ee57a6d46b1..8812fffeac5e1853a7ceb8d0ea7e89fc2c6b1cff 100644 (file)
@@ -5082,6 +5082,12 @@ static void cherryview_enable_rps(struct drm_device *dev)
                   GEN6_RP_UP_BUSY_AVG |
                   GEN6_RP_DOWN_IDLE_AVG);
 
+       /* Setting Fixed Bias */
+       val = VLV_OVERRIDE_EN |
+                 VLV_SOC_TDP_EN |
+                 CHV_BIAS_CPU_50_SOC_50;
+       vlv_punit_write(dev_priv, VLV_TURBO_SOC_OVERRIDE, val);
+
        val = vlv_punit_read(dev_priv, PUNIT_REG_GPU_FREQ_STS);
 
        /* RPS code assumes GPLL is used */
@@ -5166,6 +5172,12 @@ static void valleyview_enable_rps(struct drm_device *dev)
 
        I915_WRITE(GEN6_RC_CONTROL, rc6_mode);
 
+       /* Setting Fixed Bias */
+       val = VLV_OVERRIDE_EN |
+                 VLV_SOC_TDP_EN |
+                 VLV_BIAS_CPU_125_SOC_875;
+       vlv_punit_write(dev_priv, VLV_TURBO_SOC_OVERRIDE, val);
+
        val = vlv_punit_read(dev_priv, PUNIT_REG_GPU_FREQ_STS);
 
        /* RPS code assumes GPLL is used */