[PATCH 03/14] drm/dp_mst: Simplify the condition when to enumerate path resources
Imre Deak
imre.deak at intel.com
Mon Aug 5 13:47:52 UTC 2024
On Sun, Aug 04, 2024 at 06:45:43AM -0700, Manasi Navare wrote:
> On Mon, Jul 22, 2024 at 9:55 AM Imre Deak <imre.deak at intel.com> 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
I suppose you refer to [1].
The patchset as a whole should ensure that the BW reported by branch
devices via the ENUM_PATH_RESOURCES message is correct even across
changing between UHBR <-> non-UHBR link rates between the source and the
first downstream branch devices. More on this are detailed at [2] and
[3]. It looks like this would also address the issue described in [1],
but I couldn't test this yet, as I don't have any hub/dock supporting
UHBR rates.
--Imre
[1] https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10970
[2] https://patchwork.freedesktop.org/patch/605424/?series=136347&rev=2
[3] https://patchwork.freedesktop.org/patch/605419/?series=136347&rev=2
>
> Manasi
>
> >
> > Cc: Lyude Paul <lyude at redhat.com>
> > Cc: dri-devel at lists.freedesktop.org
> > Signed-off-by: Imre Deak <imre.deak at intel.com>
> > ---
> > 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
> >
More information about the dri-devel
mailing list