thunderbolt: Do not clear USB4 router protocol adapter IFC and ISE bits
authorMika Westerberg <mika.westerberg@linux.intel.com>
Wed, 7 Oct 2020 14:08:47 +0000 (17:08 +0300)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Wed, 11 Nov 2020 07:20:15 +0000 (10:20 +0300)
These fields are marked as vendor defined in the USB4 spec and should
not be modified by the software, so only clear them when we are dealing
with pre-USB4 hardware.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Yehezkel Bernat <YehezkelShB@gmail.com>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/thunderbolt/path.c

index 03e7b71..7c2c45d 100644 (file)
@@ -406,10 +406,17 @@ static int __tb_path_deactivate_hop(struct tb_port *port, int hop_index,
 
                if (!hop.pending) {
                        if (clear_fc) {
-                               /* Clear flow control */
-                               hop.ingress_fc = 0;
+                               /*
+                                * Clear flow control. Protocol adapters
+                                * IFC and ISE bits are vendor defined
+                                * in the USB4 spec so we clear them
+                                * only for pre-USB4 adapters.
+                                */
+                               if (!tb_switch_is_usb4(port->sw)) {
+                                       hop.ingress_fc = 0;
+                                       hop.ingress_shared_buffer = 0;
+                               }
                                hop.egress_fc = 0;
-                               hop.ingress_shared_buffer = 0;
                                hop.egress_shared_buffer = 0;
 
                                return tb_port_write(port, &hop, TB_CFG_HOPS,