[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