FAILED: patch "[PATCH] drm/i915: Fix deadlock witha the pipe A quirk during resume" failed to apply to 4.11-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.11-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
17b206c27366f3cee816eaf86fafc6a11f628ecfMon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <[email protected]>
Date: Thu, 1 Jun 2017 17:36:13 +0300
Subject: [PATCH] drm/i915: Fix deadlock witha the pipe A quirk during resume
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Pass down the correct acquire context to the pipe A quirk load detect hack during display resume. Avoids deadlocking the entire thing.
drivers/gpu/drm/i915/intel_display.c +12 -9
@@ -120,7 +120,8 @@ static void intel_crtc_init_scalers(struct intel_crtc *crtc,static void skylake_pfit_enable (struct intel_crtc *crtc);static void ironlake_pfit_disable (struct intel_crtc *crtc,bool force);static void ironlake_pfit_enable (struct intel_crtc *crtc); -static void intel_modeset_setup_hw_state (struct drm_device *dev); +static void intel_modeset_setup_hw_state (struct drm_device *dev, +struct drm_modeset_acquire_ctx *ctx);static void intel_pre_disable_primary_noatomic (struct drm_crtc *crtc);struct intel_limit {
@@ -3449,7 +3450,7 @@ __intel_display_resume(struct drm_device *dev,struct drm_crtc *crtc;int i, ret; -intel_modeset_setup_hw_state (dev); +intel_modeset_setup_hw_state (dev, ctx);i915_redisable_vga (to_i915 (dev));if (!state)
@@ -15030,7 +15031,7 @@ int intel_modeset_init(struct drm_device *dev)intel_setup_outputs (dev_priv);drm_modeset_lock_all (dev); -intel_modeset_setup_hw_state (dev); +intel_modeset_setup_hw_state (dev, dev->mode_config.acquire_ctx);drm_modeset_unlock_all (dev);for_each_intel_crtc (dev, crtc) {
@@ -15067,13 +15068,13 @@ int intel_modeset_init(struct drm_device *dev)return 0 ; } -static void intel_enable_pipe_a (struct drm_device *dev) +static void intel_enable_pipe_a (struct drm_device *dev, +struct drm_modeset_acquire_ctx *ctx) {struct intel_connector *connector;struct drm_connector_list_iter conn_iter;struct drm_connector *crt =NULL ;struct intel_load_detect_pipe load_detect_temp; -struct drm_modeset_acquire_ctx *ctx = dev->mode_config.acquire_ctx;int ret;/* We can't just switch on the pipe A, we need to set things up with a
@@ -15145,7 +15146,8 @@ static bool has_pch_trancoder(struct drm_i915_private *dev_priv, (HAS_PCH_LPT_H (dev_priv) && pch_transcoder ==TRANSCODER_A ); } -static void intel_sanitize_crtc (struct intel_crtc *crtc) +static void intel_sanitize_crtc (struct intel_crtc *crtc, +struct drm_modeset_acquire_ctx *ctx) {struct drm_device *dev = crtc->base.dev;struct drm_i915_private *dev_priv =to_i915 (dev);
@@ -15201,7 +15203,7 @@ static void intel_sanitize_crtc(struct intel_crtc *crtc)* resume. Force-enable the pipe to fix this, the update_dpms * call below we restore the pipe to the right state, but leave * the required bits on. */ -intel_enable_pipe_a (dev); +intel_enable_pipe_a (dev, ctx); }/* Adjust the state of the output pipe according to whether we
@@ -15505,7 +15507,8 @@ get_encoder_power_domains(struct drm_i915_private *dev_priv)* and sanitizes it to the current state */ static void -intel_modeset_setup_hw_state (struct drm_device *dev) +intel_modeset_setup_hw_state (struct drm_device *dev, +struct drm_modeset_acquire_ctx *ctx) {struct drm_i915_private *dev_priv =to_i915 (dev);enum pipe pipe;
@@ -15525,7 +15528,7 @@ intel_modeset_setup_hw_state(struct drm_device *dev)for_each_pipe (dev_priv, pipe) { crtc =intel_get_crtc_for_pipe (dev_priv, pipe); -intel_sanitize_crtc (crtc); +intel_sanitize_crtc (crtc, ctx);intel_dump_pipe_config (crtc, crtc->config,"[setup_hw_state]" ); }