From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run>,
Abhinav Kumar <quic_abhinavk@quicinc.com>,
Marijn Suijten <marijn.suijten@somainline.org>,
freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org,
Bjorn Andersson <andersson@kernel.org>,
dri-devel@lists.freedesktop.org,
Stephen Boyd <swboyd@chromium.org>
Subject: Re: [PATCH v3 01/12] drm/atomic-helper: split not-scaling part of drm_atomic_helper_check_plane_state
Date: Wed, 14 Feb 2024 20:37:02 +0200 [thread overview]
Message-ID: <Zc0ITrmhQ8CWMXMq@intel.com> (raw)
In-Reply-To: <20230914050706.1058620-2-dmitry.baryshkov@linaro.org>
On Thu, Sep 14, 2023 at 08:06:55AM +0300, Dmitry Baryshkov wrote:
> The helper drm_atomic_helper_check_plane_state() runs several checks on
> plane src and dst rectangles, including the check whether required
> scaling fits into the required margins. The msm driver would benefit
> from having a function that does all these checks except the scaling
> one. Split them into a new helper called
> drm_atomic_helper_check_plane_noscale().
What's the point in eliminating a nop scaling check?
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/drm_atomic_helper.c | 110 ++++++++++++++++++++++------
> include/drm/drm_atomic_helper.h | 7 ++
> 2 files changed, 96 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 292e38eb6218..2d7dd66181c9 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -825,11 +825,9 @@ drm_atomic_helper_check_wb_encoder_state(struct drm_encoder *encoder,
> EXPORT_SYMBOL(drm_atomic_helper_check_wb_encoder_state);
>
> /**
> - * drm_atomic_helper_check_plane_state() - Check plane state for validity
> + * drm_atomic_helper_check_plane_noscale() - Check plane state for validity
> * @plane_state: plane state to check
> * @crtc_state: CRTC state to check
> - * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> - * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> * @can_position: is it legal to position the plane such that it
> * doesn't cover the entire CRTC? This will generally
> * only be false for primary planes.
> @@ -845,19 +843,16 @@ EXPORT_SYMBOL(drm_atomic_helper_check_wb_encoder_state);
> * RETURNS:
> * Zero if update appears valid, error code on failure
> */
> -int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> - const struct drm_crtc_state *crtc_state,
> - int min_scale,
> - int max_scale,
> - bool can_position,
> - bool can_update_disabled)
> +int drm_atomic_helper_check_plane_noscale(struct drm_plane_state *plane_state,
> + const struct drm_crtc_state *crtc_state,
> + bool can_position,
> + bool can_update_disabled)
> {
> struct drm_framebuffer *fb = plane_state->fb;
> struct drm_rect *src = &plane_state->src;
> struct drm_rect *dst = &plane_state->dst;
> unsigned int rotation = plane_state->rotation;
> struct drm_rect clip = {};
> - int hscale, vscale;
>
> WARN_ON(plane_state->crtc && plane_state->crtc != crtc_state->crtc);
>
> @@ -883,17 +878,6 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
>
> drm_rect_rotate(src, fb->width << 16, fb->height << 16, rotation);
>
> - /* Check scaling */
> - hscale = drm_rect_calc_hscale(src, dst, min_scale, max_scale);
> - vscale = drm_rect_calc_vscale(src, dst, min_scale, max_scale);
> - if (hscale < 0 || vscale < 0) {
> - drm_dbg_kms(plane_state->plane->dev,
> - "Invalid scaling of plane\n");
> - drm_rect_debug_print("src: ", &plane_state->src, true);
> - drm_rect_debug_print("dst: ", &plane_state->dst, false);
> - return -ERANGE;
> - }
> -
> if (crtc_state->enable)
> drm_mode_get_hv_timing(&crtc_state->mode, &clip.x2, &clip.y2);
>
> @@ -921,6 +905,90 @@ int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
>
> return 0;
> }
> +EXPORT_SYMBOL(drm_atomic_helper_check_plane_noscale);
> +
> +/**
> + * drm_atomic_helper_check_plane_scale() - Check whether plane can be scaled
> + * @plane_state: plane state to check
> + * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> + * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> + *
> + * Checks that a desired plane scale fits into the min_scale..max_scale
> + * boundaries.
> + * Drivers that provide their own plane handling rather than helper-provided
> + * implementations may still wish to call this function to avoid duplication of
> + * error checking code.
> + *
> + * RETURNS:
> + * Zero if update appears valid, error code on failure
> + */
> +int drm_atomic_helper_check_plane_scale(struct drm_plane_state *plane_state,
> + int min_scale,
> + int max_scale)
> +{
> + struct drm_framebuffer *fb = plane_state->fb;
> + struct drm_rect src;
> + struct drm_rect dst;
> + int hscale, vscale;
> +
> + if (!plane_state->visible)
> + return 0;
> +
> + src = drm_plane_state_src(plane_state);
> + dst = drm_plane_state_dest(plane_state);
> +
> + drm_rect_rotate(&src, fb->width << 16, fb->height << 16, plane_state->rotation);
> +
> + hscale = drm_rect_calc_hscale(&src, &dst, min_scale, max_scale);
> + vscale = drm_rect_calc_vscale(&src, &dst, min_scale, max_scale);
> + if (hscale < 0 || vscale < 0) {
> + drm_dbg_kms(plane_state->plane->dev,
> + "Invalid scaling of plane\n");
> + drm_rect_debug_print("src: ", &plane_state->src, true);
> + drm_rect_debug_print("dst: ", &plane_state->dst, false);
> + return -ERANGE;
> + }
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(drm_atomic_helper_check_plane_scale);
> +
> +/**
> + * drm_atomic_helper_check_plane_state() - Check plane state for validity
> + * @plane_state: plane state to check
> + * @crtc_state: CRTC state to check
> + * @min_scale: minimum @src:@dest scaling factor in 16.16 fixed point
> + * @max_scale: maximum @src:@dest scaling factor in 16.16 fixed point
> + * @can_position: is it legal to position the plane such that it
> + * doesn't cover the entire CRTC? This will generally
> + * only be false for primary planes.
> + * @can_update_disabled: can the plane be updated while the CRTC
> + * is disabled?
> + *
> + * Checks that a desired plane update is valid, and updates various
> + * bits of derived state (clipped coordinates etc.). Drivers that provide
> + * their own plane handling rather than helper-provided implementations may
> + * still wish to call this function to avoid duplication of error checking
> + * code.
> + *
> + * RETURNS:
> + * Zero if update appears valid, error code on failure
> + */
> +int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> + const struct drm_crtc_state *crtc_state,
> + int min_scale,
> + int max_scale,
> + bool can_position,
> + bool can_update_disabled)
> +{
> + int ret;
> +
> + ret = drm_atomic_helper_check_plane_noscale(plane_state, crtc_state, can_position, can_update_disabled);
> + if (ret < 0)
> + return ret;
> +
> + return drm_atomic_helper_check_plane_scale(plane_state, min_scale, max_scale);
> +}
> EXPORT_SYMBOL(drm_atomic_helper_check_plane_state);
>
> /**
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 536a0b0091c3..32ac55aea94e 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -52,6 +52,13 @@ int drm_atomic_helper_check_modeset(struct drm_device *dev,
> int
> drm_atomic_helper_check_wb_encoder_state(struct drm_encoder *encoder,
> struct drm_connector_state *conn_state);
> +int drm_atomic_helper_check_plane_noscale(struct drm_plane_state *plane_state,
> + const struct drm_crtc_state *crtc_state,
> + bool can_position,
> + bool can_update_disabled);
> +int drm_atomic_helper_check_plane_scale(struct drm_plane_state *plane_state,
> + int min_scale,
> + int max_scale);
> int drm_atomic_helper_check_plane_state(struct drm_plane_state *plane_state,
> const struct drm_crtc_state *crtc_state,
> int min_scale,
> --
> 2.39.2
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2024-02-14 18:37 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-14 5:06 [PATCH v3 00/12] drm/msm/dpu: support virtual wide planes Dmitry Baryshkov
2023-09-14 5:06 ` Dmitry Baryshkov
2023-09-14 5:06 ` [PATCH v3 01/12] drm/atomic-helper: split not-scaling part of drm_atomic_helper_check_plane_state Dmitry Baryshkov
2023-09-14 5:06 ` Dmitry Baryshkov
2024-02-14 18:30 ` Abhinav Kumar
2024-02-14 18:37 ` Ville Syrjälä [this message]
2024-02-14 18:47 ` Ville Syrjälä
2024-02-14 19:17 ` Dmitry Baryshkov
2024-02-14 19:39 ` Ville Syrjälä
2024-02-14 19:43 ` Dmitry Baryshkov
2023-09-14 5:06 ` [PATCH v3 02/12] drm/msm/dpu: add current resource allocation to dumped state Dmitry Baryshkov
2023-09-14 5:06 ` Dmitry Baryshkov
2024-02-14 18:40 ` Abhinav Kumar
2024-02-14 19:18 ` Dmitry Baryshkov
2023-09-14 5:06 ` [PATCH v3 03/12] drm/msm/dpu: take plane rotation into account for wide planes Dmitry Baryshkov
2023-09-14 5:06 ` Dmitry Baryshkov
2024-02-14 19:07 ` Abhinav Kumar
2023-09-14 5:06 ` [PATCH v3 04/12] drm/msm/dpu: move pstate->pipe initialization to dpu_plane_atomic_check Dmitry Baryshkov
2023-09-14 5:06 ` Dmitry Baryshkov
2023-09-14 5:06 ` [PATCH v3 05/12] drm/msm/dpu: split dpu_plane_atomic_check() Dmitry Baryshkov
2023-09-14 5:06 ` Dmitry Baryshkov
2023-09-14 5:07 ` [PATCH v3 06/12] drm/msm/dpu: move rot90 checking to dpu_plane_atomic_check_pipe() Dmitry Baryshkov
2023-09-14 5:07 ` Dmitry Baryshkov
2023-09-14 5:07 ` [PATCH v3 07/12] drm/msm/dpu: add support for virtual planes Dmitry Baryshkov
2023-09-14 5:07 ` Dmitry Baryshkov
2023-09-14 7:40 ` kernel test robot
2023-09-14 5:07 ` [PATCH v3 08/12] drm/msm/dpu: allow using two SSPP blocks for a single plane Dmitry Baryshkov
2023-09-14 5:07 ` Dmitry Baryshkov
2023-09-14 5:07 ` [PATCH v3 09/12] drm/msm/dpu: allow sharing SSPP between planes Dmitry Baryshkov
2023-09-14 5:07 ` Dmitry Baryshkov
2023-09-14 5:07 ` [PATCH v3 10/12] drm/msm/dpu: create additional virtual planes Dmitry Baryshkov
2023-09-14 5:07 ` Dmitry Baryshkov
2023-09-14 5:07 ` [PATCH v3 11/12] drm/msm/dpu: allow sharing of blending stages Dmitry Baryshkov
2023-09-14 5:07 ` Dmitry Baryshkov
2023-09-14 5:07 ` [PATCH v3 12/12] drm/msm/dpu: include SSPP allocation state into the dumped state Dmitry Baryshkov
2023-09-14 5:07 ` 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=Zc0ITrmhQ8CWMXMq@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=andersson@kernel.org \
--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=quic_abhinavk@quicinc.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.