diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index b69440cf41ea..75105a2c59ea 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -12005,9 +12005,6 @@ intel_compare_link_m_n(const struct intel_link_m_n *m_n, | |||
| 12005 | m2_n2->gmch_m, m2_n2->gmch_n, !adjust) && | 12005 | m2_n2->gmch_m, m2_n2->gmch_n, !adjust) && |
| 12006 | intel_compare_m_n(m_n->link_m, m_n->link_n, | 12006 | intel_compare_m_n(m_n->link_m, m_n->link_n, |
| 12007 | m2_n2->link_m, m2_n2->link_n, !adjust)) { | 12007 | m2_n2->link_m, m2_n2->link_n, !adjust)) { |
| 12008 | if (adjust) | ||
| 12009 | *m2_n2 = *m_n; | ||
| 12010 | |||
| 12011 | return true; | 12008 | return true; |
| 12012 | } | 12009 | } |
| 12013 | 12010 | ||
| @@ -13149,6 +13146,33 @@ static int calc_watermark_data(struct intel_atomic_state *state) | |||
| 13149 | return 0; | 13146 | return 0; |
| 13150 | } | 13147 | } |
| 13151 | 13148 | ||
| 13149 | static void intel_crtc_check_fastset(struct intel_crtc_state *old_crtc_state, | ||
| 13150 | struct intel_crtc_state *new_crtc_state) | ||
| 13151 | { | ||
| 13152 | struct drm_i915_private *dev_priv = | ||
| 13153 | to_i915(new_crtc_state->base.crtc->dev); | ||
| 13154 | |||
| 13155 | if (!intel_pipe_config_compare(dev_priv, old_crtc_state, | ||
| 13156 | new_crtc_state, true)) | ||
| 13157 | return; | ||
| 13158 | |||
| 13159 | new_crtc_state->base.mode_changed = false; | ||
| 13160 | new_crtc_state->update_pipe = true; | ||
| 13161 | |||
| 13162 | /* | ||
| 13163 | * If we're not doing the full modeset we want to | ||
| 13164 | * keep the current M/N values as they may be | ||
| 13165 | * sufficiently different to the computed values | ||
| 13166 | * to cause problems. | ||
| 13167 | * | ||
| 13168 | * FIXME: should really copy more fuzzy state here | ||
| 13169 | */ | ||
| 13170 | new_crtc_state->fdi_m_n = old_crtc_state->fdi_m_n; | ||
| 13171 | new_crtc_state->dp_m_n = old_crtc_state->dp_m_n; | ||
| 13172 | new_crtc_state->dp_m2_n2 = old_crtc_state->dp_m2_n2; | ||
| 13173 | new_crtc_state->has_drrs = old_crtc_state->has_drrs; | ||
| 13174 | } | ||
| 13175 | |||
| 13152 | /** | 13176 | /** |
| 13153 | * intel_atomic_check - validate state object | 13177 | * intel_atomic_check - validate state object |
| 13154 | * @dev: drm device | 13178 | * @dev: drm device |
| @@ -13197,12 +13221,8 @@ static int intel_atomic_check(struct drm_device *dev, | |||
| 13197 | return ret; | 13221 | return ret; |
| 13198 | } | 13222 | } |
| 13199 | 13223 | ||
| 13200 | if (intel_pipe_config_compare(dev_priv, | 13224 | intel_crtc_check_fastset(to_intel_crtc_state(old_crtc_state), |
| 13201 | to_intel_crtc_state(old_crtc_state), | 13225 | pipe_config); |
| 13202 | pipe_config, true)) { | ||
| 13203 | crtc_state->mode_changed = false; | ||
| 13204 | pipe_config->update_pipe = true; | ||
| 13205 | } | ||
| 13206 | 13226 | ||
| 13207 | if (needs_modeset(crtc_state)) | 13227 | if (needs_modeset(crtc_state)) |
| 13208 | any_ms = true; | 13228 | any_ms = true; |
