mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-08 14:54:23 +08:00
thunderbolt: Add DP OUT resource when DP tunnel is discovered
If the boot firmware implements a connection manager of its own it may create a DisplayPort tunnel and will be handed off to Linux connection manager, but the DP OUT resource is not saved in the dp_resource list. This patch adds tunnelled DP OUT port to the dp_resource list once the DP tunnel is discovered. Signed-off-by: Sanjay R Mehta <sanju.mehta@amd.com> Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com> Tested-by: Renjith Pananchikkal <Renjith.Pananchikkal@amd.com> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
This commit is contained in:
parent
568035b01c
commit
b60e31bf18
@ -105,6 +105,32 @@ static void tb_remove_dp_resources(struct tb_switch *sw)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void tb_discover_dp_resource(struct tb *tb, struct tb_port *port)
|
||||||
|
{
|
||||||
|
struct tb_cm *tcm = tb_priv(tb);
|
||||||
|
struct tb_port *p;
|
||||||
|
|
||||||
|
list_for_each_entry(p, &tcm->dp_resources, list) {
|
||||||
|
if (p == port)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tb_port_dbg(port, "DP %s resource available discovered\n",
|
||||||
|
tb_port_is_dpin(port) ? "IN" : "OUT");
|
||||||
|
list_add_tail(&port->list, &tcm->dp_resources);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void tb_discover_dp_resources(struct tb *tb)
|
||||||
|
{
|
||||||
|
struct tb_cm *tcm = tb_priv(tb);
|
||||||
|
struct tb_tunnel *tunnel;
|
||||||
|
|
||||||
|
list_for_each_entry(tunnel, &tcm->tunnel_list, list) {
|
||||||
|
if (tb_tunnel_is_dp(tunnel))
|
||||||
|
tb_discover_dp_resource(tb, tunnel->dst_port);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void tb_switch_discover_tunnels(struct tb_switch *sw,
|
static void tb_switch_discover_tunnels(struct tb_switch *sw,
|
||||||
struct list_head *list,
|
struct list_head *list,
|
||||||
bool alloc_hopids)
|
bool alloc_hopids)
|
||||||
@ -1446,6 +1472,8 @@ static int tb_start(struct tb *tb)
|
|||||||
tb_scan_switch(tb->root_switch);
|
tb_scan_switch(tb->root_switch);
|
||||||
/* Find out tunnels created by the boot firmware */
|
/* Find out tunnels created by the boot firmware */
|
||||||
tb_discover_tunnels(tb);
|
tb_discover_tunnels(tb);
|
||||||
|
/* Add DP resources from the DP tunnels created by the boot firmware */
|
||||||
|
tb_discover_dp_resources(tb);
|
||||||
/*
|
/*
|
||||||
* If the boot firmware did not create USB 3.x tunnels create them
|
* If the boot firmware did not create USB 3.x tunnels create them
|
||||||
* now for the whole topology.
|
* now for the whole topology.
|
||||||
|
Loading…
Reference in New Issue
Block a user