| From 908764f6d0bd1ba496cb8da33b9b98297ed27351 Mon Sep 17 00:00:00 2001 |
| From: Imre Deak <imre.deak@intel.com> |
| Date: Tue, 29 Nov 2016 21:40:29 +0200 |
| Subject: drm/i915/lspcon: Enable AUX interrupts for resume time initialization |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Imre Deak <imre.deak@intel.com> |
| |
| commit 908764f6d0bd1ba496cb8da33b9b98297ed27351 upstream. |
| |
| For LSPCON initialization during system resume we need AUX |
| functionality, but we call the corresponding encoder reset hook with all |
| interrupts disabled. Without interrupts we'll do a poll-wait for AUX |
| transfer completions, which adds a significant delay if the transfers |
| timeout/need to be retried for some reason. |
| |
| Fix this by enabling interrupts before calling the reset hooks. Note |
| that while this will enable AUX interrupts it will keep HPD interrupts |
| disabled, in a similar way to the init time output setup code. |
| |
| This issue existed since LSPCON support was added. |
| |
| v2: |
| - Rebased on drm-tip. |
| |
| Cc: Shashank Sharma <shashank.sharma@intel.com> |
| Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Tested-by: David Weinehall <david.weinehall@linux.intel.com> |
| Link: http://patchwork.freedesktop.org/patch/msgid/1480448429-27739-1-git-send-email-imre.deak@intel.com |
| (rebased onto v4.10.4 due to missing s/dev/dev_priv/ upstream change) |
| (corrected stable tag) |
| Signed-off-by: Imre Deak <imre.deak@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/gpu/drm/i915/i915_drv.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/gpu/drm/i915/i915_drv.c |
| +++ b/drivers/gpu/drm/i915/i915_drv.c |
| @@ -1573,18 +1573,21 @@ static int i915_drm_resume(struct drm_de |
| intel_opregion_setup(dev_priv); |
| |
| intel_init_pch_refclk(dev); |
| - drm_mode_config_reset(dev); |
| |
| /* |
| * Interrupts have to be enabled before any batches are run. If not the |
| * GPU will hang. i915_gem_init_hw() will initiate batches to |
| * update/restore the context. |
| * |
| + * drm_mode_config_reset() needs AUX interrupts. |
| + * |
| * Modeset enabling in intel_modeset_init_hw() also needs working |
| * interrupts. |
| */ |
| intel_runtime_pm_enable_interrupts(dev_priv); |
| |
| + drm_mode_config_reset(dev); |
| + |
| mutex_lock(&dev->struct_mutex); |
| if (i915_gem_init_hw(dev)) { |
| DRM_ERROR("failed to re-initialize GPU, declaring wedged!\n"); |