[PATCH v3 23/27] drm/msm/dpu: rework dpu_plane_atomic_check()

Dmitry Baryshkov dmitry.baryshkov at linaro.org
Tue Feb 7 17:51:44 UTC 2023


On 07/02/2023 19:49, Abhinav Kumar wrote:
> 
> 
> On 2/3/2023 10:21 AM, Dmitry Baryshkov wrote:
>> Split pipe-dependent code from dpu_plane_atomic_check() into the
>> separate function dpu_plane_atomic_check_pipe(). This is one of
> 
> Same comment as prev patch, dpu_plane_atomic_check_pipe() ---> 
> dpu_plane_atomic_check_sspp()

No, it does what it does: it checks one software pipe configuration.

> 
>> preparational steps to add r_pipe support.
>>
>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
>> ---
>>   drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 88 ++++++++++++++---------
>>   1 file changed, 53 insertions(+), 35 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c 
>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
>> index f94e132733f3..e69499490d39 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
>> @@ -903,6 +903,51 @@ static int dpu_plane_check_inline_rotation(struct 
>> dpu_plane *pdpu,
>>       return 0;
>>   }
>> +static int dpu_plane_atomic_check_pipe(struct dpu_plane *pdpu,
>> +        struct dpu_sw_pipe *pipe,
>> +        struct dpu_hw_sspp_cfg *pipe_cfg,
> 
> pipe_cfg --> sspp_cfg
> 
> Also, had a question. For function parameters spreading across multiple 
> lines do we want to align to one guideline? Is it going to be two tabs 
> more than the prev line or aligning it with the opening brace of prev line?
> 
> I am seeing a mix in the prev patch of the series and this one.

I usually tend to keep the existing indent when adding new args and 
shifting to open brace when adding new functions. Maybe I failed a 
question in this patch, I'll doublecheck it.

> 
>> +        const struct dpu_format *fmt)
>> +{
>> +    uint32_t min_src_size;
>> +
>> +    min_src_size = DPU_FORMAT_IS_YUV(fmt) ? 2 : 1;
>> +
>> +    if (DPU_FORMAT_IS_YUV(fmt) &&
>> +        (!(pipe->sspp->cap->features & DPU_SSPP_SCALER) ||
>> +         !(pipe->sspp->cap->features & DPU_SSPP_CSC_ANY))) {
>> +        DPU_DEBUG_PLANE(pdpu,
>> +                "plane doesn't have scaler/csc for yuv\n");
>> +        return -EINVAL;
>> +    }
>> +
>> +    /* check src bounds */
>> +    if (drm_rect_width(&pipe_cfg->src_rect) < min_src_size ||
>> +           drm_rect_height(&pipe_cfg->src_rect) < min_src_size) {
>> +        DPU_DEBUG_PLANE(pdpu, "invalid source " DRM_RECT_FMT "\n",
>> +                DRM_RECT_ARG(&pipe_cfg->src_rect));
>> +        return -E2BIG;
>> +    }
>> +
>> +    /* valid yuv image */
>> +    if (DPU_FORMAT_IS_YUV(fmt) &&
>> +           (pipe_cfg->src_rect.x1 & 0x1 || pipe_cfg->src_rect.y1 & 
>> 0x1 ||
>> +            drm_rect_width(&pipe_cfg->src_rect) & 0x1 ||
>> +            drm_rect_height(&pipe_cfg->src_rect) & 0x1)) {
>> +        DPU_DEBUG_PLANE(pdpu, "invalid yuv source " DRM_RECT_FMT "\n",
>> +                DRM_RECT_ARG(&pipe_cfg->src_rect));
>> +        return -EINVAL;
>> +    }
>> +
>> +    /* min dst support */
>> +    if (drm_rect_width(&pipe_cfg->dst_rect) < 0x1 || 
>> drm_rect_height(&pipe_cfg->dst_rect) < 0x1) {
>> +        DPU_DEBUG_PLANE(pdpu, "invalid dest rect " DRM_RECT_FMT "\n",
>> +                DRM_RECT_ARG(&pipe_cfg->dst_rect));
>> +        return -EINVAL;
>> +    }
>> +
>> +    return 0;
>> +}
>> +
>>   static int dpu_plane_atomic_check(struct drm_plane *plane,
>>                     struct drm_atomic_state *state)
>>   {
>> @@ -915,7 +960,7 @@ static int dpu_plane_atomic_check(struct drm_plane 
>> *plane,
>>       const struct dpu_format *fmt;
>>       struct dpu_hw_sspp_cfg *pipe_cfg = &pstate->pipe_cfg;
>>       struct drm_rect fb_rect = { 0 };
>> -    uint32_t min_src_size, max_linewidth;
>> +    uint32_t max_linewidth;
>>       unsigned int rotation;
>>       uint32_t supported_rotations;
>>       const struct dpu_sspp_cfg *pipe_hw_caps = pstate->pipe.sspp->cap;
>> @@ -970,46 +1015,19 @@ static int dpu_plane_atomic_check(struct 
>> drm_plane *plane,
>>       max_linewidth = pdpu->catalog->caps->max_linewidth;
>> -    fmt = to_dpu_format(msm_framebuffer_format(new_plane_state->fb));
>> -
>> -    min_src_size = DPU_FORMAT_IS_YUV(fmt) ? 2 : 1;
>> -
>> -    if (DPU_FORMAT_IS_YUV(fmt) &&
>> -        (!(pipe_hw_caps->features & DPU_SSPP_SCALER) ||
>> -         !(pipe_hw_caps->features & DPU_SSPP_CSC_ANY))) {
>> -        DPU_DEBUG_PLANE(pdpu,
>> -                "plane doesn't have scaler/csc for yuv\n");
>> -        return -EINVAL;
>> -
>> -    /* check src bounds */
>> -    } else if (drm_rect_width(&pipe_cfg->src_rect) < min_src_size ||
>> -           drm_rect_height(&pipe_cfg->src_rect) < min_src_size) {
>> -        DPU_DEBUG_PLANE(pdpu, "invalid source " DRM_RECT_FMT "\n",
>> -                DRM_RECT_ARG(&pipe_cfg->src_rect));
>> -        return -E2BIG;
>> -
>> -    /* valid yuv image */
>> -    } else if (DPU_FORMAT_IS_YUV(fmt) &&
>> -           (pipe_cfg->src_rect.x1 & 0x1 || pipe_cfg->src_rect.y1 & 
>> 0x1 ||
>> -            drm_rect_width(&pipe_cfg->src_rect) & 0x1 ||
>> -            drm_rect_height(&pipe_cfg->src_rect) & 0x1)) {
>> -        DPU_DEBUG_PLANE(pdpu, "invalid yuv source " DRM_RECT_FMT "\n",
>> -                DRM_RECT_ARG(&pipe_cfg->src_rect));
>> -        return -EINVAL;
>> -
>> -    /* min dst support */
>> -    } else if (drm_rect_width(&pipe_cfg->dst_rect) < 0x1 || 
>> drm_rect_height(&pipe_cfg->dst_rect) < 0x1) {
>> -        DPU_DEBUG_PLANE(pdpu, "invalid dest rect " DRM_RECT_FMT "\n",
>> -                DRM_RECT_ARG(&pipe_cfg->dst_rect));
>> -        return -EINVAL;
>> -
>>       /* check decimated source width */
>> -    } else if (drm_rect_width(&pipe_cfg->src_rect) > max_linewidth) {
>> +    if (drm_rect_width(&pipe_cfg->src_rect) > max_linewidth) {
>>           DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n",
>>                   DRM_RECT_ARG(&pipe_cfg->src_rect), max_linewidth);
>>           return -E2BIG;
>>       }
>> +    fmt = to_dpu_format(msm_framebuffer_format(new_plane_state->fb));
>> +
>> +    ret = dpu_plane_atomic_check_pipe(pdpu, &pstate->pipe, pipe_cfg, 
>> fmt);
>> +    if (ret)
>> +        return ret;
>> +
>>       supported_rotations = DRM_MODE_REFLECT_MASK | DRM_MODE_ROTATE_0;
>>       if (pipe_hw_caps->features & BIT(DPU_SSPP_INLINE_ROTATION))

-- 
With best wishes
Dmitry



More information about the dri-devel mailing list