Linux ARM-MSM sub-architecture
 help / color / mirror / Atom feed
From: Abhinav Kumar <quic_abhinavk@quicinc.com>
To: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run>,
	Marijn Suijten <marijn.suijten@somainline.org>,
	Stephen Boyd <swboyd@chromium.org>,
	David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
	Bjorn Andersson <andersson@kernel.org>,
	<linux-arm-msm@vger.kernel.org>,
	<dri-devel@lists.freedesktop.org>,
	<freedreno@lists.freedesktop.org>
Subject: Re: [PATCH v4 05/13] drm/msm/dpu: move scaling limitations out of the hw_catalog
Date: Fri, 31 May 2024 12:20:24 -0700	[thread overview]
Message-ID: <9e0e22b0-965b-00b2-c837-904dd342e87f@quicinc.com> (raw)
In-Reply-To: <CAA8EJpqKkTOkhrgJexw-D5TbgGYjBoUup3FHC80boR_cAUb2dA@mail.gmail.com>



On 5/31/2024 1:16 AM, Dmitry Baryshkov wrote:
> On Fri, 31 May 2024 at 04:02, Abhinav Kumar <quic_abhinavk@quicinc.com> wrote:
>>
>>
>>
>> On 3/13/2024 5:02 PM, Dmitry Baryshkov wrote:
>>> Max upscale / downscale factors are constant between platforms. In
>>> preparation to adding support for virtual planes and allocating SSPP
>>> blocks on demand move max scaling factors out of the HW catalog and
>>> handle them in the dpu_plane directly. If any of the scaling blocks gets
>>> different limitations, this will have to be handled separately, after
>>> the plane refactoring.
>>>
>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
>>> ---
>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 12 ------------
>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h |  4 ----
>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c      | 16 +++++++++++++---
>>>    3 files changed, 13 insertions(+), 19 deletions(-)
>>>
>>
>> <Snip>
>>
>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
>>> index 70d6a8989e1a..6360052523b5 100644
>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
>>> @@ -785,12 +785,15 @@ static int dpu_plane_atomic_check_pipe(struct dpu_plane *pdpu,
>>>        return 0;
>>>    }
>>>
>>> +#define MAX_UPSCALE_RATIO    20
>>> +#define MAX_DOWNSCALE_RATIO  4
>>> +
>>>    static int dpu_plane_atomic_check(struct drm_plane *plane,
>>>                                  struct drm_atomic_state *state)
>>>    {
>>>        struct drm_plane_state *new_plane_state = drm_atomic_get_new_plane_state(state,
>>>                                                                                 plane);
>>> -     int ret = 0, min_scale;
>>> +     int ret = 0, min_scale, max_scale;
>>>        struct dpu_plane *pdpu = to_dpu_plane(plane);
>>>        struct dpu_kms *kms = _dpu_plane_get_kms(&pdpu->base);
>>>        u64 max_mdp_clk_rate = kms->perf.max_core_clk_rate;
>>> @@ -822,10 +825,17 @@ static int dpu_plane_atomic_check(struct drm_plane *plane,
>>>        pipe_hw_caps = pipe->sspp->cap;
>>>        sblk = pipe->sspp->cap->sblk;
>>>
>>> -     min_scale = FRAC_16_16(1, sblk->maxupscale);
>>> +     if (sblk->scaler_blk.len) {
>>> +             min_scale = FRAC_16_16(1, MAX_UPSCALE_RATIO);
>>> +             max_scale = MAX_DOWNSCALE_RATIO << 16;
>>> +     } else {
>>> +             min_scale = 1 << 16;
>>> +             max_scale = 1 << 16;
>>
>> You can use DRM_PLANE_NO_SCALING instead.
> 
> Ack
> 
>>
>>> +     }
>>> +
>>>        ret = drm_atomic_helper_check_plane_state(new_plane_state, crtc_state,
>>>                                                  min_scale,
>>> -                                               sblk->maxdwnscale << 16,
>>> +                                               max_scale,
>>>                                                  true, true);
>>
>> I am missing something here.
>>
>> As per the documentation of this API, min and max are the scaling limits
>> of both directions and not max_upscale and max_downscale.
>>
>> **
>> 837  * drm_atomic_helper_check_plane_state() - Check plane state for
>> validity
>> 838  * @plane_state: plane state to check
>> 839  * @crtc_state: CRTC state to check
>> 840  * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
>> 841  * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
>> 842  * @can_position: is it legal to position the plane such that it
>>
>>
>> But this change is passing max_upscale and max_downscale as the min and
>> max resp. Isnt that wrong?
> 
> First of all, please notice that I'm not changing the values that are
> passed to the function. What was being passed beforehand gets passed
> after this commit. I just moved it out of the catalog.
> 

Ack.

> Second, if we take a look at drm_calc_scale(), we can see that it
> calculates src / dst and checks that it is within the min_scale and
> max_scale boundaries, just like documented.
> In our case, the boundaries are (I'm omitting 16.16 math):
> - upscale 20 times. dst = 20 * src, scale = src/dst = 1/20
> - downscale 4 times. dst = 1/4 * src, scale = src/dst = 4
> 
> So, from the point of view of drm_calc_scale(), the min_scale is
> 1/MAX_UPSCALE, max_scale = MAX_DOWNSCALE and the values the code is
> passing are correct.
> 

That part is fine. Agreed.

But I do think, that API is not correct if the scaling limits are 
different in the Horizontal Vs Vertical direction as today it assumes 
the limits are same in both. Anyway, thats outside the scope of this 
patch. So I am good for now.

>>
>>
>>>        if (ret) {
>>>                DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret);
> 
> 
> 

  reply	other threads:[~2024-05-31 19:20 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-14  0:02 [PATCH v4 00/13] drm/msm/dpu: support virtual wide planes Dmitry Baryshkov
2024-03-14  0:02 ` [PATCH v4 01/13] drm/msm/dpu: take plane rotation into account for " Dmitry Baryshkov
2024-05-30 22:51   ` Abhinav Kumar
2024-03-14  0:02 ` [PATCH v4 02/13] drm/msm/dpu: use drm_rect_fp_to_int() Dmitry Baryshkov
2024-05-30 23:14   ` Abhinav Kumar
2024-03-14  0:02 ` [PATCH v4 03/13] drm/msm/dpu: move pstate->pipe initialization to dpu_plane_atomic_check Dmitry Baryshkov
2024-05-31  0:28   ` Abhinav Kumar
2024-03-14  0:02 ` [PATCH v4 04/13] drm/msm/dpu: drop virt_formats from SSPP subblock configuration Dmitry Baryshkov
2024-05-31  0:32   ` Abhinav Kumar
2024-03-14  0:02 ` [PATCH v4 05/13] drm/msm/dpu: move scaling limitations out of the hw_catalog Dmitry Baryshkov
2024-05-31  1:02   ` Abhinav Kumar
2024-05-31  8:16     ` Dmitry Baryshkov
2024-05-31 19:20       ` Abhinav Kumar [this message]
2024-05-31 19:45         ` Dmitry Baryshkov
2024-03-14  0:02 ` [PATCH v4 06/13] drm/msm/dpu: split dpu_plane_atomic_check() Dmitry Baryshkov
2024-06-05 23:19   ` Abhinav Kumar
2024-06-05 23:32     ` Dmitry Baryshkov
2024-06-05 23:47       ` Abhinav Kumar
2024-06-06  8:53         ` Dmitry Baryshkov
2024-06-06  8:54           ` Dmitry Baryshkov
2024-03-14  0:02 ` [PATCH v4 07/13] drm/msm/dpu: move rot90 checking to dpu_plane_atomic_check_pipe() Dmitry Baryshkov
2024-06-05 23:34   ` Abhinav Kumar
2024-03-14  0:02 ` [PATCH v4 08/13] drm/msm/dpu: add support for virtual planes Dmitry Baryshkov
2024-03-14  8:04   ` [v4,08/13] " Sui Jingfeng
2024-06-06 22:21   ` [PATCH v4 08/13] " Abhinav Kumar
2024-06-07  7:16     ` Dmitry Baryshkov
2024-06-07 19:22       ` Abhinav Kumar
2024-06-07 21:10         ` Dmitry Baryshkov
2024-06-07 21:39           ` Abhinav Kumar
2024-06-07 22:26             ` Dmitry Baryshkov
2024-06-07 23:55               ` Abhinav Kumar
2024-06-08  0:57                 ` Dmitry Baryshkov
2024-06-08  2:45                   ` Abhinav Kumar
2024-06-10 21:01                     ` Abhinav Kumar
2024-03-14  0:02 ` [PATCH v4 09/13] drm/msm/dpu: allow using two SSPP blocks for a single plane Dmitry Baryshkov
2024-06-10 20:19   ` Abhinav Kumar
2024-03-14  0:02 ` [PATCH v4 10/13] drm/msm/dpu: allow sharing SSPP between planes Dmitry Baryshkov
2024-06-11 23:12   ` Abhinav Kumar
2024-06-12  9:08     ` Dmitry Baryshkov
2024-06-13  1:17       ` Abhinav Kumar
2024-06-13 10:05         ` Dmitry Baryshkov
2024-06-13 20:02           ` Abhinav Kumar
2024-03-14  0:02 ` [PATCH v4 11/13] drm/msm/dpu: create additional virtual planes Dmitry Baryshkov
2024-06-11 23:26   ` Abhinav Kumar
2024-03-14  0:02 ` [PATCH v4 12/13] drm/msm/dpu: allow sharing of blending stages Dmitry Baryshkov
2024-06-12  1:47   ` Abhinav Kumar
2024-06-12  8:50     ` Dmitry Baryshkov
2024-03-14  0:02 ` [PATCH v4 13/13] drm/msm/dpu: include SSPP allocation state into the dumped state Dmitry Baryshkov
2024-06-11 23:43   ` Abhinav Kumar
2024-03-14  0:04 ` [PATCH v4 00/13] drm/msm/dpu: support virtual wide planes Dmitry Baryshkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9e0e22b0-965b-00b2-c837-904dd342e87f@quicinc.com \
    --to=quic_abhinavk@quicinc.com \
    --cc=airlied@gmail.com \
    --cc=andersson@kernel.org \
    --cc=daniel@ffwll.ch \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=freedreno@lists.freedesktop.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=marijn.suijten@somainline.org \
    --cc=robdclark@gmail.com \
    --cc=sean@poorly.run \
    --cc=swboyd@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox