Re: [RESEND RFC 04/18] drm/display/dp_mst: Call them time slots, not VCPI slots

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2022-06-15 at 04:28 +0000, Lin, Wayne wrote:
> [Public]
> 
> Thank you Lyude for addressing this!
> 
> VCPI is also a confusing naming to me at first glance since it stands for 
> Virtual Channel Payload Identification which is just an ID number ( we can 
>  look up these payload IDs In DPCD 0x2C1 ~0x2FF).
> 
> I also look up left VCPI terms in rest of the code. Seems like we still can
> modify 
> some parts here? Like:
> 
> /**
>  * struct drm_dp_vcpi - Virtual Channel Payload Identifier
>  * @vcpi: Virtual channel ID.
>  * @pbn: Payload Bandwidth Number for this channel
>  * @aligned_pbn: PBN aligned with slot size
>  * @num_slots: number of slots for this PBN
>  */
> struct drm_dp_vcpi {
>         int vcpi;
>         int pbn;
>         int aligned_pbn;
>         int num_slots;
> };
> 
> Would like to change the structure name to  "struct drm_dp_mst_vcp {}" to
> represent
> the virtual channel payload. Not specific to the ID.
> Would like to know your thoughts : )

JFYI - I didn't rename this structure because we actually remove it entirely
in later patches

> 
> > -----Original Message-----
> > From: Lyude Paul <lyude@xxxxxxxxxx>
> > Sent: Wednesday, June 8, 2022 3:29 AM
> > To: dri-devel@xxxxxxxxxxxxxxxxxxxxx; nouveau@xxxxxxxxxxxxxxxxxxxxx; amd-
> > gfx@xxxxxxxxxxxxxxxxxxxxx
> > Cc: Lin, Wayne <Wayne.Lin@xxxxxxx>; Ville Syrjälä
> > <ville.syrjala@xxxxxxxxxxxxxxx>; Zuo, Jerry <Jerry.Zuo@xxxxxxx>; Jani
> > Nikula
> > <jani.nikula@xxxxxxxxx>; Imre Deak <imre.deak@xxxxxxxxx>; Daniel Vetter
> > <daniel.vetter@xxxxxxxx>; Sean Paul <sean@xxxxxxxxxx>; Wentland, Harry
> > <Harry.Wentland@xxxxxxx>; Li, Sun peng (Leo) <Sunpeng.Li@xxxxxxx>;
> > Siqueira, Rodrigo <Rodrigo.Siqueira@xxxxxxx>; Deucher, Alexander
> > <Alexander.Deucher@xxxxxxx>; Koenig, Christian
> > <Christian.Koenig@xxxxxxx>; Pan, Xinhui <Xinhui.Pan@xxxxxxx>; David
> > Airlie <airlied@xxxxxxxx>; Daniel Vetter <daniel@xxxxxxxx>; Jani Nikula
> > <jani.nikula@xxxxxxxxxxxxxxx>; Joonas Lahtinen
> > <joonas.lahtinen@xxxxxxxxxxxxxxx>; Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>;
> > Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxxxxxxxx>; Ben Skeggs
> > <bskeggs@xxxxxxxxxx>; Karol Herbst <kherbst@xxxxxxxxxx>; Kazlauskas,
> > Nicholas <Nicholas.Kazlauskas@xxxxxxx>; Li, Roman
> > <Roman.Li@xxxxxxx>; Shih, Jude <Jude.Shih@xxxxxxx>; Simon Ser
> > <contact@xxxxxxxxxxx>; Wu, Hersen <hersenxs.wu@xxxxxxx>; Thomas
> > Zimmermann <tzimmermann@xxxxxxx>; Lakha, Bhawanpreet
> > <Bhawanpreet.Lakha@xxxxxxx>; José Roberto de Souza
> > <jose.souza@xxxxxxxxx>; He Ying <heying24@xxxxxxxxxx>; Matt Roper
> > <matthew.d.roper@xxxxxxxxx>; Sean Paul <seanpaul@xxxxxxxxxxxx>; Hans
> > Verkuil <hverkuil-cisco@xxxxxxxxx>; Fernando Ramos <greenfoo@xxxxxx>;
> > Javier Martinez Canillas <javierm@xxxxxxxxxx>; open list <linux-
> > kernel@xxxxxxxxxxxxxxx>; open list:INTEL DRM DRIVERS <intel-
> > gfx@xxxxxxxxxxxxxxxxxxxxx>
> > Subject: [RESEND RFC 04/18] drm/display/dp_mst: Call them time slots, not
> > VCPI slots
> > 
> > VCPI is only sort of the correct term here, originally the majority of
> > this code
> > simply referred to timeslots vaguely as "slots" - and since I started
> > working
> > on it and adding atomic functionality, the name "VCPI slots" has been used
> > to
> > represent time slots.
> > 
> > Now that we actually have consistent access to the DisplayPort spec thanks
> > to
> > VESA, I now know this isn't actually the proper term - as the
> > specification
> > refers to these as time slots.
> > 
> > Since we're trying to make this code as easy to figure out as possible,
> > let's
> > take this opportunity to correct this nomenclature and call them by their
> > proper name - timeslots. Likewise, we rename various functions
> > appropriately, along with replacing references in the kernel documentation
> > and various debugging messages.
> > 
> > It's important to note that this patch series leaves the legacy MST code
> > untouched for the most part, which is fine since we'll be removing it soon
> > anyhow. There should be no functional changes in this series.
> > 
> > Signed-off-by: Lyude Paul <lyude@xxxxxxxxxx>
> > Cc: Wayne Lin <Wayne.Lin@xxxxxxx>
> > Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> > Cc: Fangzhi Zuo <Jerry.Zuo@xxxxxxx>
> > Cc: Jani Nikula <jani.nikula@xxxxxxxxx>
> > Cc: Imre Deak <imre.deak@xxxxxxxxx>
> > Cc: Daniel Vetter <daniel.vetter@xxxxxxxx>
> > Cc: Sean Paul <sean@xxxxxxxxxx>
> > ---
> >  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |   2 +-
> >  .../display/amdgpu_dm/amdgpu_dm_mst_types.c   |  28 ++---
> >  drivers/gpu/drm/display/drm_dp_mst_topology.c | 106 +++++++++---------
> >  drivers/gpu/drm/i915/display/intel_dp_mst.c   |   5 +-
> >  drivers/gpu/drm/nouveau/dispnv50/disp.c       |   4 +-
> >  include/drm/display/drm_dp_mst_helper.h       |   6 +-
> >  6 files changed, 75 insertions(+), 76 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> > b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> > index ad4571190a90..f84a4ad736d8 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> > @@ -7393,7 +7393,7 @@ static int dm_encoder_helper_atomic_check(struct
> > drm_encoder *encoder,
> >                 clock = adjusted_mode->clock;
> >                 dm_new_connector_state->pbn =
> > drm_dp_calc_pbn_mode(clock, bpp, false);
> >         }
> > -       dm_new_connector_state->vcpi_slots =
> > drm_dp_atomic_find_vcpi_slots(state,
> > +       dm_new_connector_state->vcpi_slots =
> > +drm_dp_atomic_find_time_slots(state,
> > 
> > mst_mgr,
> > 
> > mst_port,
> > 
> > dm_new_connector_state->pbn, diff --git
> > a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
> > b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
> > index 9221b6690a4a..e40ff51e7be0 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
> > @@ -378,7 +378,7 @@ static int dm_dp_mst_atomic_check(struct
> > drm_connector *connector,
> >                         return 0;
> >                 }
> > 
> > -       return drm_dp_atomic_release_vcpi_slots(state,
> > +       return drm_dp_atomic_release_time_slots(state,
> >                                                 mst_mgr,
> >                                                 mst_port);
> >  }
> > @@ -689,7 +689,7 @@ static void increase_dsc_bpp(struct
> > drm_atomic_state *state,
> > 
> >                 if (initial_slack[next_index] > fair_pbn_alloc) {
> >                         vars[next_index].pbn += fair_pbn_alloc;
> > -                       if (drm_dp_atomic_find_vcpi_slots(state,
> > +                       if (drm_dp_atomic_find_time_slots(state,
> > 
> > params[next_index].port->mgr,
> > 
> > params[next_index].port,
> > 
> > vars[next_index].pbn,
> > @@ -699,7 +699,7 @@ static void increase_dsc_bpp(struct
> > drm_atomic_state *state,
> >                                 vars[next_index].bpp_x16 =
> > bpp_x16_from_pbn(params[next_index], vars[next_index].pbn);
> >                         } else {
> >                                 vars[next_index].pbn -= fair_pbn_alloc;
> > -                               if (drm_dp_atomic_find_vcpi_slots(state,
> > +                               if (drm_dp_atomic_find_time_slots(state,
> > 
> > params[next_index].port->mgr,
> > 
> > params[next_index].port,
> > 
> > vars[next_index].pbn,
> > @@ -708,7 +708,7 @@ static void increase_dsc_bpp(struct
> > drm_atomic_state *state,
> >                         }
> >                 } else {
> >                         vars[next_index].pbn += initial_slack[next_index];
> > -                       if (drm_dp_atomic_find_vcpi_slots(state,
> > +                       if (drm_dp_atomic_find_time_slots(state,
> > 
> > params[next_index].port->mgr,
> > 
> > params[next_index].port,
> > 
> > vars[next_index].pbn,
> > @@ -718,7 +718,7 @@ static void increase_dsc_bpp(struct
> > drm_atomic_state *state,
> >                                 vars[next_index].bpp_x16 =
> > params[next_index].bw_range.max_target_bpp_x16;
> >                         } else {
> >                                 vars[next_index].pbn -=
> > initial_slack[next_index];
> > -                               if (drm_dp_atomic_find_vcpi_slots(state,
> > +                               if (drm_dp_atomic_find_time_slots(state,
> > 
> > params[next_index].port->mgr,
> > 
> > params[next_index].port,
> > 
> > vars[next_index].pbn,
> > @@ -775,7 +775,7 @@ static void try_disable_dsc(struct drm_atomic_state
> > *state,
> >                         break;
> > 
> >                 vars[next_index].pbn =
> > kbps_to_peak_pbn(params[next_index].bw_range.stream_kbps);
> > -               if (drm_dp_atomic_find_vcpi_slots(state,
> > +               if (drm_dp_atomic_find_time_slots(state,
> >                                                   params[next_index].port-
> > > mgr,
> >                                                   params[next_index].port,
> >                                                   vars[next_index].pbn,
> > @@ -787,7 +787,7 @@ static void try_disable_dsc(struct drm_atomic_state
> > *state,
> >                         vars[next_index].bpp_x16 = 0;
> >                 } else {
> >                         vars[next_index].pbn =
> > kbps_to_peak_pbn(params[next_index].bw_range.max_kbps);
> > -                       if (drm_dp_atomic_find_vcpi_slots(state,
> > +                       if (drm_dp_atomic_find_time_slots(state,
> > 
> > params[next_index].port->mgr,
> > 
> > params[next_index].port,
> > 
> > vars[next_index].pbn,
> > @@ -873,11 +873,11 @@ static bool
> > compute_mst_dsc_configs_for_link(struct drm_atomic_state *state,
> >                 vars[i + k].pbn =
> > kbps_to_peak_pbn(params[i].bw_range.stream_kbps);
> >                 vars[i + k].dsc_enabled = false;
> >                 vars[i + k].bpp_x16 = 0;
> > -               if (drm_dp_atomic_find_vcpi_slots(state,
> > -                                                params[i].port->mgr,
> > -                                                params[i].port,
> > -                                                vars[i + k].pbn,
> > -
> > dm_mst_get_pbn_divider(dc_link)) < 0)
> > +               if (drm_dp_atomic_find_time_slots(state,
> > +                                                 params[i].port->mgr,
> > +                                                 params[i].port,
> > +                                                 vars[i + k].pbn,
> > +
> > dm_mst_get_pbn_divider(dc_link)) < 0)
> >                         return false;
> >         }
> >         if (!drm_dp_mst_atomic_check(state) && !debugfs_overwrite) { @@
> > -891,7 +891,7 @@ static bool compute_mst_dsc_configs_for_link(struct
> > drm_atomic_state *state,
> >                         vars[i + k].pbn =
> > kbps_to_peak_pbn(params[i].bw_range.min_kbps);
> >                         vars[i + k].dsc_enabled = true;
> >                         vars[i + k].bpp_x16 =
> > params[i].bw_range.min_target_bpp_x16;
> > -                       if (drm_dp_atomic_find_vcpi_slots(state,
> > +                       if (drm_dp_atomic_find_time_slots(state,
> >                                                           params[i].port-
> > >mgr,
> >                                                           params[i].port,
> >                                                           vars[i + k].pbn,
> > @@ -901,7 +901,7 @@ static bool compute_mst_dsc_configs_for_link(struct
> > drm_atomic_state *state,
> >                         vars[i + k].pbn =
> > kbps_to_peak_pbn(params[i].bw_range.stream_kbps);
> >                         vars[i + k].dsc_enabled = false;
> >                         vars[i + k].bpp_x16 = 0;
> > -                       if (drm_dp_atomic_find_vcpi_slots(state,
> > +                       if (drm_dp_atomic_find_time_slots(state,
> >                                                           params[i].port-
> > >mgr,
> >                                                           params[i].port,
> >                                                           vars[i + k].pbn,
> > diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > index 38eecb89e22d..702ff5d9ecc7 100644
> > --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> > @@ -4304,11 +4304,11 @@ struct edid *drm_dp_mst_get_edid(struct
> > drm_connector *connector, struct drm_dp_
> > EXPORT_SYMBOL(drm_dp_mst_get_edid);
> > 
> >  /**
> > - * drm_dp_find_vcpi_slots() - Find VCPI slots for this PBN value
> > + * drm_dp_find_vcpi_slots() - Find time slots for this PBN value
> >   * @mgr: manager to use
> >   * @pbn: payload bandwidth to convert into slots.
> >   *
> > - * Calculate the number of VCPI slots that will be required for the given
> > PBN
> > + * Calculate the number of time slots that will be required for the
> > + given PBN
> >   * value. This function is deprecated, and should not be used in atomic
> >   * drivers.
> >   *
> > @@ -4345,17 +4345,17 @@ static int drm_dp_init_vcpi(struct
> > drm_dp_mst_topology_mgr *mgr,  }
> > 
> >  /**
> > - * drm_dp_atomic_find_vcpi_slots() - Find and add VCPI slots to the state
> > + * drm_dp_atomic_find_time_slots() - Find and add time slots to the
> > + state
> >   * @state: global atomic state
> >   * @mgr: MST topology manager for the port
> > - * @port: port to find vcpi slots for
> > + * @port: port to find time slots for
> >   * @pbn: bandwidth required for the mode in PBN
> >   * @pbn_div: divider for DSC mode that takes FEC into account
> >   *
> > - * Allocates VCPI slots to @port, replacing any previous VCPI allocations
> > it
> > + * Allocates time slots to @port, replacing any previous timeslot
> > + allocations it
> >   * may have had. Any atomic drivers which support MST must call this
> > function
> >   * in their &drm_encoder_helper_funcs.atomic_check() callback to change
> > the
> > - * current VCPI allocation for the new state, but only when
> > + * current timeslot allocation for the new state, but only when
> >   * &drm_crtc_state.mode_changed or &drm_crtc_state.connectors_changed
> > is set
> >   * to ensure compatibility with userspace applications that still use the
> >   * legacy modesetting UAPI.
> > @@ -4365,17 +4365,17 @@ static int drm_dp_init_vcpi(struct
> > drm_dp_mst_topology_mgr *mgr,
> >   *
> >   * Additionally, it is OK to call this function multiple times on the
> > same
> >   * @port as needed. It is not OK however, to call this function and
> > - * drm_dp_atomic_release_vcpi_slots() in the same atomic check phase.
> > + * drm_dp_atomic_release_time_slots() in the same atomic check phase.
> >   *
> >   * See also:
> > - * drm_dp_atomic_release_vcpi_slots()
> > + * drm_dp_atomic_release_time_slots()
> >   * drm_dp_mst_atomic_check()
> >   *
> >   * Returns:
> >   * Total slots in the atomic state assigned for this port, or a negative
> > error
> >   * code if the port no longer exists
> >   */
> > -int drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
> > +int drm_dp_atomic_find_time_slots(struct drm_atomic_state *state,
> >                                   struct drm_dp_mst_topology_mgr *mgr,
> >                                   struct drm_dp_mst_port *port, int pbn,
> >                                   int pbn_div)
> > @@ -4392,17 +4392,17 @@ int drm_dp_atomic_find_vcpi_slots(struct
> > drm_atomic_state *state,
> >         list_for_each_entry(pos, &topology_state->payloads, next) {
> >                 if (pos->port == port) {
> >                         payload = pos;
> > -                       prev_slots = payload->vcpi;
> > +                       prev_slots = payload->time_slots;
> >                         prev_bw = payload->pbn;
> > 
> >                         /*
> >                          * This should never happen, unless the driver
> > tries
> > -                        * releasing and allocating the same VCPI
> > allocation,
> > +                        * releasing and allocating the same timeslot
> > allocation,
> >                          * which is an error
> >                          */
> >                         if (WARN_ON(!prev_slots)) {
> >                                 drm_err(mgr->dev,
> > -                                       "cannot allocate and release VCPI
> > on
> > [MST PORT:%p] in the same state\n",
> > +                                       "cannot allocate and release time
> > slots on [MST PORT:%p] in the
> > +same state\n",
> >                                         port);
> >                                 return -EINVAL;
> >                         }
> > @@ -4420,7 +4420,7 @@ int drm_dp_atomic_find_vcpi_slots(struct
> > drm_atomic_state *state,
> > 
> >         req_slots = DIV_ROUND_UP(pbn, pbn_div);
> > 
> > -       drm_dbg_atomic(mgr->dev, "[CONNECTOR:%d:%s] [MST PORT:%p]
> > VCPI %d -> %d\n",
> > +       drm_dbg_atomic(mgr->dev, "[CONNECTOR:%d:%s] [MST PORT:%p]
> > TU %d ->
> > +%d\n",
> >                        port->connector->base.id, port->connector->name,
> >                        port, prev_slots, req_slots);
> >         drm_dbg_atomic(mgr->dev, "[CONNECTOR:%d:%s] [MST PORT:%p]
> > PBN %d -> %d\n", @@ -4437,20 +4437,20 @@ int
> > drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
> >                 payload->port = port;
> >                 list_add(&payload->next, &topology_state->payloads);
> >         }
> > -       payload->vcpi = req_slots;
> > +       payload->time_slots = req_slots;
> >         payload->pbn = pbn;
> > 
> >         return req_slots;
> >  }
> > -EXPORT_SYMBOL(drm_dp_atomic_find_vcpi_slots);
> > +EXPORT_SYMBOL(drm_dp_atomic_find_time_slots);
> > 
> >  /**
> > - * drm_dp_atomic_release_vcpi_slots() - Release allocated vcpi slots
> > + * drm_dp_atomic_release_time_slots() - Release allocated time slots
> >   * @state: global atomic state
> >   * @mgr: MST topology manager for the port
> > - * @port: The port to release the VCPI slots from
> > + * @port: The port to release the time slots from
> >   *
> > - * Releases any VCPI slots that have been allocated to a port in the
> > atomic
> > + * Releases any time slots that have been allocated to a port in the
> > + atomic
> >   * state. Any atomic drivers which support MST must call this function in
> >   * their &drm_connector_helper_funcs.atomic_check() callback when the
> >   * connector will no longer have VCPI allocated (e.g. because its CRTC
> > was
> > @@ -4459,18 +4459,18 @@
> > EXPORT_SYMBOL(drm_dp_atomic_find_vcpi_slots);
> >   * It is OK to call this even if @port has been removed from the system.
> >   * Additionally, it is OK to call this function multiple times on the
> > same
> >   * @port as needed. It is not OK however, to call this function and
> > - * drm_dp_atomic_find_vcpi_slots() on the same @port in a single atomic
> > check
> > + * drm_dp_atomic_find_time_slots() on the same @port in a single atomic
> > + check
> >   * phase.
> >   *
> >   * See also:
> > - * drm_dp_atomic_find_vcpi_slots()
> > + * drm_dp_atomic_find_time_slots()
> >   * drm_dp_mst_atomic_check()
> >   *
> >   * Returns:
> >   * 0 if all slots for this port were added back to
> >   * &drm_dp_mst_topology_state.avail_slots or negative error code
> >   */
> > -int drm_dp_atomic_release_vcpi_slots(struct drm_atomic_state *state,
> > +int drm_dp_atomic_release_time_slots(struct drm_atomic_state *state,
> >                                      struct drm_dp_mst_topology_mgr *mgr,
> >                                      struct drm_dp_mst_port *port)
> >  {
> > @@ -4494,16 +4494,16 @@ int drm_dp_atomic_release_vcpi_slots(struct
> > drm_atomic_state *state,
> >                 return -EINVAL;
> >         }
> > 
> > -       drm_dbg_atomic(mgr->dev, "[MST PORT:%p] VCPI %d -> 0\n", port,
> > pos->vcpi);
> > -       if (pos->vcpi) {
> > +       drm_dbg_atomic(mgr->dev, "[MST PORT:%p] TU %d -> 0\n", port,
> > pos->time_slots);
> > +       if (pos->time_slots) {
> >                 drm_dp_mst_put_port_malloc(port);
> > -               pos->vcpi = 0;
> > +               pos->time_slots = 0;
> >                 pos->pbn = 0;
> >         }
> > 
> >         return 0;
> >  }
> > -EXPORT_SYMBOL(drm_dp_atomic_release_vcpi_slots);
> > +EXPORT_SYMBOL(drm_dp_atomic_release_time_slots);
> > 
> >  /**
> >   * drm_dp_mst_update_slots() - updates the slot info depending on the DP
> > ecoding format @@ -4557,7 +4557,7 @@ bool
> > drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
> > 
> >         ret = drm_dp_init_vcpi(mgr, &port->vcpi, pbn, slots);
> >         if (ret) {
> > -               drm_dbg_kms(mgr->dev, "failed to init vcpi slots=%d
> > ret=%d\n",
> > +               drm_dbg_kms(mgr->dev, "failed to init time slots=%d
> > ret=%d\n",
> >                             DIV_ROUND_UP(pbn, mgr->pbn_div), ret);
> >                 drm_dp_mst_topology_put_port(port);
> >                 goto out;
> > @@ -5083,8 +5083,8 @@ drm_dp_mst_duplicate_state(struct
> > drm_private_obj *obj)
> >         INIT_LIST_HEAD(&state->payloads);
> > 
> >         list_for_each_entry(pos, &old_state->payloads, next) {
> > -               /* Prune leftover freed VCPI allocations */
> > -               if (!pos->vcpi)
> > +               /* Prune leftover freed timeslot allocations */
> > +               if (!pos->time_slots)
> >                         continue;
> > 
> >                 payload = kmemdup(pos, sizeof(*payload), GFP_KERNEL);
> > @@ -5116,7 +5116,7 @@ static void drm_dp_mst_destroy_state(struct
> > drm_private_obj *obj,
> > 
> >         list_for_each_entry_safe(pos, tmp, &mst_state->payloads, next) {
> >                 /* We only keep references to ports with non-zero VCPIs */
> > -               if (pos->vcpi)
> > +               if (pos->time_slots)
> >                         drm_dp_mst_put_port_malloc(pos->port);
> >                 kfree(pos);
> >         }
> > @@ -5242,28 +5242,28 @@
> > drm_dp_mst_atomic_check_port_bw_limit(struct drm_dp_mst_port *port,  }
> > 
> >  static inline int
> > -drm_dp_mst_atomic_check_vcpi_alloc_limit(struct
> > drm_dp_mst_topology_mgr *mgr,
> > -                                        struct drm_dp_mst_topology_state
> > *mst_state)
> > +drm_dp_mst_atomic_check_payload_alloc_limits(struct
> > drm_dp_mst_topology_mgr *mgr,
> > +                                            struct
> > drm_dp_mst_topology_state *mst_state)
> >  {
> >         struct drm_dp_mst_atomic_payload *payload;
> >         int avail_slots = mst_state->total_avail_slots, payload_count = 0;
> > 
> >         list_for_each_entry(payload, &mst_state->payloads, next) {
> >                 /* Releasing payloads is always OK-even if the port is
> > gone */
> > -               if (!payload->vcpi) {
> > -                       drm_dbg_atomic(mgr->dev, "[MST PORT:%p]
> > releases all VCPI slots\n",
> > +               if (!payload->time_slots) {
> > +                       drm_dbg_atomic(mgr->dev, "[MST PORT:%p]
> > releases all time slots\n",
> >                                        payload->port);
> >                         continue;
> >                 }
> > 
> > -               drm_dbg_atomic(mgr->dev, "[MST PORT:%p] requires %d
> > vcpi slots\n",
> > -                              payload->port, payload->vcpi);
> > +               drm_dbg_atomic(mgr->dev, "[MST PORT:%p] requires %d
> > time slots\n",
> > +                              payload->port, payload->time_slots);
> > 
> > -               avail_slots -= payload->vcpi;
> > +               avail_slots -= payload->time_slots;
> >                 if (avail_slots < 0) {
> >                         drm_dbg_atomic(mgr->dev,
> > -                                      "[MST PORT:%p] not enough VCPI
> > slots in
> > mst state %p (avail=%d)\n",
> > -                                      payload->port, mst_state,
> > avail_slots +
> > payload->vcpi);
> > +                                      "[MST PORT:%p] not enough time
> > slots in
> > mst state %p (avail=%d)\n",
> > +                                      payload->port, mst_state,
> > avail_slots +
> > +payload->time_slots);
> >                         return -ENOSPC;
> >                 }
> > 
> > @@ -5274,7 +5274,7 @@ drm_dp_mst_atomic_check_vcpi_alloc_limit(struct
> > drm_dp_mst_topology_mgr *mgr,
> >                         return -EINVAL;
> >                 }
> >         }
> > -       drm_dbg_atomic(mgr->dev, "[MST MGR:%p] mst state %p VCPI
> > avail=%d used=%d\n",
> > +       drm_dbg_atomic(mgr->dev, "[MST MGR:%p] mst state %p TU
> > avail=%d
> > +used=%d\n",
> >                        mgr, mst_state, avail_slots, mst_state-
> > >total_avail_slots -
> > avail_slots);
> > 
> >         return 0;
> > @@ -5363,7 +5363,7 @@ int drm_dp_mst_atomic_enable_dsc(struct
> > drm_atomic_state *state,
> >         struct drm_dp_mst_topology_state *mst_state;
> >         struct drm_dp_mst_atomic_payload *pos;
> >         bool found = false;
> > -       int vcpi = 0;
> > +       int time_slots = 0;
> > 
> >         mst_state = drm_atomic_get_mst_topology_state(state, port->mgr);
> > 
> > @@ -5379,30 +5379,30 @@ int drm_dp_mst_atomic_enable_dsc(struct
> > drm_atomic_state *state,
> > 
> >         if (!found) {
> >                 drm_dbg_atomic(state->dev,
> > -                              "[MST PORT:%p] Couldn't find VCPI
> > allocation in
> > mst state %p\n",
> > +                              "[MST PORT:%p] Couldn't find payload in mst
> > state %p\n",
> >                                port, mst_state);
> >                 return -EINVAL;
> >         }
> > 
> >         if (pos->dsc_enabled == enable) {
> >                 drm_dbg_atomic(state->dev,
> > -                              "[MST PORT:%p] DSC flag is already set to
> > %d,
> > returning %d VCPI slots\n",
> > -                              port, enable, pos->vcpi);
> > -               vcpi = pos->vcpi;
> > +                              "[MST PORT:%p] DSC flag is already set to
> > %d,
> > returning %d time slots\n",
> > +                              port, enable, pos->time_slots);
> > +               time_slots = pos->time_slots;
> >         }
> > 
> >         if (enable) {
> > -               vcpi = drm_dp_atomic_find_vcpi_slots(state, port->mgr,
> > port,
> > pbn, pbn_div);
> > +               time_slots = drm_dp_atomic_find_time_slots(state, port-
> > > mgr, port,
> > +pbn, pbn_div);
> >                 drm_dbg_atomic(state->dev,
> > -                              "[MST PORT:%p] Enabling DSC flag,
> > reallocating
> > %d VCPI slots on the port\n",
> > -                              port, vcpi);
> > -               if (vcpi < 0)
> > +                              "[MST PORT:%p] Enabling DSC flag,
> > reallocating
> > %d time slots on the port\n",
> > +                              port, time_slots);
> > +               if (time_slots < 0)
> >                         return -EINVAL;
> >         }
> > 
> >         pos->dsc_enabled = enable;
> > 
> > -       return vcpi;
> > +       return time_slots;
> >  }
> >  EXPORT_SYMBOL(drm_dp_mst_atomic_enable_dsc);
> >  /**
> > @@ -5412,15 +5412,15 @@
> > EXPORT_SYMBOL(drm_dp_mst_atomic_enable_dsc);
> >   *
> >   * Checks the given topology state for an atomic update to ensure that
> > it's
> >   * valid. This includes checking whether there's enough bandwidth to
> > support
> > - * the new VCPI allocations in the atomic update.
> > + * the new timeslot allocations in the atomic update.
> >   *
> >   * Any atomic drivers supporting DP MST must make sure to call this after
> >   * checking the rest of their state in their
> >   * &drm_mode_config_funcs.atomic_check() callback.
> >   *
> >   * See also:
> > - * drm_dp_atomic_find_vcpi_slots()
> > - * drm_dp_atomic_release_vcpi_slots()
> > + * drm_dp_atomic_find_time_slots()
> > + * drm_dp_atomic_release_time_slots()
> >   *
> >   * Returns:
> >   *
> > @@ -5436,7 +5436,7 @@ int drm_dp_mst_atomic_check(struct
> > drm_atomic_state *state)
> >                 if (!mgr->mst_state)
> >                         continue;
> > 
> > -               ret = drm_dp_mst_atomic_check_vcpi_alloc_limit(mgr,
> > mst_state);
> > +               ret = drm_dp_mst_atomic_check_payload_alloc_limits(mgr,
> > mst_state);
> >                 if (ret)
> >                         break;
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > index 061b277e5ce7..0c922667398a 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
> > @@ -70,7 +70,7 @@ static int intel_dp_mst_compute_link_config(struct
> > intel_encoder *encoder,
> >                                                        crtc_state-
> > >pipe_bpp,
> >                                                        false);
> > 
> > -               slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp-
> > > mst_mgr,
> > +               slots = drm_dp_atomic_find_time_slots(state, &intel_dp-
> > > mst_mgr,
> >                                                       connector->port,
> >                                                       crtc_state->pbn,
> > 
> > drm_dp_get_vc_payload_bw(&intel_dp->mst_mgr,
> > @@ -344,8 +344,7 @@ intel_dp_mst_atomic_check(struct drm_connector
> > *connector,
> >         }
> > 
> >         mgr = &enc_to_mst(to_intel_encoder(old_conn_state-
> > > best_encoder))->primary->dp.mst_mgr;
> > -       ret = drm_dp_atomic_release_vcpi_slots(&state->base, mgr,
> > -                                              intel_connector->port);
> > +       ret = drm_dp_atomic_release_time_slots(&state->base, mgr,
> > +intel_connector->port);
> > 
> >         return ret;
> >  }
> > diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > index 4347f0b61797..631dba5a2418 100644
> > --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> > @@ -1070,7 +1070,7 @@ nv50_msto_atomic_check(struct drm_encoder
> > *encoder,
> >                                                     false);
> >         }
> > 
> > -       slots = drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr, mstc-
> > > port,
> > +       slots = drm_dp_atomic_find_time_slots(state, &mstm->mgr, mstc-
> > > port,
> >                                               asyh->dp.pbn, 0);
> >         if (slots < 0)
> >                 return slots;
> > @@ -1282,7 +1282,7 @@ nv50_mstc_atomic_check(struct drm_connector
> > *connector,
> >                         return 0;
> >         }
> > 
> > -       return drm_dp_atomic_release_vcpi_slots(state, mgr, mstc->port);
> > +       return drm_dp_atomic_release_time_slots(state, mgr, mstc->port);
> >  }
> > 
> >  static int
> > diff --git a/include/drm/display/drm_dp_mst_helper.h
> > b/include/drm/display/drm_dp_mst_helper.h
> > index 5671173f9f37..8ab4f14f2344 100644
> > --- a/include/drm/display/drm_dp_mst_helper.h
> > +++ b/include/drm/display/drm_dp_mst_helper.h
> > @@ -544,7 +544,7 @@ struct drm_dp_payload {
> > 
> >  struct drm_dp_mst_atomic_payload {
> >         struct drm_dp_mst_port *port;
> > -       int vcpi;
> > +       int time_slots;
> >         int pbn;
> >         bool dsc_enabled;
> >         struct list_head next;
> > @@ -846,7 +846,7 @@ void drm_dp_mst_connector_early_unregister(struct
> > drm_connector *connector,  struct drm_dp_mst_topology_state
> > *drm_atomic_get_mst_topology_state(struct drm_atomic_state *state,
> >                                                                     struct
> > drm_dp_mst_topology_mgr *mgr);  int __must_check -
> > drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
> > +drm_dp_atomic_find_time_slots(struct drm_atomic_state *state,
> >                               struct drm_dp_mst_topology_mgr *mgr,
> >                               struct drm_dp_mst_port *port, int pbn,
> >                               int pbn_div);
> > @@ -858,7 +858,7 @@ int __must_check
> >  drm_dp_mst_add_affected_dsc_crtcs(struct drm_atomic_state *state,
> >                                   struct drm_dp_mst_topology_mgr *mgr);
> > int __must_check -drm_dp_atomic_release_vcpi_slots(struct
> > drm_atomic_state *state,
> > +drm_dp_atomic_release_time_slots(struct drm_atomic_state *state,
> >                                  struct drm_dp_mst_topology_mgr *mgr,
> >                                  struct drm_dp_mst_port *port);
> >  int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr
> > *mgr,
> > --
> > 2.35.3
> --
> Regards,
> Wayne Lin

-- 
Cheers,
 Lyude Paul (she/her)
 Software Engineer at Red Hat




[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux