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:35 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-12-17 07:17:54 -0500
commit6c8b6c288783b05733de31fb61fc8ebfa8ae0229 (patch)
tree52302ef3d166ce9f71c2fa20525b0c9b573f20be /drivers/gpu/drm/i915/intel_pm.c
parent0ba22e26fe47b2a216e5438292aeeb8e015e9d64 (diff)
drm/i915: Disable FBC WM on ILK, and disable LP2+ when FBC is enabled
ILK has a bunch of issues with FBC. First of all, BSpec tells us that FBC WM should never be enabled. Secondly when FBC is enabled with FBC WM disabled, LP2+ watermarks must be disabled. 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.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index a65d8816c1e6..3d4daa1fc3be 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -2701,7 +2701,8 @@ static void ilk_wm_merge(struct drm_device *dev,
2701 config->num_pipes_active > 1) 2701 config->num_pipes_active > 1)
2702 return; 2702 return;
2703 2703
2704 merged->fbc_wm_enabled = true; 2704 /* ILK: FBC WM must be disabled always */
2705 merged->fbc_wm_enabled = INTEL_INFO(dev)->gen >= 6;
2705 2706
2706 /* merge each WM1+ level */ 2707 /* merge each WM1+ level */
2707 for (level = 1; level <= max_level; level++) { 2708 for (level = 1; level <= max_level; level++) {
@@ -2721,6 +2722,20 @@ static void ilk_wm_merge(struct drm_device *dev,
2721 wm->fbc_val = 0; 2722 wm->fbc_val = 0;
2722 } 2723 }
2723 } 2724 }
2725
2726 /* ILK: LP2+ must be disabled when FBC WM is disabled but FBC enabled */
2727 /*
2728 * FIXME this is racy. FBC might get enabled later.
2729 * What we should check here is whether FBC can be
2730 * enabled sometime later.
2731 */
2732 if (IS_GEN5(dev) && !merged->fbc_wm_enabled && intel_fbc_enabled(dev)) {
2733 for (level = 2; level <= max_level; level++) {
2734 struct intel_wm_level *wm = &merged->wm[level];
2735
2736 wm->enable = false;
2737 }
2738 }
2724} 2739}
2725 2740
2726static int ilk_wm_lp_to_level(int wm_lp, const struct intel_pipe_wm *pipe_wm) 2741static int ilk_wm_lp_to_level(int wm_lp, const struct intel_pipe_wm *pipe_wm)