From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
To: Kalyan Thota <quic_kalyant@quicinc.com>,
dri-devel@lists.freedesktop.org, linux-arm-msm@vger.kernel.org,
freedreno@lists.freedesktop.org, devicetree@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, robdclark@chromium.org,
dianders@chromium.org, swboyd@chromium.org,
quic_vpolimer@quicinc.com, quic_abhinavk@quicinc.com,
marijn.suijten@somainline.org
Subject: Re: [v1 3/3] drm/msm/disp/dpu1: reserve the resources on topology change
Date: Mon, 30 Jan 2023 21:17:32 +0200 [thread overview]
Message-ID: <01f61ae7-dfa0-6c21-d1ac-3ae428c3f5e2@linaro.org> (raw)
In-Reply-To: <1675092092-26412-4-git-send-email-quic_kalyant@quicinc.com>
On 30/01/2023 17:21, Kalyan Thota wrote:
> Some features like ctm can be enabled dynamically. Release and reserve
> the dpu resources whenever a topology change occurs such that
> required hw blocks are allocated appropriately.
>
> Changes in v1:
> - Avoid mode_set call directly instead change the mode_changed (Dmitry)
Thanks, I like the overall idea. Minor nits below.
Also, could you please fix your scripts to include the PATCH keyword
into the subject? If you do `git format-patches -# -v#`, where # is the
number of commits to include and the version of the patchset, it will do
the trick on its own.
>
> Signed-off-by: Kalyan Thota <quic_kalyant@quicinc.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h | 2 ++
> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 42 ++++++++++++++++++-----------
> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 4 ++-
> 3 files changed, 32 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
> index 539b68b..58e8c72 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.h
> @@ -204,6 +204,7 @@ struct dpu_crtc {
> * @hw_ctls : List of active ctl paths
> * @crc_source : CRC source
> * @crc_frame_skip_count: Number of frames skipped before getting CRC
> + * @ctm_enabled : Cached ctm reservation state
Nit: we do not reserve CTMs. We reserve DSPPs.
So, ctm_enabled is 'Cached color management enablement state'.
> */
> struct dpu_crtc_state {
> struct drm_crtc_state base;
> @@ -225,6 +226,7 @@ struct dpu_crtc_state {
>
> enum dpu_crtc_crc_source crc_source;
> int crc_frame_skip_count;
> + bool ctm_enabled;
> };
>
> #define to_dpu_crtc_state(x) \
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> index 3bd46b4..0ddf2c9 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> @@ -217,6 +217,22 @@ static u32 dither_matrix[DITHER_MATRIX_SZ] = {
> 15, 7, 13, 5, 3, 11, 1, 9, 12, 4, 14, 6, 0, 8, 2, 10
> };
>
> +static bool _dpu_enc_is_dspps_changed(struct drm_crtc_state *crtc_state,
> + struct msm_display_topology topology)
> +{
> + struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc_state);
> +
> + if (drm_atomic_crtc_needs_modeset(crtc_state))
> + return true;
> +
> + if ((cstate->ctm_enabled && !topology.num_dspp) ||
> + (!cstate->ctm_enabled && topology.num_dspp)) {
> + crtc_state->mode_changed = true;
> + return true;
> + }
> +
> + return false;
> +}
>
> bool dpu_encoder_is_widebus_enabled(const struct drm_encoder *drm_enc)
> {
> @@ -638,25 +654,21 @@ static int dpu_encoder_virt_atomic_check(
> if (ret) {
> DPU_ERROR_ENC(dpu_enc,
> "mode unsupported, phys idx %d\n", i);
> - break;
> + return ret;
This deserves a separate commit with the proper Fixes: tag.
> }
> }
>
> topology = dpu_encoder_get_topology(dpu_enc, dpu_kms, adj_mode, crtc_state);
>
> + _dpu_enc_is_dspps_changed(crtc_state, topology);
> +
> /* Reserve dynamic resources now. */
> - if (!ret) {
> - /*
> - * Release and Allocate resources on every modeset
> - * Dont allocate when active is false.
> - */
> - if (drm_atomic_crtc_needs_modeset(crtc_state)) {
> - dpu_rm_release(global_state, drm_enc);
> + if (drm_atomic_crtc_needs_modeset(crtc_state)) {
> + dpu_rm_release(global_state, drm_enc);
>
> - if (!crtc_state->active_changed || crtc_state->active)
> - ret = dpu_rm_reserve(&dpu_kms->rm, global_state,
> - drm_enc, crtc_state, topology);
> - }
> + if (crtc_state->enable)
> + ret = dpu_rm_reserve(&dpu_kms->rm, global_state,
> + drm_enc, crtc_state, topology);
> }
>
> trace_dpu_enc_atomic_check_flags(DRMID(drm_enc), adj_mode->flags);
> @@ -1027,7 +1039,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
> struct dpu_hw_blk *hw_lm[MAX_CHANNELS_PER_ENC];
> struct dpu_hw_blk *hw_dspp[MAX_CHANNELS_PER_ENC] = { NULL };
> struct dpu_hw_blk *hw_dsc[MAX_CHANNELS_PER_ENC];
> - int num_lm, num_ctl, num_pp, num_dsc;
> + int num_lm, num_ctl, num_pp, num_dsc, num_dspp;
> unsigned int dsc_mask = 0;
> int i;
>
> @@ -1058,7 +1070,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
> drm_enc->base.id, DPU_HW_BLK_CTL, hw_ctl, ARRAY_SIZE(hw_ctl));
> num_lm = dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state,
> drm_enc->base.id, DPU_HW_BLK_LM, hw_lm, ARRAY_SIZE(hw_lm));
> - dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state,
> + num_dspp = dpu_rm_get_assigned_resources(&dpu_kms->rm, global_state,
> drm_enc->base.id, DPU_HW_BLK_DSPP, hw_dspp,
> ARRAY_SIZE(hw_dspp));
>
> @@ -1089,7 +1101,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
> }
>
> cstate->num_mixers = num_lm;
> -
> + cstate->ctm_enabled = !!num_dspp;
> dpu_enc->connector = conn_state->connector;
>
> for (i = 0; i < dpu_enc->num_phys_encs; i++) {
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
> index 9e7236e..4cbe20c 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h
> @@ -150,8 +150,10 @@ int dpu_encoder_setup(struct drm_device *dev, struct drm_encoder *enc,
> * dpu_encoder_prepare_commit - prepare encoder at the very beginning of an
> * atomic commit, before any registers are written
> * @drm_enc: Pointer to previously created drm encoder structure
> + * @crtc_state: Pointer to drm crtc state
> */
> -void dpu_encoder_prepare_commit(struct drm_encoder *drm_enc);
> +void dpu_encoder_prepare_commit(struct drm_encoder *drm_enc,
> + struct drm_crtc_state *crtc_state);
I think this change on it's own breaks compilation. Please drop it.
>
> /**
> * dpu_encoder_set_idle_timeout - set the idle timeout for video
--
With best wishes
Dmitry
next prev parent reply other threads:[~2023-01-30 19:17 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-30 15:21 [PATCH 0/3] Reserve dspps based on user request Kalyan Thota
2023-01-30 15:21 ` [v1 1/3] drm/msm/disp/dpu1: clear dspp reservations in rm release Kalyan Thota
2023-02-01 11:10 ` Marijn Suijten
2023-02-01 11:21 ` Marijn Suijten
2023-01-30 15:21 ` [v1 2/3] drm/msm/disp/dpu1: add dspps into reservation if there is a ctm request Kalyan Thota
2023-01-30 18:36 ` Dmitry Baryshkov
2023-02-01 11:16 ` Marijn Suijten
2023-02-01 11:26 ` Marijn Suijten
2023-02-01 13:49 ` Dmitry Baryshkov
2023-02-01 13:48 ` Dmitry Baryshkov
2023-02-01 15:10 ` Marijn Suijten
2023-01-30 15:21 ` [v1 3/3] drm/msm/disp/dpu1: reserve the resources on topology change Kalyan Thota
2023-01-30 19:17 ` Dmitry Baryshkov [this message]
2023-02-02 4:22 ` kernel test robot
2023-02-02 14:08 ` kernel test robot
2023-01-30 19:18 ` [PATCH 0/3] Reserve dspps based on user request Dmitry Baryshkov
2023-02-01 11:01 ` Marijn Suijten
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=01f61ae7-dfa0-6c21-d1ac-3ae428c3f5e2@linaro.org \
--to=dmitry.baryshkov@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marijn.suijten@somainline.org \
--cc=quic_abhinavk@quicinc.com \
--cc=quic_kalyant@quicinc.com \
--cc=quic_vpolimer@quicinc.com \
--cc=robdclark@chromium.org \
--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;
as well as URLs for NNTP newsgroup(s).