disp: msm: sde: handle cont-splash & check only rm reserve
On the first commit, cont splash flag is still enabled on encoder, but connector is not yet attached. When a check-only rm reservation is made, it does not get released due to cont-splash check. If cont-splash is enabled, rm should not check for connector, but directly release rsvp_nxt. Change-Id: I79be3c1bb20b74ce4a95786c90f3accfb587d7f2 Signed-off-by: Nilaan Gunabalachandran <ngunabal@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
e90235e1b3
commit
ce0fef975e
@@ -3313,7 +3313,7 @@ static void sde_crtc_destroy_state(struct drm_crtc *crtc,
|
|||||||
|
|
||||||
SDE_DEBUG("crtc%d\n", crtc->base.id);
|
SDE_DEBUG("crtc%d\n", crtc->base.id);
|
||||||
|
|
||||||
if (sde_kms && enc && !sde_encoder_in_cont_splash(enc))
|
if (sde_kms && enc)
|
||||||
sde_rm_release(&sde_kms->rm, enc, true);
|
sde_rm_release(&sde_kms->rm, enc, true);
|
||||||
|
|
||||||
__drm_atomic_helper_crtc_destroy_state(state);
|
__drm_atomic_helper_crtc_destroy_state(state);
|
||||||
|
@@ -1699,6 +1699,8 @@ void sde_rm_release(struct sde_rm *rm, struct drm_encoder *enc, bool nxt)
|
|||||||
{
|
{
|
||||||
struct sde_rm_rsvp *rsvp;
|
struct sde_rm_rsvp *rsvp;
|
||||||
struct drm_connector *conn;
|
struct drm_connector *conn;
|
||||||
|
struct msm_drm_private *priv;
|
||||||
|
struct sde_kms *sde_kms;
|
||||||
uint64_t top_ctrl;
|
uint64_t top_ctrl;
|
||||||
|
|
||||||
if (!rm || !enc) {
|
if (!rm || !enc) {
|
||||||
@@ -1706,6 +1708,13 @@ void sde_rm_release(struct sde_rm *rm, struct drm_encoder *enc, bool nxt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
priv = enc->dev->dev_private;
|
||||||
|
if (!priv->kms) {
|
||||||
|
SDE_ERROR("invalid kms\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sde_kms = to_sde_kms(priv->kms);
|
||||||
|
|
||||||
mutex_lock(&rm->rm_lock);
|
mutex_lock(&rm->rm_lock);
|
||||||
|
|
||||||
if (nxt)
|
if (nxt)
|
||||||
@@ -1718,6 +1727,11 @@ void sde_rm_release(struct sde_rm *rm, struct drm_encoder *enc, bool nxt)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_sde_rm_is_display_in_cont_splash(sde_kms, enc)) {
|
||||||
|
_sde_rm_release_rsvp(rm, rsvp, conn);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
conn = _sde_rm_get_connector(enc);
|
conn = _sde_rm_get_connector(enc);
|
||||||
if (!conn) {
|
if (!conn) {
|
||||||
SDE_ERROR("failed to get connector for enc %d, nxt %d",
|
SDE_ERROR("failed to get connector for enc %d, nxt %d",
|
||||||
|
Reference in New Issue
Block a user