drm/msm/dpu: don't use merge_3d if DSC merge topology is used
DPU supports different topologies for the case when multiple INTFs are being driven by the single phys_enc. The driver defaults to using 3DMux in such cases. Don't use it if DSC merge is used instead. Suggested-by: Abhinav Kumar <quic_abhinavk@quicinc.com> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Signed-off-by: Vinod Koul <vkoul@kernel.org> Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> Patchwork: https://patchwork.freedesktop.org/patch/480922/ Link: https://lore.kernel.org/r/20220406094031.1027376-9-vkoul@kernel.org Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
This commit is contained in:
@@ -521,6 +521,22 @@ void dpu_encoder_helper_split_config(
|
||||
}
|
||||
}
|
||||
|
||||
bool dpu_encoder_use_dsc_merge(struct drm_encoder *drm_enc)
|
||||
{
|
||||
struct dpu_encoder_virt *dpu_enc = to_dpu_encoder_virt(drm_enc);
|
||||
int i, intf_count = 0, num_dsc = 0;
|
||||
|
||||
for (i = 0; i < MAX_PHYS_ENCODERS_PER_VIRTUAL; i++)
|
||||
if (dpu_enc->phys_encs[i])
|
||||
intf_count++;
|
||||
|
||||
/* See dpu_encoder_get_topology, we only support 2:2:1 topology */
|
||||
if (dpu_enc->dsc)
|
||||
num_dsc = 2;
|
||||
|
||||
return (num_dsc > 0) && (num_dsc > intf_count);
|
||||
}
|
||||
|
||||
static struct msm_display_topology dpu_encoder_get_topology(
|
||||
struct dpu_encoder_virt *dpu_enc,
|
||||
struct dpu_kms *dpu_kms,
|
||||
|
||||
@@ -174,4 +174,10 @@ int dpu_encoder_get_vsync_count(struct drm_encoder *drm_enc);
|
||||
|
||||
bool dpu_encoder_is_widebus_enabled(const struct drm_encoder *drm_enc);
|
||||
|
||||
/**
|
||||
* dpu_encoder_use_dsc_merge - returns true if the encoder uses DSC merge topology.
|
||||
* @drm_enc: Pointer to previously created drm encoder structure
|
||||
*/
|
||||
bool dpu_encoder_use_dsc_merge(struct drm_encoder *drm_enc);
|
||||
|
||||
#endif /* __DPU_ENCODER_H__ */
|
||||
|
||||
@@ -314,8 +314,10 @@ static inline enum dpu_3d_blend_mode dpu_encoder_helper_get_3d_blend_mode(
|
||||
|
||||
dpu_cstate = to_dpu_crtc_state(phys_enc->parent->crtc->state);
|
||||
|
||||
/* Use merge_3d unless DSC MERGE topology is used */
|
||||
if (phys_enc->split_role == ENC_ROLE_SOLO &&
|
||||
dpu_cstate->num_mixers == CRTC_DUAL_MIXERS)
|
||||
dpu_cstate->num_mixers == CRTC_DUAL_MIXERS &&
|
||||
!dpu_encoder_use_dsc_merge(phys_enc->parent))
|
||||
return BLEND_3D_H_ROW_INT;
|
||||
|
||||
return BLEND_3D_NONE;
|
||||
|
||||
Reference in New Issue
Block a user