[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