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.westerb...@linux.intel.com>
Acked-by: Yehezkel Bernat <yehezkel...@gmail.com>
---
 drivers/thunderbolt/path.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/thunderbolt/path.c b/drivers/thunderbolt/path.c
index 03e7b714deab..7c2c45d9ba4a 100644
--- a/drivers/thunderbolt/path.c
+++ b/drivers/thunderbolt/path.c
@@ -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,
-- 
2.28.0

Reply via email to