[PATCH 2/2] drm/i915: Only check pipe state for fast modeset when it's possible.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A fast modeset can only be performed when connectors and active are
not changed. This prevents a lot of KMS spam when going from a NULL
mode with 0 connectors to an actual mode.

When a crtc is inactive there's no need to evade either, the changes
can be applied when the crtc turns on again.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>
---
 drivers/gpu/drm/i915/intel_display.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index deb76c84a307..eddc81c2d459 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -12281,7 +12281,7 @@ intel_compare_link_m_n(const struct intel_link_m_n *m_n,
 
 static bool
 intel_pipe_config_compare(struct drm_device *dev,
-			  struct intel_crtc_state *current_config,
+			  const struct intel_crtc_state *current_config,
 			  struct intel_crtc_state *pipe_config,
 			  bool adjust)
 {
@@ -13013,14 +13013,15 @@ static int intel_atomic_check(struct drm_device *dev,
 		if (ret)
 			return ret;
 
-		if (intel_pipe_config_compare(state->dev,
-					to_intel_crtc_state(crtc->state),
-					pipe_config, true)) {
+		if (!crtc_state->connectors_changed &&
+		    !crtc_state->active_changed &&
+		    crtc_state->active &&
+		    intel_pipe_config_compare(state->dev,
+					      to_intel_crtc_state(crtc->state),
+					      pipe_config, true)) {
 			crtc_state->mode_changed = false;
-			to_intel_crtc_state(crtc_state)->update_pipe = true;
-		}
-
-		if (needs_modeset(crtc_state)) {
+			pipe_config->update_pipe = true;
+		} else {
 			any_ms = true;
 
 			ret = drm_atomic_add_affected_planes(state, crtc);
@@ -13029,8 +13030,8 @@ static int intel_atomic_check(struct drm_device *dev,
 		}
 
 		intel_dump_pipe_config(to_intel_crtc(crtc), pipe_config,
-				       needs_modeset(crtc_state) ?
-				       "[modeset]" : "[fastset]");
+				       pipe_config->update_pipe ?
+				       "[fastset]" : "[modeset]");
 	}
 
 	if (any_ms) {
-- 
2.1.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux