Re: [PATCH 04/11] drm/msm/dpu: allow using lm mixer base stage

From: Dmitry Baryshkov
Date: Wed Apr 19 2023 - 18:43:45 EST


On 19/04/2023 17:41, Arnaud Vrac wrote:
The dpu backend already handles applying alpha to the base stage, so we
can use it to render the bottom plane in all cases. This allows mixing
one additional plane with the hardware mixer.

Signed-off-by: Arnaud Vrac <avrac@xxxxxxxxxx>

This might require additional changes. First, for the STAGE_BASE pipe in the source split mode (iow using two LMs) should programmed with respect to the right LM's x offset (rather than usual left top-left LM). See mdss_mdp_pipe_position_update().

Also this might need some interaction with CTL_MIXER_BORDER_OUT being set or not. If I remember correctly, if there bottom plane is not fullscreen or if there are no planes at all, we should set CTL_MIXER_BORDER_OUT (which takes STAGE_BASE) and start assigning them from STAGE0. If not, we can use STAGE_BASE.

---
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
index 14b5cfe306113..148921ed62f85 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
@@ -881,7 +881,7 @@ static int dpu_plane_atomic_check(struct drm_plane *plane,
r_pipe->multirect_mode = DPU_SSPP_MULTIRECT_NONE;
r_pipe->sspp = NULL;
- pstate->stage = DPU_STAGE_0 + pstate->base.normalized_zpos;
+ pstate->stage = DPU_STAGE_BASE + pstate->base.normalized_zpos;
if (pstate->stage >= pdpu->catalog->caps->max_mixer_blendstages) {
DPU_ERROR("> %d plane stages assigned\n",
pdpu->catalog->caps->max_mixer_blendstages - DPU_STAGE_0);


--
With best wishes
Dmitry