disp: msm: sde: allow qsync support along with VRR

Allow Qsync and VRR features to be supported independently
by display driver. Restrict the feature availability in
same composition cycle.

Change-Id: I696eb72a2b4f9451e142ffdc5acccc8987c36b6d
Signed-off-by: Kalyan Thota <kalyant@codeaurora.org>
Signed-off-by: Jayaprakash <jmadiset@codeaurora.org>
Šī revīzija ir iekļauta:
Jayaprakash
2019-09-24 18:33:20 +05:30
vecāks 4fbdc64598
revīzija ad40a300a1
5 mainīti faili ar 70 papildinājumiem un 16 dzēšanām

Parādīt failu

@@ -621,17 +621,24 @@ void sde_connector_set_colorspace(struct sde_connector *c_conn)
void sde_connector_set_qsync_params(struct drm_connector *connector)
{
struct sde_connector *c_conn = to_sde_connector(connector);
u32 qsync_propval;
struct sde_connector *c_conn;
struct sde_connector_state *c_state;
u32 qsync_propval = 0;
bool prop_dirty;
if (!connector)
return;
c_conn = to_sde_connector(connector);
c_state = to_sde_connector_state(connector->state);
c_conn->qsync_updated = false;
qsync_propval = sde_connector_get_property(c_conn->base.state,
CONNECTOR_PROP_QSYNC_MODE);
if (qsync_propval != c_conn->qsync_mode) {
prop_dirty = msm_property_is_dirty(&c_conn->property_info,
&c_state->property_state,
CONNECTOR_PROP_QSYNC_MODE);
if (prop_dirty) {
qsync_propval = sde_connector_get_property(c_conn->base.state,
CONNECTOR_PROP_QSYNC_MODE);
SDE_DEBUG("updated qsync mode %d -> %d\n", c_conn->qsync_mode,
qsync_propval);
c_conn->qsync_updated = true;
@@ -1376,6 +1383,10 @@ static int sde_connector_atomic_set_property(struct drm_connector *connector,
if (rc)
SDE_ERROR_CONN(c_conn, "cannot set hdr info %d\n", rc);
break;
case CONNECTOR_PROP_QSYNC_MODE:
msm_property_set_dirty(&c_conn->property_info,
&c_state->property_state, idx);
break;
default:
break;
}
@@ -2027,13 +2038,33 @@ 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");
return 0;
return -EINVAL;
}
if (!new_conn_state) {
SDE_ERROR("invalid connector state\n");
return -EINVAL;
}
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,