diff mbox

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

Message ID 1415019661-19435-14-git-send-email-dariusz.gadomski@canonical.com
State New
Headers show

Commit Message

Dariusz Gadomski Nov. 3, 2014, 1 p.m. UTC
From: Dave Airlie <airlied@redhat.com>

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

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

Patch

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);
 	}