Merge "disp: msm: sde: adjust the vblank refcount until the completion of poms"

This commit is contained in:
qctecmdr
2023-07-22 20:48:21 -07:00
committed by Gerrit - the friendly Code Review server

View File

@@ -3271,6 +3271,10 @@ static void sde_encoder_virt_enable(struct drm_encoder *drm_enc)
return;
}
if (sde_encoder_is_built_in_display(drm_enc) &&
msm_is_mode_seamless_poms(&c_state->msm_mode))
drm_crtc_vblank_put(sde_enc->crtc);
memset(&sde_enc->cur_master->intf_cfg_v1, 0,
sizeof(sde_enc->cur_master->intf_cfg_v1));
@@ -3359,6 +3363,7 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
struct sde_encoder_virt *sde_enc = NULL;
struct sde_connector *sde_conn;
struct sde_kms *sde_kms;
struct sde_connector_state *c_state = NULL;
enum sde_intf_mode intf_mode;
int ret, i = 0;
@@ -3390,6 +3395,12 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
if (!sde_kms)
return;
c_state = to_sde_connector_state(sde_enc->cur_master->connector->state);
if (!c_state) {
SDE_ERROR("invalid connector state\n");
return;
}
intf_mode = sde_encoder_get_intf_mode(drm_enc);
SDE_EVT32(DRMID(drm_enc));
@@ -3412,6 +3423,10 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
_sde_encoder_input_handler_unregister(drm_enc);
flush_delayed_work(&sde_conn->status_work);
if (sde_encoder_is_built_in_display(drm_enc) &&
msm_is_mode_seamless_poms(&c_state->msm_mode))
drm_crtc_vblank_get(sde_enc->crtc);
/*
* For primary command mode and video mode encoders, execute the
* resource control pre-stop operations before the physical encoders
@@ -3447,7 +3462,8 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
* wait for any pending vsync timestamp event to sf
* to ensure vbalnk irq is disabled.
*/
if (sde_enc->vblank_enabled)
if (sde_enc->vblank_enabled &&
!msm_is_mode_seamless_poms(&c_state->msm_mode))
sde_encoder_wait_for_vsync_event_complete(sde_enc);
/*