thunderbolt: Make PCIe tunnel setup and teardown follow CM guide
authorGil Fine <gil.fine@linux.intel.com>
Wed, 15 Nov 2023 10:09:56 +0000 (12:09 +0200)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Thu, 14 Dec 2023 06:07:45 +0000 (08:07 +0200)
The USB4 Connection Manager guide suggests that the PCIe paths are
enabled from the upstream adapter to the downstream adapter and vice
versa on disable so make the driver follows this sequence.

Signed-off-by: Gil Fine <gil.fine@linux.intel.com>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/thunderbolt/tunnel.c

index 6297c85..b0c3c83 100644 (file)
@@ -199,14 +199,21 @@ static int tb_pci_activate(struct tb_tunnel *tunnel, bool activate)
                        return res;
        }
 
-       res = tb_pci_port_enable(tunnel->src_port, activate);
+       if (activate)
+               res = tb_pci_port_enable(tunnel->dst_port, activate);
+       else
+               res = tb_pci_port_enable(tunnel->src_port, activate);
        if (res)
                return res;
 
-       if (tb_port_is_pcie_up(tunnel->dst_port)) {
-               res = tb_pci_port_enable(tunnel->dst_port, activate);
+
+       if (activate) {
+               res = tb_pci_port_enable(tunnel->src_port, activate);
                if (res)
                        return res;
+       } else {
+               /* Downstream router could be unplugged */
+               tb_pci_port_enable(tunnel->dst_port, activate);
        }
 
        return activate ? 0 : tb_pci_set_ext_encapsulation(tunnel, activate);