Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5fa7117 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

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

parents 2a706265 04a22411
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -2124,8 +2124,6 @@ static int sde_connector_atomic_check(struct drm_connector *connector,
		struct drm_connector_state *new_conn_state)
{
	struct sde_connector *c_conn;
	struct sde_connector_state *c_state;
	bool qsync_dirty = false, has_modeset = false;

	if (!connector) {
		SDE_ERROR("invalid connector\n");
@@ -2138,19 +2136,6 @@ static int sde_connector_atomic_check(struct drm_connector *connector,
	}

	c_conn = to_sde_connector(connector);
	c_state = to_sde_connector_state(new_conn_state);

	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) {
		SDE_ERROR("invalid qsync update during modeset\n");
		return -EINVAL;
	}

	if (c_conn->ops.atomic_check)
		return c_conn->ops.atomic_check(connector,
+14 −0
Original line number Diff line number Diff line
@@ -1113,6 +1113,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",
@@ -1167,6 +1168,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 during modeset\n");
		return -EINVAL;
	}

	SDE_EVT32(DRMID(drm_enc), adj_mode->flags, adj_mode->private_flags);

	return ret;
+10 −2
Original line number Diff line number Diff line
@@ -1125,13 +1125,21 @@ static void sde_encoder_phys_vid_handle_post_kickoff(
static void sde_encoder_phys_vid_prepare_for_commit(
		struct sde_encoder_phys *phys_enc)
{
	struct drm_crtc *crtc;

	if (!phys_enc) {
	if (!phys_enc  || !phys_enc->parent) {
		SDE_ERROR("invalid encoder parameters\n");
		return;
	}

	if (sde_connector_is_qsync_updated(phys_enc->connector))
	crtc = phys_enc->parent->crtc;
	if (!crtc || !crtc->state) {
		SDE_ERROR("invalid crtc or crtc state\n");
		return;
	}

	if (!msm_is_mode_seamless_vrr(&crtc->state->adjusted_mode) &&
		sde_connector_is_qsync_updated(phys_enc->connector))
		_sde_encoder_phys_vid_avr_ctrl(phys_enc);

}