|
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 |
|