diff --git a/msm/sde/sde_connector.c b/msm/sde/sde_connector.c index 9a25008690..22ee4e1fad 100644 --- a/msm/sde/sde_connector.c +++ b/msm/sde/sde_connector.c @@ -57,6 +57,7 @@ static const struct drm_prop_enum_list e_topology_control[] = { {SDE_RM_TOPCTL_DSPP, "dspp"}, {SDE_RM_TOPCTL_DS, "ds"}, {SDE_RM_TOPCTL_DNSC_BLUR, "dnsc_blur"}, + {SDE_RM_TOPCTL_CDM, "cdm"}, }; static const struct drm_prop_enum_list e_power_mode[] = { {SDE_MODE_DPMS_ON, "ON"}, diff --git a/msm/sde/sde_rm.c b/msm/sde/sde_rm.c index fc2e20486b..cbe5d3ea17 100644 --- a/msm/sde/sde_rm.c +++ b/msm/sde/sde_rm.c @@ -37,6 +37,7 @@ #define RM_RQ_CWB(r) ((r)->top_ctrl & BIT(SDE_RM_TOPCTL_CWB)) #define RM_RQ_DCWB(r) ((r)->top_ctrl & BIT(SDE_RM_TOPCTL_DCWB)) #define RM_RQ_DNSC_BLUR(r) ((r)->top_ctrl & BIT(SDE_RM_TOPCTL_DNSC_BLUR)) +#define RM_RQ_CDM(r) ((r)->top_ctrl & BIT(SDE_RM_TOPCTL_CDM)) #define RM_IS_TOPOLOGY_MATCH(t, r) ((t).num_lm == (r).num_lm && \ (t).num_comp_enc == (r).num_enc && \ (t).num_intf == (r).num_intf && \ @@ -1882,8 +1883,11 @@ static int _sde_rm_reserve_intf_or_wb(struct sde_rm *rm, struct sde_rm_rsvp *rsv } /* Expected only one intf or wb will request cdm */ - if (hw_res->needs_cdm) + if (hw_res->needs_cdm || RM_RQ_CDM(reqs)) { ret = _sde_rm_reserve_cdm(rm, rsvp, id, type); + if (ret) + return ret; + } if (RM_RQ_DNSC_BLUR(reqs)) ret = _sde_rm_reserve_dnsc_blur(rm, rsvp, id, type); diff --git a/msm/sde/sde_rm.h b/msm/sde/sde_rm.h index dc39a9550c..7be8816ae4 100644 --- a/msm/sde/sde_rm.h +++ b/msm/sde/sde_rm.h @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. */ @@ -114,6 +115,7 @@ enum sde_rm_topology_group { * @SDE_RM_TOPCTL_CWB : Require layer mixers with CWB capabilities * @SDE_RM_TOPCTL_DCWB : Require layer mixers with DCWB capabilities * @SDE_RM_TOPCTL_DNSC_BLUR : Require writeback with downscale blur capabilities + * @SDE_RM_TOPCTL_CDM : Require writeback with CDM capabilities */ enum sde_rm_topology_control { SDE_RM_TOPCTL_RESERVE_LOCK, @@ -123,6 +125,7 @@ enum sde_rm_topology_control { SDE_RM_TOPCTL_CWB, SDE_RM_TOPCTL_DCWB, SDE_RM_TOPCTL_DNSC_BLUR, + SDE_RM_TOPCTL_CDM, }; /** diff --git a/msm/sde/sde_wb.c b/msm/sde/sde_wb.c index a8f41fe760..27a1537b57 100644 --- a/msm/sde/sde_wb.c +++ b/msm/sde/sde_wb.c @@ -545,6 +545,9 @@ int sde_wb_connector_set_info_blob(struct drm_connector *connector, sde_kms_info_add_keyint(info, "has_cwb_dither", test_bit(SDE_FEATURE_CWB_DITHER, catalog->features)); + if (catalog->cdm_count) + sde_kms_info_add_keyint(info, "cdm_count", catalog->cdm_count); + if (catalog->dnsc_blur_count && catalog->dnsc_blur_filters) { sde_kms_info_add_keyint(info, "dnsc_blur_count", catalog->dnsc_blur_count);