Re: [PATCH 03/14] drm/dp_mst: Simplify the condition when to enumerate path resources

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

 



On Mon, Jul 22, 2024 at 9:55 AM Imre Deak <imre.deak@xxxxxxxxx> wrote:
>
> In the
>         if (old_ddps != port->ddps || !created)
>                 if (port->ddps && !port->input)
>                         ret = drm_dp_send_enum_path_resources();
>
> sequence the first if's condition is true if the port exists already
> (!created) or the port was created anew (hence old_ddps==0) and it was
> in the plugged state (port->ddps==1). The second if's condition is true
> for output ports in the plugged state. So the function is called for an
> output port in the plugged state, regardless if it already existed or
> not and regardless of the old plugged state. In all other cases
> port->full_pbn can be zeroed as the port is either an input for which
> full_pbn is never set, or an output in the unplugged state for which
> full_pbn was already zeroed previously or the port was just created
> (with port->full_pbn==0).
>
> Simplify the condition, making it clear that the path resources are
> always enumerated for an output port in the plugged state.

Would this take care of the cases where a branch device is present
between source and the sink and
its properly allocating the resources and advertising UHBR capability
from branch to sink. This was a bug earlier
with UHBR on branch device/ MST hub

Manasi

>
> Cc: Lyude Paul <lyude@xxxxxxxxxx>
> Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx
> Signed-off-by: Imre Deak <imre.deak@xxxxxxxxx>
> ---
>  drivers/gpu/drm/display/drm_dp_mst_topology.c | 19 ++++++++-----------
>  1 file changed, 8 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> index 70e4bfc3532e0..bcc5bbed9bd04 100644
> --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> @@ -2339,7 +2339,7 @@ drm_dp_mst_handle_link_address_port(struct drm_dp_mst_branch *mstb,
>  {
>         struct drm_dp_mst_topology_mgr *mgr = mstb->mgr;
>         struct drm_dp_mst_port *port;
> -       int old_ddps = 0, ret;
> +       int ret;
>         u8 new_pdt = DP_PEER_DEVICE_NONE;
>         bool new_mcs = 0;
>         bool created = false, send_link_addr = false, changed = false;
> @@ -2372,7 +2372,6 @@ drm_dp_mst_handle_link_address_port(struct drm_dp_mst_branch *mstb,
>                  */
>                 drm_modeset_lock(&mgr->base.lock, NULL);
>
> -               old_ddps = port->ddps;
>                 changed = port->ddps != port_msg->ddps ||
>                         (port->ddps &&
>                          (port->ldps != port_msg->legacy_device_plug_status ||
> @@ -2407,15 +2406,13 @@ drm_dp_mst_handle_link_address_port(struct drm_dp_mst_branch *mstb,
>          * Reprobe PBN caps on both hotplug, and when re-probing the link
>          * for our parent mstb
>          */
> -       if (old_ddps != port->ddps || !created) {
> -               if (port->ddps && !port->input) {
> -                       ret = drm_dp_send_enum_path_resources(mgr, mstb,
> -                                                             port);
> -                       if (ret == 1)
> -                               changed = true;
> -               } else {
> -                       port->full_pbn = 0;
> -               }
> +       if (port->ddps && !port->input) {
> +               ret = drm_dp_send_enum_path_resources(mgr, mstb,
> +                                                     port);
> +               if (ret == 1)
> +                       changed = true;
> +       } else {
> +               port->full_pbn = 0;
>         }
>
>         ret = drm_dp_port_set_pdt(port, new_pdt, new_mcs);
> --
> 2.44.2
>




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

  Powered by Linux