提交 51108f25 编写于 作者: J Jim Bride 提交者: Daniel Vetter

drm/dp/mst: Enhance DP MST debugfs output

Add some additional information (input vs. output port, sink associated
with VC, peer device type, max number of VCs supported) and ensure that
any embedded '\0' characters in a branch device's devid string are not
written to debugfs.

v2: Rebase + change drm_edid_get_monitor_name() call to reflect new
    signature.

v3: Minor changes suggested by Jani + rebase.

v4: Rebase

cc: dri-devel@lists.freedesktop.org
cc: Jani Nikula <jani.nikula@linux.intel.com>
Reviewed-by: NJani Nikula <jani.nikula@intel.com>
Signed-off-by: NJim Bride <jim.bride@linux.intel.com>
Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1460654317-31288-2-git-send-email-jim.bride@linux.intel.com
上级 59f7c0fa
...@@ -2729,7 +2729,7 @@ static void drm_dp_mst_dump_mstb(struct seq_file *m, ...@@ -2729,7 +2729,7 @@ static void drm_dp_mst_dump_mstb(struct seq_file *m,
seq_printf(m, "%smst: %p, %d\n", prefix, mstb, mstb->num_ports); seq_printf(m, "%smst: %p, %d\n", prefix, mstb, mstb->num_ports);
list_for_each_entry(port, &mstb->ports, next) { list_for_each_entry(port, &mstb->ports, next) {
seq_printf(m, "%sport: %d: ddps: %d ldps: %d, sdp: %d/%d, %p, conn: %p\n", prefix, port->port_num, port->ddps, port->ldps, port->num_sdp_streams, port->num_sdp_stream_sinks, port, port->connector); seq_printf(m, "%sport: %d: input: %d: pdt: %d, ddps: %d ldps: %d, sdp: %d/%d, %p, conn: %p\n", prefix, port->port_num, port->input, port->pdt, port->ddps, port->ldps, port->num_sdp_streams, port->num_sdp_stream_sinks, port, port->connector);
if (port->mstb) if (port->mstb)
drm_dp_mst_dump_mstb(m, port->mstb); drm_dp_mst_dump_mstb(m, port->mstb);
} }
...@@ -2750,6 +2750,16 @@ static bool dump_dp_payload_table(struct drm_dp_mst_topology_mgr *mgr, ...@@ -2750,6 +2750,16 @@ static bool dump_dp_payload_table(struct drm_dp_mst_topology_mgr *mgr,
return false; return false;
} }
static void fetch_monitor_name(struct drm_dp_mst_topology_mgr *mgr,
struct drm_dp_mst_port *port, char *name,
int namelen)
{
struct edid *mst_edid;
mst_edid = drm_dp_mst_get_edid(port->connector, mgr, port);
drm_edid_get_monitor_name(mst_edid, name, namelen);
}
/** /**
* drm_dp_mst_dump_topology(): dump topology to seq file. * drm_dp_mst_dump_topology(): dump topology to seq file.
* @m: seq_file to dump output to * @m: seq_file to dump output to
...@@ -2762,6 +2772,7 @@ void drm_dp_mst_dump_topology(struct seq_file *m, ...@@ -2762,6 +2772,7 @@ void drm_dp_mst_dump_topology(struct seq_file *m,
{ {
int i; int i;
struct drm_dp_mst_port *port; struct drm_dp_mst_port *port;
mutex_lock(&mgr->lock); mutex_lock(&mgr->lock);
if (mgr->mst_primary) if (mgr->mst_primary)
drm_dp_mst_dump_mstb(m, mgr->mst_primary); drm_dp_mst_dump_mstb(m, mgr->mst_primary);
...@@ -2770,14 +2781,21 @@ void drm_dp_mst_dump_topology(struct seq_file *m, ...@@ -2770,14 +2781,21 @@ void drm_dp_mst_dump_topology(struct seq_file *m,
mutex_unlock(&mgr->lock); mutex_unlock(&mgr->lock);
mutex_lock(&mgr->payload_lock); mutex_lock(&mgr->payload_lock);
seq_printf(m, "vcpi: %lx %lx\n", mgr->payload_mask, mgr->vcpi_mask); seq_printf(m, "vcpi: %lx %lx %d\n", mgr->payload_mask, mgr->vcpi_mask,
mgr->max_payloads);
for (i = 0; i < mgr->max_payloads; i++) { for (i = 0; i < mgr->max_payloads; i++) {
if (mgr->proposed_vcpis[i]) { if (mgr->proposed_vcpis[i]) {
char name[14];
port = container_of(mgr->proposed_vcpis[i], struct drm_dp_mst_port, vcpi); port = container_of(mgr->proposed_vcpis[i], struct drm_dp_mst_port, vcpi);
seq_printf(m, "vcpi %d: %d %d %d\n", i, port->port_num, port->vcpi.vcpi, port->vcpi.num_slots); fetch_monitor_name(mgr, port, name, sizeof(name));
seq_printf(m, "vcpi %d: %d %d %d sink name: %s\n", i,
port->port_num, port->vcpi.vcpi,
port->vcpi.num_slots,
(*name != 0) ? name : "Unknown");
} else } else
seq_printf(m, "vcpi %d:unsed\n", i); seq_printf(m, "vcpi %d:unused\n", i);
} }
for (i = 0; i < mgr->max_payloads; i++) { for (i = 0; i < mgr->max_payloads; i++) {
seq_printf(m, "payload %d: %d, %d, %d\n", seq_printf(m, "payload %d: %d, %d, %d\n",
...@@ -2817,8 +2835,9 @@ void drm_dp_mst_dump_topology(struct seq_file *m, ...@@ -2817,8 +2835,9 @@ void drm_dp_mst_dump_topology(struct seq_file *m,
for (i = 0; i < 0x3; i++) for (i = 0; i < 0x3; i++)
seq_printf(m, "%02x", buf[i]); seq_printf(m, "%02x", buf[i]);
seq_printf(m, " devid: "); seq_printf(m, " devid: ");
for (i = 0x3; i < 0x8; i++) for (i = 0x3; i < 0x8 && buf[i]; i++)
seq_printf(m, "%c", buf[i]); seq_printf(m, "%c", buf[i]);
seq_printf(m, " revision: hw: %x.%x sw: %x.%x", buf[0x9] >> 4, buf[0x9] & 0xf, buf[0xa], buf[0xb]); seq_printf(m, " revision: hw: %x.%x sw: %x.%x", buf[0x9] >> 4, buf[0x9] & 0xf, buf[0xa], buf[0xb]);
seq_printf(m, "\n"); seq_printf(m, "\n");
bret = dump_dp_payload_table(mgr, buf); bret = dump_dp_payload_table(mgr, buf);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册