disp: msm: sde: set connector lm_mask for dp display
This change sets lm_mask for dp connector based on number of LMs allocated by RM. This mask will be used during rm allocation and validation of dcwb mixers for dp display. Change-Id: I271af03da560587faf17446471bd6b81bb9e809b Signed-off-by: Mahadevan <quic_mahap@quicinc.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
* Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -419,6 +420,11 @@ int dp_connector_get_mode_info(struct drm_connector *connector,
|
|||||||
DP_ERR("error getting mixer count. rc:%d\n", rc);
|
DP_ERR("error getting mixer count. rc:%d\n", rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
/* reset dp connector lm_mask for every connection event and
|
||||||
|
* this will get re-populated in resource manager based on
|
||||||
|
* resolution and topology of dp display.
|
||||||
|
*/
|
||||||
|
sde_conn->lm_mask = 0;
|
||||||
|
|
||||||
topology->num_enc = no_enc;
|
topology->num_enc = no_enc;
|
||||||
topology->num_intf = single_intf;
|
topology->num_intf = single_intf;
|
||||||
|
@@ -1215,7 +1215,7 @@ static bool _sde_rm_check_lm_and_get_connected_blks(
|
|||||||
} else if (!RM_RQ_DCWB(reqs) && dcwb_pref) {
|
} else if (!RM_RQ_DCWB(reqs) && dcwb_pref) {
|
||||||
SDE_DEBUG("fail: dcwb supported dummy lm incorrectly allocated\n");
|
SDE_DEBUG("fail: dcwb supported dummy lm incorrectly allocated\n");
|
||||||
return false;
|
return false;
|
||||||
} else if (RM_RQ_DCWB(reqs) && dcwb_pref &&
|
} else if (RM_RQ_DCWB(reqs) && dcwb_pref && conn_lm_mask &&
|
||||||
((ffs(conn_lm_mask) % 2) == ((lm_cfg->id + 1) % 2))) {
|
((ffs(conn_lm_mask) % 2) == ((lm_cfg->id + 1) % 2))) {
|
||||||
SDE_DEBUG("fail: dcwb:%d trying to match lm:%d\n",
|
SDE_DEBUG("fail: dcwb:%d trying to match lm:%d\n",
|
||||||
lm_cfg->id, ffs(conn_lm_mask));
|
lm_cfg->id, ffs(conn_lm_mask));
|
||||||
@@ -2685,6 +2685,35 @@ static void _sde_rm_commit_rsvp(struct sde_rm *rm, struct sde_rm_rsvp *rsvp,
|
|||||||
SDE_EVT32(rsvp->enc_id, rsvp->topology);
|
SDE_EVT32(rsvp->enc_id, rsvp->topology);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _sde_rm_populate_dp_lm_mask(struct sde_rm *rm,
|
||||||
|
struct drm_connector *conn)
|
||||||
|
{
|
||||||
|
struct sde_connector *c_conn = NULL;
|
||||||
|
struct sde_rm_hw_blk *blk;
|
||||||
|
|
||||||
|
if (!rm || !conn) {
|
||||||
|
SDE_ERROR("invalid arguments\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (conn->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
|
||||||
|
return;
|
||||||
|
|
||||||
|
c_conn = to_sde_connector(conn);
|
||||||
|
if (!c_conn || !c_conn->encoder)
|
||||||
|
return;
|
||||||
|
|
||||||
|
list_for_each_entry(blk, &rm->hw_blks[SDE_HW_BLK_LM], list) {
|
||||||
|
if (!blk->rsvp)
|
||||||
|
continue;
|
||||||
|
if (blk->rsvp->enc_id == c_conn->encoder->base.id)
|
||||||
|
c_conn->lm_mask |= BIT(blk->id - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDE_DEBUG("conn lm_mask %d for conn %d enc %d\n", c_conn->lm_mask,
|
||||||
|
conn->base.id, c_conn->encoder->base.id);
|
||||||
|
SDE_EVT32(c_conn->encoder->base.id, conn->base.id, c_conn->lm_mask);
|
||||||
|
}
|
||||||
|
|
||||||
/* call this only after rm_mutex held */
|
/* call this only after rm_mutex held */
|
||||||
struct sde_rm_rsvp *_sde_rm_poll_get_rsvp_nxt_locked(struct sde_rm *rm,
|
struct sde_rm_rsvp *_sde_rm_poll_get_rsvp_nxt_locked(struct sde_rm *rm,
|
||||||
struct drm_encoder *enc)
|
struct drm_encoder *enc)
|
||||||
@@ -2851,6 +2880,7 @@ int sde_rm_reserve(
|
|||||||
commit_rsvp:
|
commit_rsvp:
|
||||||
_sde_rm_release_rsvp(rm, rsvp_cur, conn_state->connector);
|
_sde_rm_release_rsvp(rm, rsvp_cur, conn_state->connector);
|
||||||
_sde_rm_commit_rsvp(rm, rsvp_nxt, conn_state);
|
_sde_rm_commit_rsvp(rm, rsvp_nxt, conn_state);
|
||||||
|
_sde_rm_populate_dp_lm_mask(rm, conn_state->connector);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
kfree(comp_info);
|
kfree(comp_info);
|
||||||
|
Reference in New Issue
Block a user