mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 23:24:22 -04:00
Merge "disp: msm: sde: move qsync validation to encoder atomic check"
This commit is contained in:
commit
e2bd8f1a9b
2 changed files with 14 additions and 30 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue