disp: msm: sde: dynamic lm reservation for secondary disp

Primary and secondary displays should have first priority
when reserving lms. Static reservation can potentially block
higher resolutions for the required displays. This patch gets
the layer mixer requirement for primary or secondary display
if available. It reserves those layer mixers dynamically
for the respective display when connector is registered.

Change-Id: Id69dac4c72d6b20008049f4aeb71c0f97d0a426b
Signed-off-by: Nilaan Gunabalachandran <ngunabal@codeaurora.org>
此提交包含在:
Nilaan Gunabalachandran
2019-05-02 12:06:25 -04:00
提交者 Gerrit - the friendly Code Review server
父節點 06f8bcc142
當前提交 52855c704a
共有 10 個檔案被更改,包括 100 行新增45 行删除

查看文件

@@ -796,7 +796,8 @@ static bool _sde_rm_check_lm_and_get_connected_blks(
*dspp = NULL;
*ds = NULL;
*pp = NULL;
display_pref = lm_cfg->features & BIT(SDE_DISP_PRIMARY_PREF);
display_pref = lm_cfg->features & BIT(SDE_DISP_PRIMARY_PREF) ||
lm_cfg->features & BIT(SDE_DISP_SECONDARY_PREF);
cwb_pref = lm_cfg->features & BIT(SDE_DISP_CWB_PREF);
SDE_DEBUG("check lm %d: dspp %d ds %d pp %d disp_pref: %d cwb_pref%d\n",
@@ -831,10 +832,10 @@ static bool _sde_rm_check_lm_and_get_connected_blks(
SDE_DEBUG("fail: cwb supported lm not allocated\n");
return false;
}
} else if (!(reqs->hw_res.is_primary && display_pref)) {
} else if (!(reqs->hw_res.display_type && display_pref)) {
SDE_DEBUG(
"display preference is not met. is_primary: %d display_pref: %d\n",
(int)reqs->hw_res.is_primary, (int)display_pref);
"display preference is not met. display_type: %d display_pref: %d\n",
(int)reqs->hw_res.display_type, (int)display_pref);
return false;
}
@@ -1022,11 +1023,11 @@ static int _sde_rm_reserve_ctls(
if (top->top_name == SDE_RM_TOPOLOGY_PPSPLIT &&
!has_ppsplit)
continue;
} else if (!(reqs->hw_res.is_primary && primary_pref) &&
!_ctl_ids) {
} else if (!(reqs->hw_res.display_type ==
SDE_CONNECTOR_PRIMARY && primary_pref) && !_ctl_ids) {
SDE_DEBUG(
"display pref not met. is_primary: %d primary_pref: %d\n",
reqs->hw_res.is_primary, primary_pref);
"display pref not met. display_type: %d primary_pref: %d\n",
reqs->hw_res.display_type, primary_pref);
continue;
}