disp: msm: sde: add changes to fix get connector failure in rm_release

Currently during rm_release, drm_conn is available only if connector
and encoder are bound together. If a test_only commit occurs
before a non-blocking modeset commit, this bound is uncertain.
The resources allocated by test_only commit will not be released
and leads to resource allocation failures for the consequent
commits. Add changes to modify this by checking for the encoder
attached to sde_connector which happens during bootup.

Change-Id: Icb1d9595efda8a104ba527175b2dbc6a2c856d44
Signed-off-by: Jayaprakash <jmadiset@codeaurora.org>
This commit is contained in:
Jayaprakash
2020-01-03 15:58:01 +05:30
committed by santosh
parent fae3dc03b4
commit bada02f317

View File

@@ -2074,11 +2074,13 @@ static struct drm_connector *_sde_rm_get_connector(
struct drm_encoder *enc) struct drm_encoder *enc)
{ {
struct drm_connector *conn = NULL, *conn_search; struct drm_connector *conn = NULL, *conn_search;
struct sde_connector *c_conn = NULL;
struct drm_connector_list_iter conn_iter; struct drm_connector_list_iter conn_iter;
drm_connector_list_iter_begin(enc->dev, &conn_iter); drm_connector_list_iter_begin(enc->dev, &conn_iter);
drm_for_each_connector_iter(conn_search, &conn_iter) { drm_for_each_connector_iter(conn_search, &conn_iter) {
if (conn_search->encoder == enc) { c_conn = to_sde_connector(conn_search);
if (c_conn->encoder == enc) {
conn = conn_search; conn = conn_search;
break; break;
} }
@@ -2229,10 +2231,10 @@ void sde_rm_release(struct sde_rm *rm, struct drm_encoder *enc, bool nxt)
conn = _sde_rm_get_connector(enc); conn = _sde_rm_get_connector(enc);
if (!conn) { if (!conn) {
SDE_DEBUG("failed to get connector for enc %d, nxt %d",
enc->base.id, nxt);
SDE_EVT32(enc->base.id, 0x0, 0xffffffff); SDE_EVT32(enc->base.id, 0x0, 0xffffffff);
_sde_rm_release_rsvp(rm, rsvp, conn); _sde_rm_release_rsvp(rm, rsvp, conn);
SDE_DEBUG("failed to get conn for enc %d nxt %d rsvp[s%de%d]\n",
enc->base.id, nxt, rsvp->seq, rsvp->enc_id);
goto end; goto end;
} }