aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_pm.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2013-12-05 08:51:29 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-12-17 07:17:51 -0500
commita68d68eebc9820212186b6d02f2dce09deef0e53 (patch)
tree4b31a0c11d1c8406cd0e304c3b7ae0f26097a545 /drivers/gpu/drm/i915/intel_pm.c
parentac9545fda6ed13c3a1205de138fa25c076cf4473 (diff)
drm/i915: Add ILK/SNB/IVB WM latency field support
Add a new function ilk_wm_lp_latency() which will tell us what to write into the WM_LPx register latency field. HSW is different from erlier gens in this regard. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_pm.c')
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index be8244282742..dbd025a4f22f 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -2715,6 +2715,17 @@ static int ilk_wm_lp_to_level(int wm_lp, const struct intel_pipe_wm *pipe_wm)
2715 return wm_lp + (wm_lp >= 2 && pipe_wm->wm[4].enable); 2715 return wm_lp + (wm_lp >= 2 && pipe_wm->wm[4].enable);
2716} 2716}
2717 2717
2718/* The value we need to program into the WM_LPx latency field */
2719static unsigned int ilk_wm_lp_latency(struct drm_device *dev, int level)
2720{
2721 struct drm_i915_private *dev_priv = dev->dev_private;
2722
2723 if (IS_HASWELL(dev))
2724 return 2 * level;
2725 else
2726 return dev_priv->wm.pri_latency[level];
2727}
2728
2718static void hsw_compute_wm_results(struct drm_device *dev, 2729static void hsw_compute_wm_results(struct drm_device *dev,
2719 const struct intel_pipe_wm *merged, 2730 const struct intel_pipe_wm *merged,
2720 enum intel_ddb_partitioning partitioning, 2731 enum intel_ddb_partitioning partitioning,
@@ -2737,7 +2748,7 @@ static void hsw_compute_wm_results(struct drm_device *dev,
2737 break; 2748 break;
2738 2749
2739 results->wm_lp[wm_lp - 1] = WM3_LP_EN | 2750 results->wm_lp[wm_lp - 1] = WM3_LP_EN |
2740 ((level * 2) << WM1_LP_LATENCY_SHIFT) | 2751 (ilk_wm_lp_latency(dev, level) << WM1_LP_LATENCY_SHIFT) |
2741 (r->pri_val << WM1_LP_SR_SHIFT) | 2752 (r->pri_val << WM1_LP_SR_SHIFT) |
2742 r->cur_val; 2753 r->cur_val;
2743 2754