[PATCH 03/14] drm/dp_mst: Simplify the condition when to enumerate path resources
Manasi Navare
navaremanasi at chromium.org
Sun Aug 4 13:45:43 UTC 2024
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
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 Intel-gfx
mailing list