ソースを参照

Merge "disp: msm: sde: move qsync validation to encoder atomic check"

qctecmdr 4 年 前
コミット
e2bd8f1a9b
2 ファイル変更14 行追加30 行削除
  1. 0 30
      msm/sde/sde_connector.c
  2. 14 0
      msm/sde/sde_encoder.c

+ 0 - 30
msm/sde/sde_connector.c

@@ -2364,10 +2364,6 @@ static int sde_connector_atomic_check(struct drm_connector *connector,
 		struct drm_atomic_state *state)
 {
 	struct sde_connector *c_conn;
-	struct sde_connector_state *c_state;
-	bool qsync_dirty = false, has_modeset = false;
-	struct drm_connector_state *new_conn_state;
-	struct drm_crtc_state *new_crtc_state = NULL;
 
 	if (!connector) {
 		SDE_ERROR("invalid connector\n");
@@ -2375,32 +2371,6 @@ static int sde_connector_atomic_check(struct drm_connector *connector,
 	}
 
 	c_conn = to_sde_connector(connector);
-	new_conn_state = drm_atomic_get_new_connector_state(state, connector);
-
-	if (!new_conn_state) {
-		SDE_ERROR("invalid connector state\n");
-		return -EINVAL;
-	}
-
-	c_state = to_sde_connector_state(new_conn_state);
-	if (new_conn_state->crtc)
-		new_crtc_state = drm_atomic_get_new_crtc_state(state,
-					new_conn_state->crtc);
-
-	has_modeset = sde_crtc_atomic_check_has_modeset(new_conn_state->state,
-						new_conn_state->crtc);
-	qsync_dirty = msm_property_is_dirty(&c_conn->property_info,
-					&c_state->property_state,
-					CONNECTOR_PROP_QSYNC_MODE);
-
-	SDE_DEBUG("has_modeset %d qsync_dirty %d\n", has_modeset, qsync_dirty);
-	if (has_modeset && qsync_dirty && new_crtc_state &&
-		!msm_is_mode_seamless_vrr(&new_crtc_state->adjusted_mode)) {
-		SDE_ERROR("invalid qsync update during modeset\n");
-		return -EINVAL;
-	}
-	new_conn_state = drm_atomic_get_new_connector_state(state, connector);
-
 	if (c_conn->ops.atomic_check)
 		return c_conn->ops.atomic_check(connector,
 				c_conn->display, state);

+ 14 - 0
msm/sde/sde_encoder.c

@@ -941,6 +941,7 @@ static int sde_encoder_virt_atomic_check(
 	struct sde_crtc_state *sde_crtc_state = NULL;
 	enum sde_rm_topology_name old_top;
 	int ret = 0;
+	bool qsync_dirty = false, has_modeset = false;
 
 	if (!drm_enc || !crtc_state || !conn_state) {
 		SDE_ERROR("invalid arg(s), drm_enc %d, crtc/conn state %d/%d\n",
@@ -997,6 +998,19 @@ static int sde_encoder_virt_atomic_check(
 	}
 
 	drm_mode_set_crtcinfo(adj_mode, 0);
+
+	has_modeset = sde_crtc_atomic_check_has_modeset(conn_state->state,
+				conn_state->crtc);
+	qsync_dirty = msm_property_is_dirty(&sde_conn->property_info,
+				&sde_conn_state->property_state,
+				CONNECTOR_PROP_QSYNC_MODE);
+
+	if (has_modeset && qsync_dirty &&
+		!msm_is_mode_seamless_vrr(adj_mode)) {
+		SDE_ERROR("invalid qsync update during modeset\n");
+		return -EINVAL;
+	}
+
 	SDE_EVT32(DRMID(drm_enc), adj_mode->flags, adj_mode->private_flags,
 		 old_top, adj_mode->vrefresh, adj_mode->hdisplay,
 		 adj_mode->vdisplay, adj_mode->htotal, adj_mode->vtotal);