drm_dp_mst_is_virtual_dpcd() checks if a branch port qualifies as a virtual DPCD device by looking for a downstream port with Peer_Device_Type=3 (DP_PEER_DEVICE_SST_SINK).
Some PCON devices advertise their downstream HDMI sink port using Peer_Device_Type=4 (DP_PEER_DEVICE_DP_LEGACY_CONV) with a non-zero DPCD_Revision in the link address reply, indicating a virtual DPCD is present (VESA SCR Option 2). The current check misses this case, so passthrough_aux is never set and DSC passthrough modes are rejected. Accept DP_PEER_DEVICE_DP_LEGACY_CONV as a valid downstream peer type in the DP-to-DP branch so these PCON topologies are correctly identified. Signed-off-by: Xiao Lu <[email protected]> --- drivers/gpu/drm/display/drm_dp_mst_topology.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c index 4de36fda0..7d1128bcd 100644 --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c @@ -6045,7 +6045,8 @@ static bool drm_dp_mst_is_virtual_dpcd(struct drm_dp_mst_port *port) port->mstb && port->mstb->num_ports == 2) { list_for_each_entry(downstream_port, &port->mstb->ports, next) { - if (downstream_port->pdt == DP_PEER_DEVICE_SST_SINK && + if ((downstream_port->pdt == DP_PEER_DEVICE_SST_SINK || + downstream_port->pdt == DP_PEER_DEVICE_DP_LEGACY_CONV) && !downstream_port->input) { mutex_unlock(&port->mgr->lock); return true; -- 2.43.0
