aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorImre Deak <imre.deak@intel.com>2016-06-28 06:37:32 -0400
committerJani Nikula <jani.nikula@intel.com>2016-06-29 04:18:04 -0400
commitfa7c13e5b1e2076b0ec716ed584ab76f9e65b7a6 (patch)
treec091a063780a5c3ba38505ee36373bca00b2b1e2
parent11f6145791775ce41b8993fd29e19eb53ef0ff14 (diff)
drm/i915/hsw: Avoid early timeout during LCPLL disable/restore
Since wait_for_atomic doesn't re-check the wait-for condition after expiry of the timeout it can fail when called from non-atomic context even if the condition is set correctly before the expiry. Fix this by using the non-atomic wait_for instead. Fixes: 0351b93992aa ("drm/i915: Do not lie about atomic timeout granularity") CC: Chris Wilson <chris@chris-wilson.co.uk> CC: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> CC: drm-intel-fixes@lists.freedesktop.org Link: http://patchwork.freedesktop.org/patch/msgid/1467110253-16046-4-git-send-email-imre.deak@intel.com (cherry picked from commit f53dd63f1119a98a16d1a5a7cb3277a2f1ff483d) Signed-off-by: Jani Nikula <jani.nikula@intel.com>
-rw-r--r--drivers/gpu/drm/i915/intel_display.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index a164ea44f668..04452cf3eae8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9440,8 +9440,8 @@ static void hsw_disable_lcpll(struct drm_i915_private *dev_priv,
9440 val |= LCPLL_CD_SOURCE_FCLK; 9440 val |= LCPLL_CD_SOURCE_FCLK;
9441 I915_WRITE(LCPLL_CTL, val); 9441 I915_WRITE(LCPLL_CTL, val);
9442 9442
9443 if (wait_for_atomic_us(I915_READ(LCPLL_CTL) & 9443 if (wait_for_us(I915_READ(LCPLL_CTL) &
9444 LCPLL_CD_SOURCE_FCLK_DONE, 1)) 9444 LCPLL_CD_SOURCE_FCLK_DONE, 1))
9445 DRM_ERROR("Switching to FCLK failed\n"); 9445 DRM_ERROR("Switching to FCLK failed\n");
9446 9446
9447 val = I915_READ(LCPLL_CTL); 9447 val = I915_READ(LCPLL_CTL);
@@ -9514,8 +9514,8 @@ static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
9514 val &= ~LCPLL_CD_SOURCE_FCLK; 9514 val &= ~LCPLL_CD_SOURCE_FCLK;
9515 I915_WRITE(LCPLL_CTL, val); 9515 I915_WRITE(LCPLL_CTL, val);
9516 9516
9517 if (wait_for_atomic_us((I915_READ(LCPLL_CTL) & 9517 if (wait_for_us((I915_READ(LCPLL_CTL) &
9518 LCPLL_CD_SOURCE_FCLK_DONE) == 0, 1)) 9518 LCPLL_CD_SOURCE_FCLK_DONE) == 0, 1))
9519 DRM_ERROR("Switching back to LCPLL failed\n"); 9519 DRM_ERROR("Switching back to LCPLL failed\n");
9520 } 9520 }
9521 9521