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 6297c85dea065b3b3d1556aa5c70db5819e08056..b0c3c8373775e43086aec976f5aed7661fa45023 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);