| From df5e31c204b34e8d9e5ec33f5b28e960c4f25e14 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com> |
| Date: Thu, 25 Oct 2018 16:05:36 +0300 |
| Subject: drm/i915: Fix ilk+ watermarks when disabling pipes |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| |
| commit df5e31c204b34e8d9e5ec33f5b28e960c4f25e14 upstream. |
| |
| We're no longer programming any watermarks when we're disabling |
| a pipe. That means ilk_wm_merge() & co. will keep considering |
| the any pipe that is getting disabled as still enabled. Thus we |
| either get no LP1+ watermakrs (ilk-ivb), or we get suboptimal |
| ones (hsw-bdw). |
| |
| This seems to have been broken by commit b6b178a77210 ("drm/i915: |
| Calculate ironlake intermediate watermarks correctly, v2."). Before |
| that we apparently had some difference between the intermediate |
| and optimal watermarks and so we would program the optiomal ones. |
| Now intermediate and optimal are identical for disabled pipes |
| and so we don't program either. |
| |
| Fix this by programming the intermediate watermarks even for |
| disabled pipes. We were already doing that for skl+. We'll |
| leave out gmch platforms for now since those do the merging |
| in a different manner and should work as is. We'll want to |
| unify this eventually, but play it safe for now and just put |
| in a FIXME. |
| |
| Cc: stable@vger.kernel.org |
| Cc: Matt Roper <matthew.d.roper@intel.com> |
| Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> |
| Fixes: b6b178a77210 ("drm/i915: Calculate ironlake intermediate watermarks correctly, v2.") |
| Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20181025130536.29024-1-ville.syrjala@linux.intel.com |
| Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> #irc |
| (cherry picked from commit a748faea3bfd7fd1d1485bc1c426c7d460cc6503) |
| Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/i915/intel_display.c | 17 ++++++----------- |
| 1 file changed, 6 insertions(+), 11 deletions(-) |
| |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -12639,17 +12639,12 @@ static void intel_atomic_commit_tail(str |
| intel_check_cpu_fifo_underruns(dev_priv); |
| intel_check_pch_fifo_underruns(dev_priv); |
| |
| - if (!new_crtc_state->active) { |
| - /* |
| - * Make sure we don't call initial_watermarks |
| - * for ILK-style watermark updates. |
| - * |
| - * No clue what this is supposed to achieve. |
| - */ |
| - if (INTEL_GEN(dev_priv) >= 9) |
| - dev_priv->display.initial_watermarks(intel_state, |
| - to_intel_crtc_state(new_crtc_state)); |
| - } |
| + /* FIXME unify this for all platforms */ |
| + if (!new_crtc_state->active && |
| + !HAS_GMCH_DISPLAY(dev_priv) && |
| + dev_priv->display.initial_watermarks) |
| + dev_priv->display.initial_watermarks(intel_state, |
| + to_intel_crtc_state(new_crtc_state)); |
| } |
| } |
| |