[PATCH 13/18] backport v0.7 mst core fixes

Dariusz Gadomski dariusz.gadomski at canonical.com
Mon Nov 3 13:00:56 UTC 2014


From: Dave Airlie <airlied at redhat.com>

BugLink: https://bugs.launchpad.net/bugs/1104230

(cherry picked from commit 8287efc04b130024cc3e25a3ff2f1b9ea1aab0be upstream)
Signed-off-by: Dariusz Gadomski <dariusz.gadomski at canonical.com>
---
 drivers/gpu/drm/drm_dp_mst_topology.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
index 73bc773..df89128 100644
--- a/drivers/gpu/drm/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/drm_dp_mst_topology.c
@@ -1029,6 +1029,7 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb,
 		port->mgr = mstb->mgr;
 		port->aux.name = "DPMST";
 		port->aux.dev = dev;
+		port->available_pbn = 0xffff;
 		created = true;
 	} else {
 		old_pdt = port->pdt;
@@ -1057,12 +1058,12 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb,
 	if (old_ddps != port->ddps) {
 		if (port->ddps) {
 			drm_dp_check_port_guid(mstb, port);
-			if (!port->input)
+			if (!port->input && port->pdt != DP_PEER_DEVICE_MST_BRANCHING)
 				drm_dp_send_enum_path_resources(mstb->mgr, mstb, port);
 		} else {
 			port->guid_valid = false;
-			port->available_pbn = 0;
-			}
+			port->available_pbn = 0xffff;
+		}
 	}
 
 	if (old_pdt != port->pdt && !port->input) {
@@ -1109,7 +1110,7 @@ static void drm_dp_update_port(struct drm_dp_mst_branch *mstb,
 			dowork = true;
 		} else {
 			port->guid_valid = false;
-			port->available_pbn = 0;
+			port->available_pbn = 0xffff;
 		}
 	}
 	if (old_pdt != port->pdt && !port->input) {
@@ -1170,8 +1171,9 @@ static void drm_dp_check_and_send_link_address(struct drm_dp_mst_topology_mgr *m
 		if (!port->ddps)
 			continue;
 
-		if (!port->available_pbn)
-			drm_dp_send_enum_path_resources(mgr, mstb, port);
+		if (port->pdt != DP_PEER_DEVICE_MST_BRANCHING)
+			if (port->available_pbn == 0xffff)
+				drm_dp_send_enum_path_resources(mgr, mstb, port);
 
 		if (port->mstb)
 			drm_dp_check_and_send_link_address(mgr, port->mstb);
@@ -2430,7 +2432,7 @@ static void drm_dp_mst_dump_mstb(struct seq_file *m,
 
 	seq_printf(m, "%smst: %p, %d\n", prefix, mstb, mstb->num_ports);
 	list_for_each_entry(port, &mstb->ports, next) {
-		seq_printf(m, "%sport: %d: ddps: %d ldps: %d, %p, conn: %p\n", prefix, port->port_num, port->ddps, port->ldps, port, port->connector);
+		seq_printf(m, "%sport: %d: ddps: %d ldps: %d, pdt: %d dpcd_rev: %x avail: %d\n", prefix, port->port_num, port->ddps, port->ldps, port->pdt, port->dpcd_rev, port->available_pbn);
 		if (port->mstb)
 			drm_dp_mst_dump_mstb(m, port->mstb);
 	}
-- 
1.9.1





More information about the kernel-team mailing list