From f7d08feb38630c3a327bb94e5715967d57e0ecf0 Mon Sep 17 00:00:00 2001 From: Jayaprakash Date: Fri, 10 Jan 2020 20:22:40 +0530 Subject: [PATCH] disp: msm: sde: add enc_id check before decrement avail HW resources Add changes to commit and decrement only those hardware resources which are required for the modeset. Timeline of Commit C1 with CWB modeset: ---> Atomic_check Primary encoder has allocated required HW resources. CWB encoder has allocated required HW resources. ---> Atomic_commit On primary encoder, connector is seamless hence there is no virt_modeset call. On CWB encoder, there is virt_mode_set call and during commit HW blocks there is unconditional decrement for all the HW blocks with rsvp_nxt. This change ensures hardware blocks are available during dp display mode validations. Change-Id: Ifd9439cfc96e727c3093af5f47802c8367775cd7 Signed-off-by: Jayaprakash --- msm/sde/sde_encoder.c | 16 ++++++++-------- msm/sde/sde_rm.c | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index e350163fce..39b17cf252 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -5113,14 +5113,6 @@ int sde_encoder_update_caps_for_cont_splash(struct drm_encoder *encoder, return ret; } - ret = sde_rm_reserve(&sde_kms->rm, encoder, encoder->crtc->state, - conn->state, false); - if (ret) { - SDE_ERROR_ENC(sde_enc, - "failed to reserve hw resources, %d\n", ret); - return ret; - } - if (sde_conn->encoder) { conn->state->best_encoder = sde_conn->encoder; SDE_DEBUG_ENC(sde_enc, @@ -5131,6 +5123,14 @@ int sde_encoder_update_caps_for_cont_splash(struct drm_encoder *encoder, conn->base.id); } + ret = sde_rm_reserve(&sde_kms->rm, encoder, encoder->crtc->state, + conn->state, false); + if (ret) { + SDE_ERROR_ENC(sde_enc, + "failed to reserve hw resources, %d\n", ret); + return ret; + } + SDE_DEBUG_ENC(sde_enc, "connector topology = %llu\n", sde_connector_get_topology_name(conn)); drm_mode = &encoder->crtc->state->adjusted_mode; diff --git a/msm/sde/sde_rm.c b/msm/sde/sde_rm.c index 00bb0989cf..e629be3947 100644 --- a/msm/sde/sde_rm.c +++ b/msm/sde/sde_rm.c @@ -2166,7 +2166,8 @@ static int _sde_rm_commit_rsvp( /* Swap next rsvp to be the active */ for (type = 0; type < SDE_HW_BLK_MAX; type++) { list_for_each_entry(blk, &rm->hw_blks[type], list) { - if (blk->rsvp_nxt) { + if (blk->rsvp_nxt && conn_state->best_encoder->base.id + == blk->rsvp_nxt->enc_id) { blk->rsvp = blk->rsvp_nxt; blk->rsvp_nxt = NULL; _sde_rm_dec_resource_info(rm,