Jiri Slaby d481b6
From: Imre Deak <imre.deak@intel.com>
Jiri Slaby d481b6
Date: Thu, 20 Jul 2017 14:28:20 +0300
Jiri Slaby d481b6
Subject: [PATCH] drm/i915: Fix scaler init during CRTC HW state readout
Jiri Slaby d481b6
MIME-Version: 1.0
Jiri Slaby d481b6
Content-Type: text/plain; charset=UTF-8
Jiri Slaby d481b6
Content-Transfer-Encoding: 8bit
Jiri Slaby d481b6
References: bnc#1060662
Thomas Zimmermann 1d81d2
Patch-mainline: v4.12.5
Jiri Slaby d481b6
Git-commit: 283d6860d64f5091565bf729b0a6d6af14ae6c27
Jiri Slaby d481b6
Git-commit: 5fb9dadf336f3590c799e8cbde348215dccc2aa2
Jiri Slaby d481b6
Jiri Slaby d481b6
commit 283d6860d64f5091565bf729b0a6d6af14ae6c27 upstream.
Jiri Slaby d481b6
Jiri Slaby d481b6
The scaler allocation code depends on a non-zero default value for the
Jiri Slaby d481b6
crtc scaler_id, so make sure we initialize the scaler state accordingly
Jiri Slaby d481b6
even if the crtc is off. This fixes at least an initial YUV420 modeset
Jiri Slaby d481b6
(added in a follow-up patchset by Shashank) when booting with the screen
Jiri Slaby d481b6
off: after the initial HW readout and modeset which enables the scaler a
Jiri Slaby d481b6
subsequent modeset will disable the scaler which isn't properly
Jiri Slaby d481b6
allocated. This results in a funky HW state where the pipe scaler HW
Jiri Slaby d481b6
registers can't be modified and the normally black screen is grey and
Jiri Slaby d481b6
shifted to the right or jitters.
Jiri Slaby d481b6
Jiri Slaby d481b6
The problem was revealed by Shashank's YUV420 patchset and first
Jiri Slaby d481b6
reported by Ville.
Jiri Slaby d481b6
Jiri Slaby d481b6
v2:
Jiri Slaby d481b6
- In the stable tag also include versions which need backporting (Jani)
Jiri Slaby d481b6
Jiri Slaby d481b6
Cc: Jani Nikula <jani.nikula@intel.com>
Jiri Slaby d481b6
Cc: Shashank Sharma <shashank.sharma@intel.com>
Jiri Slaby d481b6
Cc: Ville Syrj채l채 <ville.syrjala@linux.intel.com>
Jiri Slaby d481b6
Cc: Chandra Konduru <chandra.konduru@intel.com>
Jiri Slaby d481b6
Cc: Matt Roper <matthew.d.roper@intel.com>
Jiri Slaby d481b6
Reported-by: Ville Syrj채l채 <ville.syrjala@linux.intel.com>
Jiri Slaby d481b6
Fixes: a1b2278e4dfc ("drm/i915: skylake panel fitting using shared scalers")
Jiri Slaby d481b6
Signed-off-by: Imre Deak <imre.deak@intel.com>
Jiri Slaby d481b6
Reviewed-by: Mahesh Kumar <mahesh1.kumar@intel.com>
Jiri Slaby d481b6
Link: https://patchwork.freedesktop.org/patch/msgid/20170720112820.26816-1-imre.deak@intel.com
Jiri Slaby d481b6
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Jiri Slaby d481b6
(cherry picked from commit 5fb9dadf336f3590c799e8cbde348215dccc2aa2)
Jiri Slaby d481b6
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Jiri Slaby d481b6
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Jiri Slaby d481b6
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Jiri Slaby d481b6
---
Jiri Slaby d481b6
 drivers/gpu/drm/i915/intel_display.c | 14 +++++++-------
Jiri Slaby d481b6
 1 file changed, 7 insertions(+), 7 deletions(-)
Jiri Slaby d481b6
Jiri Slaby d481b6
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
Jiri Slaby d481b6
index 9106ea32b048..881df8843e66 100644
Jiri Slaby d481b6
--- a/drivers/gpu/drm/i915/intel_display.c
Jiri Slaby d481b6
+++ b/drivers/gpu/drm/i915/intel_display.c
Jiri Slaby d481b6
@@ -9085,6 +9085,13 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
Jiri Slaby d481b6
 	u64 power_domain_mask;
Jiri Slaby d481b6
 	bool active;
Jiri Slaby d481b6
 
Jiri Slaby d481b6
+	if (INTEL_GEN(dev_priv) >= 9) {
Jiri Slaby d481b6
+		intel_crtc_init_scalers(crtc, pipe_config);
Jiri Slaby d481b6
+
Jiri Slaby d481b6
+		pipe_config->scaler_state.scaler_id = -1;
Jiri Slaby d481b6
+		pipe_config->scaler_state.scaler_users &= ~(1 << SKL_CRTC_INDEX);
Jiri Slaby d481b6
+	}
Jiri Slaby d481b6
+
Jiri Slaby d481b6
 	power_domain = POWER_DOMAIN_PIPE(crtc->pipe);
Jiri Slaby d481b6
 	if (!intel_display_power_get_if_enabled(dev_priv, power_domain))
Jiri Slaby d481b6
 		return false;
Jiri Slaby d481b6
@@ -9113,13 +9120,6 @@ static bool haswell_get_pipe_config(struct intel_crtc *crtc,
Jiri Slaby d481b6
 	pipe_config->gamma_mode =
Jiri Slaby d481b6
 		I915_READ(GAMMA_MODE(crtc->pipe)) & GAMMA_MODE_MODE_MASK;
Jiri Slaby d481b6
 
Jiri Slaby d481b6
-	if (INTEL_GEN(dev_priv) >= 9) {
Jiri Slaby d481b6
-		intel_crtc_init_scalers(crtc, pipe_config);
Jiri Slaby d481b6
-
Jiri Slaby d481b6
-		pipe_config->scaler_state.scaler_id = -1;
Jiri Slaby d481b6
-		pipe_config->scaler_state.scaler_users &= ~(1 << SKL_CRTC_INDEX);
Jiri Slaby d481b6
-	}
Jiri Slaby d481b6
-
Jiri Slaby d481b6
 	power_domain = POWER_DOMAIN_PIPE_PANEL_FITTER(crtc->pipe);
Jiri Slaby d481b6
 	if (intel_display_power_get_if_enabled(dev_priv, power_domain)) {
Jiri Slaby d481b6
 		power_domain_mask |= BIT_ULL(power_domain);
Jiri Slaby d481b6
-- 
Jiri Slaby d481b6
2.14.2
Jiri Slaby d481b6