disp: msm: sde: defer reset of topology property in disable path
Resetting connector topology property in atomic check phase can cause issues in concurrency scenario of idle-pc restore for encoder disable commit. Defer resetting topology property for disable case until encoder disable actually happens. Change-Id: Ib53fb5e63df0ab6a332e981b182771b87ef77838 Signed-off-by: Prabhanjan Kandula <pkandula@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
b0ea2d882f
commit
f4923f071d
@@ -970,15 +970,15 @@ static int _sde_encoder_atomic_check_reserve(struct drm_encoder *drm_enc,
|
|||||||
* resource set validated. Reset the topology if we are
|
* resource set validated. Reset the topology if we are
|
||||||
* de-activating crtc.
|
* de-activating crtc.
|
||||||
*/
|
*/
|
||||||
if (crtc_state->active)
|
if (crtc_state->active) {
|
||||||
topology = &sde_conn_state->mode_info.topology;
|
topology = &sde_conn_state->mode_info.topology;
|
||||||
|
ret = sde_rm_update_topology(&sde_kms->rm,
|
||||||
ret = sde_rm_update_topology(&sde_kms->rm,
|
conn_state, topology);
|
||||||
conn_state, topology);
|
if (ret) {
|
||||||
if (ret) {
|
SDE_ERROR_ENC(sde_enc,
|
||||||
SDE_ERROR_ENC(sde_enc,
|
"RM failed to update topology, rc: %d\n", ret);
|
||||||
"RM failed to update topology, rc: %d\n", ret);
|
return ret;
|
||||||
return ret;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = sde_connector_set_blob_data(conn_state->connector,
|
ret = sde_connector_set_blob_data(conn_state->connector,
|
||||||
@@ -3020,7 +3020,7 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
|
|||||||
struct sde_encoder_virt *sde_enc = NULL;
|
struct sde_encoder_virt *sde_enc = NULL;
|
||||||
struct sde_kms *sde_kms;
|
struct sde_kms *sde_kms;
|
||||||
enum sde_intf_mode intf_mode;
|
enum sde_intf_mode intf_mode;
|
||||||
int i = 0;
|
int ret, i = 0;
|
||||||
|
|
||||||
if (!drm_enc) {
|
if (!drm_enc) {
|
||||||
SDE_ERROR("invalid encoder\n");
|
SDE_ERROR("invalid encoder\n");
|
||||||
@@ -3095,6 +3095,16 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)
|
|||||||
|
|
||||||
sde_encoder_resource_control(drm_enc, SDE_ENC_RC_EVENT_STOP);
|
sde_encoder_resource_control(drm_enc, SDE_ENC_RC_EVENT_STOP);
|
||||||
|
|
||||||
|
/* reset connector topology name property */
|
||||||
|
if (sde_enc->cur_master && sde_enc->cur_master->connector) {
|
||||||
|
ret = sde_rm_update_topology(&sde_kms->rm,
|
||||||
|
sde_enc->cur_master->connector->state, NULL);
|
||||||
|
if (ret) {
|
||||||
|
SDE_ERROR_ENC(sde_enc, "RM failed to update topology, rc: %d\n", ret);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!sde_encoder_in_clone_mode(drm_enc))
|
if (!sde_encoder_in_clone_mode(drm_enc))
|
||||||
sde_encoder_virt_reset(drm_enc);
|
sde_encoder_virt_reset(drm_enc);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user