diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2013-12-05 08:51:29 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-12-17 07:17:51 -0500 |
commit | a68d68eebc9820212186b6d02f2dce09deef0e53 (patch) | |
tree | 4b31a0c11d1c8406cd0e304c3b7ae0f26097a545 /drivers/gpu/drm/i915/intel_pm.c | |
parent | ac9545fda6ed13c3a1205de138fa25c076cf4473 (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.c | 13 |
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 */ | ||
2719 | static 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 | |||
2718 | static void hsw_compute_wm_results(struct drm_device *dev, | 2729 | static 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 | ||