thunderbolt: Ignore port locked error in tb_port_wait_for_link_width()
authorMika Westerberg <mika.westerberg@linux.intel.com>
Sun, 13 Feb 2022 15:16:24 +0000 (17:16 +0200)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Thu, 5 May 2022 06:25:16 +0000 (09:25 +0300)
Sometimes when polling for the port after target link width is changed
we get back port locked notification (because the link actually was
reset and then re-trained). Instead of bailing out we can ignore these
when polling for the width change as this is expected.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/thunderbolt/switch.c

index 525be2a..561e1d7 100644 (file)
@@ -1168,10 +1168,17 @@ int tb_port_wait_for_link_width(struct tb_port *port, int width,
 
        do {
                ret = tb_port_get_link_width(port);
-               if (ret < 0)
-                       return ret;
-               else if (ret == width)
+               if (ret < 0) {
+                       /*
+                        * Sometimes we get port locked error when
+                        * polling the lanes so we can ignore it and
+                        * retry.
+                        */
+                       if (ret != -EACCES)
+                               return ret;
+               } else if (ret == width) {
                        return 0;
+               }
 
                usleep_range(1000, 2000);
        } while (ktime_before(ktime_get(), timeout));