diff options
author | Maarten Lankhorst | 2016-02-09 13:02:17 +0100 |
---|---|---|
committer | Maarten Lankhorst | 2016-02-15 15:46:12 +0100 |
commit | fb1a38a92ba8ed98f754aeaf9aa9ea5ea3323a23 (patch) | |
tree | 3d47f775c237ac96fa2076fec6ad08cdc2594eea /drivers/gpu/drm/i915/intel_display.c | |
parent | Revert "drm/i915: fix context/engine cleanup order" (diff) | |
download | kernel-qcow2-linux-fb1a38a92ba8ed98f754aeaf9aa9ea5ea3323a23.tar.gz kernel-qcow2-linux-fb1a38a92ba8ed98f754aeaf9aa9ea5ea3323a23.tar.xz kernel-qcow2-linux-fb1a38a92ba8ed98f754aeaf9aa9ea5ea3323a23.zip |
drm/i915: Clear shared dpll based on old state, v2.
Atomic resume was preserving the dpll state because it was required
for clearing pll state correctly. If we look at the old_crtc_state
for pll to clear this is not needed and the hack can be removed.
Changes since v1:
- Rename dpll variable to old_dpll. (Ville)
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1455022343-15222-1-git-send-email-maarten.lankhorst@linux.intel.com
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 836bbdc239b6..a18bd1296ce8 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -13098,8 +13098,6 @@ static void intel_modeset_clear_plls(struct drm_atomic_state *state) struct drm_device *dev = state->dev; struct drm_i915_private *dev_priv = to_i915(dev); struct intel_shared_dpll_config *shared_dpll = NULL; - struct intel_crtc *intel_crtc; - struct intel_crtc_state *intel_crtc_state; struct drm_crtc *crtc; struct drm_crtc_state *crtc_state; int i; @@ -13108,21 +13106,21 @@ static void intel_modeset_clear_plls(struct drm_atomic_state *state) return; for_each_crtc_in_state(state, crtc, crtc_state, i) { - int dpll; - - intel_crtc = to_intel_crtc(crtc); - intel_crtc_state = to_intel_crtc_state(crtc_state); - dpll = intel_crtc_state->shared_dpll; + struct intel_crtc *intel_crtc = to_intel_crtc(crtc); + int old_dpll = to_intel_crtc_state(crtc->state)->shared_dpll; - if (!needs_modeset(crtc_state) || dpll == DPLL_ID_PRIVATE) + if (!needs_modeset(crtc_state)) continue; - intel_crtc_state->shared_dpll = DPLL_ID_PRIVATE; + to_intel_crtc_state(crtc_state)->shared_dpll = DPLL_ID_PRIVATE; + + if (old_dpll == DPLL_ID_PRIVATE) + continue; if (!shared_dpll) shared_dpll = intel_atomic_get_shared_dpll_state(state); - shared_dpll[dpll].crtc_mask &= ~(1 << intel_crtc->pipe); + shared_dpll[old_dpll].crtc_mask &= ~(1 << intel_crtc->pipe); } } @@ -15927,9 +15925,6 @@ void intel_display_resume(struct drm_device *dev) state->acquire_ctx = dev->mode_config.acquire_ctx; - /* preserve complete old state, including dpll */ - intel_atomic_get_shared_dpll_state(state); - for_each_crtc(dev, crtc) { struct drm_crtc_state *crtc_state = drm_atomic_get_crtc_state(state, crtc); |