All of lore.kernel.org
 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>,
	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: [RFC PATCH v2 05/13] drm/msm/dpu: get rid of struct dpu_rm_requirements
Date: Thu, 18 May 2023 16:19:24 -0700	[thread overview]
Message-ID: <f8f56ea1-b0fb-68be-7e62-4741f82a4ccf@quicinc.com> (raw)
In-Reply-To: <7b385f62-7818-a28c-0d88-a825f3b58dce@quicinc.com>



On 5/17/2023 4:53 PM, Abhinav Kumar wrote:
> 
> 
> On 5/14/2023 10:06 AM, Dmitry Baryshkov wrote:
>> On Sat, 13 May 2023 at 01:39, Abhinav Kumar 
>> <quic_abhinavk@quicinc.com> wrote:
>>> On 3/20/2023 6:18 PM, Dmitry Baryshkov wrote:
>>>> The struct dpu_rm_requirements was used to wrap display topology and
>>>> hw resources, which meant INTF indices. As of commit ef58e0ad3436
>>>> ("drm/msm/dpu: get INTF blocks directly rather than through RM") the hw
>>>> resources struct was removed, leaving struct dpu_rm_requirements
>>>> containing a single field (topology). Remove the useless wrapper.
>>>>
>>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
>>>> ---
>>>
>>> Irrespective of where we plan to have the topology, this change doesn't
>>> seem incorrect as such.
>>>
>>> The only thing I can think of is when we need more information to be
>>> passed to the RM to allocate the blocks in addition to the topology this
>>> struct could have been expanded.
>>>
>>> So one example I can think of is lets say I want to add CDM block
>>> support. Then that information is outside of topology today because I
>>> will use CDM if my output format is yuv. It has nothing to do with
>>> topology but that block still needs to come from RM.
>>
>> I'd say, it is a part of the topology. CDM blocks are a part of the
>> pipeline, aren't they?
>>
>> If you prefer, we can rename msm_display_topology to 
>> dpu_rm_requirements itself.
>>
> 
> I am fine with renaming msm_display_topology to dpu_rm_requirements.
> 
> Because making CDM part of topology wont be right.
> 

Just to add, perhaps rename it to dpu_rm_display_requirements

>>> I know that usually I have lost on these type of discussions saying that
>>> if the code is not there yet, it should be dropped but I do have a plan
>>> to add that support soon probably by the next cycle. That time we will
>>> need some sort of wrapper to hold the topology and "extra" information
>>> to allocate the blocks.
>>>
>>> One alternative ofcourse is to expand dpu_rm_reserve() to accept
>>> something like "needs_cdm" but this is not scalable.
>>>
>>> Thoughts?
>>>
>>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c |  2 +-
>>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c      | 69 
>>>> +++++++--------------
>>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h      |  2 +-
>>>>    3 files changed, 23 insertions(+), 50 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c 
>>>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>>>> index 4ee708264f3b..a2cb23dea0b8 100644
>>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>>>> @@ -638,7 +638,7 @@ static int dpu_encoder_virt_atomic_check(
>>>>
>>>>                if (!crtc_state->active_changed || crtc_state->enable)
>>>>                        ret = dpu_rm_reserve(&dpu_kms->rm, global_state,
>>>> -                                     drm_enc, crtc_state, topology);
>>>> +                                     drm_enc, crtc_state, &topology);
>>>>        }
>>>>
>>>>        trace_dpu_enc_atomic_check_flags(DRMID(drm_enc), 
>>>> adj_mode->flags);
>>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c 
>>>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
>>>> index f4dda88a73f7..952e139c0234 100644
>>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
>>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
>>>> @@ -24,15 +24,6 @@ static inline bool reserved_by_other(uint32_t 
>>>> *res_map, int idx,
>>>>        return res_map[idx] && res_map[idx] != enc_id;
>>>>    }
>>>>
>>>> -/**
>>>> - * struct dpu_rm_requirements - Reservation requirements parameter 
>>>> bundle
>>>> - * @topology:  selected topology for the display
>>>> - * @hw_res:     Hardware resources required as reported by the 
>>>> encoders
>>>> - */
>>>> -struct dpu_rm_requirements {
>>>> -     struct msm_display_topology topology;
>>>> -};
>>>> -
>>>>    int dpu_rm_destroy(struct dpu_rm *rm)
>>>>    {
>>>>        int i;
>>>> @@ -329,14 +320,13 @@ static bool _dpu_rm_check_lm_peer(struct 
>>>> dpu_rm *rm, int primary_idx,
>>>>     *      mixer in rm->pingpong_blks[].
>>>>     * @dspp_idx: output parameter, index of dspp block attached to 
>>>> the layer
>>>>     *      mixer in rm->dspp_blks[].
>>>> - * @reqs: input parameter, rm requirements for HW blocks needed in the
>>>> - *      datapath.
>>>> + * @topology:  selected topology for the display
>>>>     * Return: true if lm matches all requirements, false otherwise
>>>>     */
>>>>    static bool _dpu_rm_check_lm_and_get_connected_blks(struct dpu_rm 
>>>> *rm,
>>>>                struct dpu_global_state *global_state,
>>>>                uint32_t enc_id, int lm_idx, int *pp_idx, int *dspp_idx,
>>>> -             struct dpu_rm_requirements *reqs)
>>>> +             struct msm_display_topology *topology)
>>>>    {
>>>>        const struct dpu_lm_cfg *lm_cfg;
>>>>        int idx;
>>>> @@ -361,7 +351,7 @@ static bool 
>>>> _dpu_rm_check_lm_and_get_connected_blks(struct dpu_rm *rm,
>>>>        }
>>>>        *pp_idx = idx;
>>>>
>>>> -     if (!reqs->topology.num_dspp)
>>>> +     if (!topology->num_dspp)
>>>>                return true;
>>>>
>>>>        idx = lm_cfg->dspp - DSPP_0;
>>>> @@ -383,7 +373,7 @@ static bool 
>>>> _dpu_rm_check_lm_and_get_connected_blks(struct dpu_rm *rm,
>>>>    static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>                               struct dpu_global_state *global_state,
>>>>                               uint32_t enc_id,
>>>> -                            struct dpu_rm_requirements *reqs)
>>>> +                            struct msm_display_topology *topology)
>>>>
>>>>    {
>>>>        int lm_idx[MAX_BLOCKS];
>>>> @@ -391,14 +381,14 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>        int dspp_idx[MAX_BLOCKS] = {0};
>>>>        int i, j, lm_count = 0;
>>>>
>>>> -     if (!reqs->topology.num_lm) {
>>>> -             DPU_ERROR("invalid number of lm: %d\n", 
>>>> reqs->topology.num_lm);
>>>> +     if (!topology->num_lm) {
>>>> +             DPU_ERROR("invalid number of lm: %d\n", 
>>>> topology->num_lm);
>>>>                return -EINVAL;
>>>>        }
>>>>
>>>>        /* Find a primary mixer */
>>>>        for (i = 0; i < ARRAY_SIZE(rm->mixer_blks) &&
>>>> -                     lm_count < reqs->topology.num_lm; i++) {
>>>> +                     lm_count < topology->num_lm; i++) {
>>>>                if (!rm->mixer_blks[i])
>>>>                        continue;
>>>>
>>>> @@ -407,7 +397,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>
>>>>                if (!_dpu_rm_check_lm_and_get_connected_blks(rm, 
>>>> global_state,
>>>>                                enc_id, i, &pp_idx[lm_count],
>>>> -                             &dspp_idx[lm_count], reqs)) {
>>>> +                             &dspp_idx[lm_count], topology)) {
>>>>                        continue;
>>>>                }
>>>>
>>>> @@ -415,7 +405,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>
>>>>                /* Valid primary mixer found, find matching peers */
>>>>                for (j = i + 1; j < ARRAY_SIZE(rm->mixer_blks) &&
>>>> -                             lm_count < reqs->topology.num_lm; j++) {
>>>> +                             lm_count < topology->num_lm; j++) {
>>>>                        if (!rm->mixer_blks[j])
>>>>                                continue;
>>>>
>>>> @@ -428,7 +418,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>                        if (!_dpu_rm_check_lm_and_get_connected_blks(rm,
>>>>                                        global_state, enc_id, j,
>>>>                                        &pp_idx[lm_count], 
>>>> &dspp_idx[lm_count],
>>>> -                                     reqs)) {
>>>> +                                     topology)) {
>>>>                                continue;
>>>>                        }
>>>>
>>>> @@ -437,7 +427,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>                }
>>>>        }
>>>>
>>>> -     if (lm_count != reqs->topology.num_lm) {
>>>> +     if (lm_count != topology->num_lm) {
>>>>                DPU_DEBUG("unable to find appropriate mixers\n");
>>>>                return -ENAVAIL;
>>>>        }
>>>> @@ -446,7 +436,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>                global_state->mixer_to_enc_id[lm_idx[i]] = enc_id;
>>>>                global_state->pingpong_to_enc_id[pp_idx[i]] = enc_id;
>>>>                global_state->dspp_to_enc_id[dspp_idx[i]] =
>>>> -                     reqs->topology.num_dspp ? enc_id : 0;
>>>> +                     topology->num_dspp ? enc_id : 0;
>>>>
>>>>                trace_dpu_rm_reserve_lms(lm_idx[i] + LM_0, enc_id,
>>>>                                         pp_idx[i] + PINGPONG_0);
>>>> @@ -539,44 +529,30 @@ static int _dpu_rm_make_reservation(
>>>>                struct dpu_rm *rm,
>>>>                struct dpu_global_state *global_state,
>>>>                struct drm_encoder *enc,
>>>> -             struct dpu_rm_requirements *reqs)
>>>> +             struct msm_display_topology *topology)
>>>>    {
>>>>        int ret;
>>>>
>>>> -     ret = _dpu_rm_reserve_lms(rm, global_state, enc->base.id, reqs);
>>>> +     ret = _dpu_rm_reserve_lms(rm, global_state, enc->base.id, 
>>>> topology);
>>>>        if (ret) {
>>>>                DPU_ERROR("unable to find appropriate mixers\n");
>>>>                return ret;
>>>>        }
>>>>
>>>>        ret = _dpu_rm_reserve_ctls(rm, global_state, enc->base.id,
>>>> -                             &reqs->topology);
>>>> +                                topology);
>>>>        if (ret) {
>>>>                DPU_ERROR("unable to find appropriate CTL\n");
>>>>                return ret;
>>>>        }
>>>>
>>>> -     ret  = _dpu_rm_reserve_dsc(rm, global_state, enc, 
>>>> &reqs->topology);
>>>> +     ret  = _dpu_rm_reserve_dsc(rm, global_state, enc, topology);
>>>>        if (ret)
>>>>                return ret;
>>>>
>>>>        return ret;
>>>>    }
>>>>
>>>> -static int _dpu_rm_populate_requirements(
>>>> -             struct drm_encoder *enc,
>>>> -             struct dpu_rm_requirements *reqs,
>>>> -             struct msm_display_topology req_topology)
>>>> -{
>>>> -     reqs->topology = req_topology;
>>>> -
>>>> -     DRM_DEBUG_KMS("num_lm: %d num_dsc: %d num_intf: %d\n",
>>>> -                   reqs->topology.num_lm, reqs->topology.num_dsc,
>>>> -                   reqs->topology.num_intf);
>>>> -
>>>> -     return 0;
>>>> -}
>>>> -
>>>>    static void _dpu_rm_clear_mapping(uint32_t *res_mapping, int cnt,
>>>>                                  uint32_t enc_id)
>>>>    {
>>>> @@ -608,9 +584,8 @@ int dpu_rm_reserve(
>>>>                struct dpu_global_state *global_state,
>>>>                struct drm_encoder *enc,
>>>>                struct drm_crtc_state *crtc_state,
>>>> -             struct msm_display_topology topology)
>>>> +             struct msm_display_topology *topology)
>>>>    {
>>>> -     struct dpu_rm_requirements reqs;
>>>>        int ret;
>>>>
>>>>        /* Check if this is just a page-flip */
>>>> @@ -625,13 +600,11 @@ int dpu_rm_reserve(
>>>>        DRM_DEBUG_KMS("reserving hw for enc %d crtc %d\n",
>>>>                      enc->base.id, crtc_state->crtc->base.id);
>>>>
>>>> -     ret = _dpu_rm_populate_requirements(enc, &reqs, topology);
>>>> -     if (ret) {
>>>> -             DPU_ERROR("failed to populate hw requirements\n");
>>>> -             return ret;
>>>> -     }
>>>> +     DRM_DEBUG_KMS("num_lm: %d num_dsc: %d num_intf: %d\n",
>>>> +                   topology->num_lm, topology->num_dsc,
>>>> +                   topology->num_intf);
>>>>
>>>> -     ret = _dpu_rm_make_reservation(rm, global_state, enc, &reqs);
>>>> +     ret = _dpu_rm_make_reservation(rm, global_state, enc, topology);
>>>>        if (ret)
>>>>                DPU_ERROR("failed to reserve hw resources: %d\n", ret);
>>>>
>>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h 
>>>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h
>>>> index d62c2edb2460..f05697462856 100644
>>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h
>>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h
>>>> @@ -71,7 +71,7 @@ int dpu_rm_reserve(struct dpu_rm *rm,
>>>>                struct dpu_global_state *global_state,
>>>>                struct drm_encoder *drm_enc,
>>>>                struct drm_crtc_state *crtc_state,
>>>> -             struct msm_display_topology topology);
>>>> +             struct msm_display_topology *topology);
>>>>
>>>>    /**
>>>>     * dpu_rm_reserve - Given the encoder for the display chain, 
>>>> release any
>>
>>
>>

WARNING: multiple messages have this Message-ID (diff)
From: Abhinav Kumar <quic_abhinavk@quicinc.com>
To: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: freedreno@lists.freedesktop.org, Sean Paul <sean@poorly.run>,
	Bjorn Andersson <andersson@kernel.org>,
	dri-devel@lists.freedesktop.org,
	Stephen Boyd <swboyd@chromium.org>,
	linux-arm-msm@vger.kernel.org
Subject: Re: [RFC PATCH v2 05/13] drm/msm/dpu: get rid of struct dpu_rm_requirements
Date: Thu, 18 May 2023 16:19:24 -0700	[thread overview]
Message-ID: <f8f56ea1-b0fb-68be-7e62-4741f82a4ccf@quicinc.com> (raw)
In-Reply-To: <7b385f62-7818-a28c-0d88-a825f3b58dce@quicinc.com>



On 5/17/2023 4:53 PM, Abhinav Kumar wrote:
> 
> 
> On 5/14/2023 10:06 AM, Dmitry Baryshkov wrote:
>> On Sat, 13 May 2023 at 01:39, Abhinav Kumar 
>> <quic_abhinavk@quicinc.com> wrote:
>>> On 3/20/2023 6:18 PM, Dmitry Baryshkov wrote:
>>>> The struct dpu_rm_requirements was used to wrap display topology and
>>>> hw resources, which meant INTF indices. As of commit ef58e0ad3436
>>>> ("drm/msm/dpu: get INTF blocks directly rather than through RM") the hw
>>>> resources struct was removed, leaving struct dpu_rm_requirements
>>>> containing a single field (topology). Remove the useless wrapper.
>>>>
>>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
>>>> ---
>>>
>>> Irrespective of where we plan to have the topology, this change doesn't
>>> seem incorrect as such.
>>>
>>> The only thing I can think of is when we need more information to be
>>> passed to the RM to allocate the blocks in addition to the topology this
>>> struct could have been expanded.
>>>
>>> So one example I can think of is lets say I want to add CDM block
>>> support. Then that information is outside of topology today because I
>>> will use CDM if my output format is yuv. It has nothing to do with
>>> topology but that block still needs to come from RM.
>>
>> I'd say, it is a part of the topology. CDM blocks are a part of the
>> pipeline, aren't they?
>>
>> If you prefer, we can rename msm_display_topology to 
>> dpu_rm_requirements itself.
>>
> 
> I am fine with renaming msm_display_topology to dpu_rm_requirements.
> 
> Because making CDM part of topology wont be right.
> 

Just to add, perhaps rename it to dpu_rm_display_requirements

>>> I know that usually I have lost on these type of discussions saying that
>>> if the code is not there yet, it should be dropped but I do have a plan
>>> to add that support soon probably by the next cycle. That time we will
>>> need some sort of wrapper to hold the topology and "extra" information
>>> to allocate the blocks.
>>>
>>> One alternative ofcourse is to expand dpu_rm_reserve() to accept
>>> something like "needs_cdm" but this is not scalable.
>>>
>>> Thoughts?
>>>
>>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c |  2 +-
>>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c      | 69 
>>>> +++++++--------------
>>>>    drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h      |  2 +-
>>>>    3 files changed, 23 insertions(+), 50 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c 
>>>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>>>> index 4ee708264f3b..a2cb23dea0b8 100644
>>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>>>> @@ -638,7 +638,7 @@ static int dpu_encoder_virt_atomic_check(
>>>>
>>>>                if (!crtc_state->active_changed || crtc_state->enable)
>>>>                        ret = dpu_rm_reserve(&dpu_kms->rm, global_state,
>>>> -                                     drm_enc, crtc_state, topology);
>>>> +                                     drm_enc, crtc_state, &topology);
>>>>        }
>>>>
>>>>        trace_dpu_enc_atomic_check_flags(DRMID(drm_enc), 
>>>> adj_mode->flags);
>>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c 
>>>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
>>>> index f4dda88a73f7..952e139c0234 100644
>>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
>>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c
>>>> @@ -24,15 +24,6 @@ static inline bool reserved_by_other(uint32_t 
>>>> *res_map, int idx,
>>>>        return res_map[idx] && res_map[idx] != enc_id;
>>>>    }
>>>>
>>>> -/**
>>>> - * struct dpu_rm_requirements - Reservation requirements parameter 
>>>> bundle
>>>> - * @topology:  selected topology for the display
>>>> - * @hw_res:     Hardware resources required as reported by the 
>>>> encoders
>>>> - */
>>>> -struct dpu_rm_requirements {
>>>> -     struct msm_display_topology topology;
>>>> -};
>>>> -
>>>>    int dpu_rm_destroy(struct dpu_rm *rm)
>>>>    {
>>>>        int i;
>>>> @@ -329,14 +320,13 @@ static bool _dpu_rm_check_lm_peer(struct 
>>>> dpu_rm *rm, int primary_idx,
>>>>     *      mixer in rm->pingpong_blks[].
>>>>     * @dspp_idx: output parameter, index of dspp block attached to 
>>>> the layer
>>>>     *      mixer in rm->dspp_blks[].
>>>> - * @reqs: input parameter, rm requirements for HW blocks needed in the
>>>> - *      datapath.
>>>> + * @topology:  selected topology for the display
>>>>     * Return: true if lm matches all requirements, false otherwise
>>>>     */
>>>>    static bool _dpu_rm_check_lm_and_get_connected_blks(struct dpu_rm 
>>>> *rm,
>>>>                struct dpu_global_state *global_state,
>>>>                uint32_t enc_id, int lm_idx, int *pp_idx, int *dspp_idx,
>>>> -             struct dpu_rm_requirements *reqs)
>>>> +             struct msm_display_topology *topology)
>>>>    {
>>>>        const struct dpu_lm_cfg *lm_cfg;
>>>>        int idx;
>>>> @@ -361,7 +351,7 @@ static bool 
>>>> _dpu_rm_check_lm_and_get_connected_blks(struct dpu_rm *rm,
>>>>        }
>>>>        *pp_idx = idx;
>>>>
>>>> -     if (!reqs->topology.num_dspp)
>>>> +     if (!topology->num_dspp)
>>>>                return true;
>>>>
>>>>        idx = lm_cfg->dspp - DSPP_0;
>>>> @@ -383,7 +373,7 @@ static bool 
>>>> _dpu_rm_check_lm_and_get_connected_blks(struct dpu_rm *rm,
>>>>    static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>                               struct dpu_global_state *global_state,
>>>>                               uint32_t enc_id,
>>>> -                            struct dpu_rm_requirements *reqs)
>>>> +                            struct msm_display_topology *topology)
>>>>
>>>>    {
>>>>        int lm_idx[MAX_BLOCKS];
>>>> @@ -391,14 +381,14 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>        int dspp_idx[MAX_BLOCKS] = {0};
>>>>        int i, j, lm_count = 0;
>>>>
>>>> -     if (!reqs->topology.num_lm) {
>>>> -             DPU_ERROR("invalid number of lm: %d\n", 
>>>> reqs->topology.num_lm);
>>>> +     if (!topology->num_lm) {
>>>> +             DPU_ERROR("invalid number of lm: %d\n", 
>>>> topology->num_lm);
>>>>                return -EINVAL;
>>>>        }
>>>>
>>>>        /* Find a primary mixer */
>>>>        for (i = 0; i < ARRAY_SIZE(rm->mixer_blks) &&
>>>> -                     lm_count < reqs->topology.num_lm; i++) {
>>>> +                     lm_count < topology->num_lm; i++) {
>>>>                if (!rm->mixer_blks[i])
>>>>                        continue;
>>>>
>>>> @@ -407,7 +397,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>
>>>>                if (!_dpu_rm_check_lm_and_get_connected_blks(rm, 
>>>> global_state,
>>>>                                enc_id, i, &pp_idx[lm_count],
>>>> -                             &dspp_idx[lm_count], reqs)) {
>>>> +                             &dspp_idx[lm_count], topology)) {
>>>>                        continue;
>>>>                }
>>>>
>>>> @@ -415,7 +405,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>
>>>>                /* Valid primary mixer found, find matching peers */
>>>>                for (j = i + 1; j < ARRAY_SIZE(rm->mixer_blks) &&
>>>> -                             lm_count < reqs->topology.num_lm; j++) {
>>>> +                             lm_count < topology->num_lm; j++) {
>>>>                        if (!rm->mixer_blks[j])
>>>>                                continue;
>>>>
>>>> @@ -428,7 +418,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>                        if (!_dpu_rm_check_lm_and_get_connected_blks(rm,
>>>>                                        global_state, enc_id, j,
>>>>                                        &pp_idx[lm_count], 
>>>> &dspp_idx[lm_count],
>>>> -                                     reqs)) {
>>>> +                                     topology)) {
>>>>                                continue;
>>>>                        }
>>>>
>>>> @@ -437,7 +427,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>                }
>>>>        }
>>>>
>>>> -     if (lm_count != reqs->topology.num_lm) {
>>>> +     if (lm_count != topology->num_lm) {
>>>>                DPU_DEBUG("unable to find appropriate mixers\n");
>>>>                return -ENAVAIL;
>>>>        }
>>>> @@ -446,7 +436,7 @@ static int _dpu_rm_reserve_lms(struct dpu_rm *rm,
>>>>                global_state->mixer_to_enc_id[lm_idx[i]] = enc_id;
>>>>                global_state->pingpong_to_enc_id[pp_idx[i]] = enc_id;
>>>>                global_state->dspp_to_enc_id[dspp_idx[i]] =
>>>> -                     reqs->topology.num_dspp ? enc_id : 0;
>>>> +                     topology->num_dspp ? enc_id : 0;
>>>>
>>>>                trace_dpu_rm_reserve_lms(lm_idx[i] + LM_0, enc_id,
>>>>                                         pp_idx[i] + PINGPONG_0);
>>>> @@ -539,44 +529,30 @@ static int _dpu_rm_make_reservation(
>>>>                struct dpu_rm *rm,
>>>>                struct dpu_global_state *global_state,
>>>>                struct drm_encoder *enc,
>>>> -             struct dpu_rm_requirements *reqs)
>>>> +             struct msm_display_topology *topology)
>>>>    {
>>>>        int ret;
>>>>
>>>> -     ret = _dpu_rm_reserve_lms(rm, global_state, enc->base.id, reqs);
>>>> +     ret = _dpu_rm_reserve_lms(rm, global_state, enc->base.id, 
>>>> topology);
>>>>        if (ret) {
>>>>                DPU_ERROR("unable to find appropriate mixers\n");
>>>>                return ret;
>>>>        }
>>>>
>>>>        ret = _dpu_rm_reserve_ctls(rm, global_state, enc->base.id,
>>>> -                             &reqs->topology);
>>>> +                                topology);
>>>>        if (ret) {
>>>>                DPU_ERROR("unable to find appropriate CTL\n");
>>>>                return ret;
>>>>        }
>>>>
>>>> -     ret  = _dpu_rm_reserve_dsc(rm, global_state, enc, 
>>>> &reqs->topology);
>>>> +     ret  = _dpu_rm_reserve_dsc(rm, global_state, enc, topology);
>>>>        if (ret)
>>>>                return ret;
>>>>
>>>>        return ret;
>>>>    }
>>>>
>>>> -static int _dpu_rm_populate_requirements(
>>>> -             struct drm_encoder *enc,
>>>> -             struct dpu_rm_requirements *reqs,
>>>> -             struct msm_display_topology req_topology)
>>>> -{
>>>> -     reqs->topology = req_topology;
>>>> -
>>>> -     DRM_DEBUG_KMS("num_lm: %d num_dsc: %d num_intf: %d\n",
>>>> -                   reqs->topology.num_lm, reqs->topology.num_dsc,
>>>> -                   reqs->topology.num_intf);
>>>> -
>>>> -     return 0;
>>>> -}
>>>> -
>>>>    static void _dpu_rm_clear_mapping(uint32_t *res_mapping, int cnt,
>>>>                                  uint32_t enc_id)
>>>>    {
>>>> @@ -608,9 +584,8 @@ int dpu_rm_reserve(
>>>>                struct dpu_global_state *global_state,
>>>>                struct drm_encoder *enc,
>>>>                struct drm_crtc_state *crtc_state,
>>>> -             struct msm_display_topology topology)
>>>> +             struct msm_display_topology *topology)
>>>>    {
>>>> -     struct dpu_rm_requirements reqs;
>>>>        int ret;
>>>>
>>>>        /* Check if this is just a page-flip */
>>>> @@ -625,13 +600,11 @@ int dpu_rm_reserve(
>>>>        DRM_DEBUG_KMS("reserving hw for enc %d crtc %d\n",
>>>>                      enc->base.id, crtc_state->crtc->base.id);
>>>>
>>>> -     ret = _dpu_rm_populate_requirements(enc, &reqs, topology);
>>>> -     if (ret) {
>>>> -             DPU_ERROR("failed to populate hw requirements\n");
>>>> -             return ret;
>>>> -     }
>>>> +     DRM_DEBUG_KMS("num_lm: %d num_dsc: %d num_intf: %d\n",
>>>> +                   topology->num_lm, topology->num_dsc,
>>>> +                   topology->num_intf);
>>>>
>>>> -     ret = _dpu_rm_make_reservation(rm, global_state, enc, &reqs);
>>>> +     ret = _dpu_rm_make_reservation(rm, global_state, enc, topology);
>>>>        if (ret)
>>>>                DPU_ERROR("failed to reserve hw resources: %d\n", ret);
>>>>
>>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h 
>>>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h
>>>> index d62c2edb2460..f05697462856 100644
>>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h
>>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h
>>>> @@ -71,7 +71,7 @@ int dpu_rm_reserve(struct dpu_rm *rm,
>>>>                struct dpu_global_state *global_state,
>>>>                struct drm_encoder *drm_enc,
>>>>                struct drm_crtc_state *crtc_state,
>>>> -             struct msm_display_topology topology);
>>>> +             struct msm_display_topology *topology);
>>>>
>>>>    /**
>>>>     * dpu_rm_reserve - Given the encoder for the display chain, 
>>>> release any
>>
>>
>>

  reply	other threads:[~2023-05-18 23:19 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-21  1:18 [RFC PATCH v2 00/13] drm/msm/dpu: support virtual wide planes Dmitry Baryshkov
2023-03-21  1:18 ` Dmitry Baryshkov
2023-03-21  1:18 ` [RFC PATCH v2 01/13] drm/atomic-helper: split not-scaling part of drm_atomic_helper_check_plane_state Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-03-21  1:18 ` [RFC PATCH v2 02/13] drm/msm/dpu: take plane rotation into account for wide planes Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-05-12 22:12   ` Abhinav Kumar
2023-05-12 22:12     ` Abhinav Kumar
2023-05-14 17:01     ` Dmitry Baryshkov
2023-05-14 17:01       ` Dmitry Baryshkov
2023-05-15 18:45       ` Abhinav Kumar
2023-05-15 18:45         ` Abhinav Kumar
2023-05-15 19:12         ` Dmitry Baryshkov
2023-05-15 19:12           ` Dmitry Baryshkov
2023-05-15 19:32           ` Abhinav Kumar
2023-05-15 19:32             ` Abhinav Kumar
2023-03-21  1:18 ` [RFC PATCH v2 03/13] drm/msm/dpu: encoder: simplify debugfs handling Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-05-12 22:18   ` Abhinav Kumar
2023-05-12 22:18     ` Abhinav Kumar
2023-05-14 17:02     ` Dmitry Baryshkov
2023-05-14 17:02       ` Dmitry Baryshkov
2023-03-21  1:18 ` [RFC PATCH v2 04/13] drm/msm/dpu: remove unused fields from dpu_encoder_virt Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-06-06 20:25   ` [Freedreno] " Abhinav Kumar
2023-06-06 20:25     ` Abhinav Kumar
2023-06-06 20:29     ` Dmitry Baryshkov
2023-06-06 20:29       ` Dmitry Baryshkov
2023-06-06 20:36       ` Abhinav Kumar
2023-06-06 20:36         ` Abhinav Kumar
2023-03-21  1:18 ` [RFC PATCH v2 05/13] drm/msm/dpu: get rid of struct dpu_rm_requirements Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-05-12 22:39   ` Abhinav Kumar
2023-05-12 22:39     ` Abhinav Kumar
2023-05-14 17:06     ` Dmitry Baryshkov
2023-05-14 17:06       ` Dmitry Baryshkov
2023-05-17 23:53       ` Abhinav Kumar
2023-05-17 23:53         ` Abhinav Kumar
2023-05-18 23:19         ` Abhinav Kumar [this message]
2023-05-18 23:19           ` Abhinav Kumar
2023-03-21  1:18 ` [RFC PATCH v2 06/13] drm/msm/dpu: switch RM to use crtc_id rather than enc_id for allocation Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-05-18 23:46   ` Abhinav Kumar
2023-05-18 23:46     ` Abhinav Kumar
2023-05-19  1:50     ` Dmitry Baryshkov
2023-05-19  1:50       ` Dmitry Baryshkov
2023-05-22 22:22       ` [Freedreno] " Abhinav Kumar
2023-05-22 22:22         ` Abhinav Kumar
2023-05-23  7:25         ` Dmitry Baryshkov
2023-05-23  7:25           ` Dmitry Baryshkov
2023-03-21  1:18 ` [RFC PATCH v2 07/13] drm/msm/dpu: move resource allocation to CRTC Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-03-21  1:18 ` [RFC PATCH v2 08/13] drm/msm/dpu: fill CRTC resources in dpu_crtc.c Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-03-21  1:18 ` [RFC PATCH v2 09/13] drm/msm/dpu: move pstate->pipe initialization to dpu_plane_atomic_check Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-05-24 22:46   ` Abhinav Kumar
2023-05-24 22:46     ` Abhinav Kumar
2023-05-24 23:04     ` [Freedreno] " Abhinav Kumar
2023-05-24 23:04       ` Abhinav Kumar
2023-05-25  1:40       ` Dmitry Baryshkov
2023-05-25  1:40         ` Dmitry Baryshkov
2023-06-06 20:27         ` Abhinav Kumar
2023-06-06 20:27           ` Abhinav Kumar
2023-03-21  1:18 ` [RFC PATCH v2 10/13] drm/msm/dpu: add list of supported formats to the DPU caps Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-05-24 23:16   ` Abhinav Kumar
2023-05-24 23:16     ` Abhinav Kumar
2023-05-25  1:47     ` Dmitry Baryshkov
2023-05-25  1:47       ` Dmitry Baryshkov
2023-06-06 21:14       ` Abhinav Kumar
2023-06-06 21:14         ` Abhinav Kumar
2023-06-06 21:29         ` Dmitry Baryshkov
2023-06-06 21:29           ` Dmitry Baryshkov
2023-06-06 21:47           ` Abhinav Kumar
2023-06-06 21:47             ` Abhinav Kumar
2023-06-06 21:52             ` Dmitry Baryshkov
2023-06-06 21:52               ` Dmitry Baryshkov
2023-06-06 22:47               ` Abhinav Kumar
2023-06-06 22:47                 ` Abhinav Kumar
2023-06-06 22:50                 ` Dmitry Baryshkov
2023-06-06 22:50                   ` Dmitry Baryshkov
2023-06-06 22:57                   ` [Freedreno] " Abhinav Kumar
2023-06-06 22:57                     ` Abhinav Kumar
2023-06-06 22:59                     ` Dmitry Baryshkov
2023-06-06 22:59                       ` Dmitry Baryshkov
2023-06-06 23:14                       ` Abhinav Kumar
2023-06-06 23:14                         ` Abhinav Kumar
2023-06-06 23:21                         ` Dmitry Baryshkov
2023-06-06 23:21                           ` Dmitry Baryshkov
2023-06-07  1:12                           ` Abhinav Kumar
2023-06-07  1:12                             ` Abhinav Kumar
2023-03-21  1:18 ` [RFC PATCH v2 11/13] drm/msm/dpu: add a field describing inline rotation to dpu_caps Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-05-24 23:20   ` Abhinav Kumar
2023-05-24 23:20     ` Abhinav Kumar
2023-05-25  1:47     ` Dmitry Baryshkov
2023-05-25  1:47       ` Dmitry Baryshkov
2023-03-21  1:18 ` [RFC PATCH v2 12/13] drm/msm/dpu: add support for virtual planes Dmitry Baryshkov
2023-03-21  1:18   ` Dmitry Baryshkov
2023-06-07 21:05   ` Abhinav Kumar
2023-06-07 21:05     ` Abhinav Kumar
2023-06-07 21:56     ` Dmitry Baryshkov
2023-06-07 21:56       ` Dmitry Baryshkov
2023-06-08 19:51       ` Abhinav Kumar
2023-06-08 19:51         ` Abhinav Kumar
2023-06-10  0:00         ` Abhinav Kumar
2023-06-10  0:00           ` Abhinav Kumar
2023-03-21  1:18 ` [RFC PATCH v2 13/13] drm/msm/dpu: allow using two SSPP blocks for a single plane Dmitry Baryshkov
2023-03-21  1:18   ` 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=f8f56ea1-b0fb-68be-7e62-4741f82a4ccf@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=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.