thunderbolt: Move usb4_switch_wait_for_bit() to switch.c
authorGil Fine <gil.fine@intel.com>
Fri, 17 Dec 2021 01:16:40 +0000 (03:16 +0200)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Wed, 22 Dec 2021 14:13:14 +0000 (17:13 +0300)
Currently usb4_switch_wait_for_bit() used only in usb4.c Moving to
switch.c to call it from other files. Also change the prefix to "tb_"
to follow to the naming convention.

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

index 8e232ce..c242a02 100644 (file)
@@ -1457,6 +1457,40 @@ int tb_switch_reset(struct tb_switch *sw)
        return res.err;
 }
 
+/**
+ * tb_switch_wait_for_bit() - Wait for specified value of bits in offset
+ * @sw: Router to read the offset value from
+ * @offset: Offset in the router config space to read from
+ * @bit: Bit mask in the offset to wait for
+ * @value: Value of the bits to wait for
+ * @timeout_msec: Timeout in ms how long to wait
+ *
+ * Wait till the specified bits in specified offset reach specified value.
+ * Returns %0 in case of success, %-ETIMEDOUT if the @value was not reached
+ * within the given timeout or a negative errno in case of failure.
+ */
+int tb_switch_wait_for_bit(struct tb_switch *sw, u32 offset, u32 bit,
+                          u32 value, int timeout_msec)
+{
+       ktime_t timeout = ktime_add_ms(ktime_get(), timeout_msec);
+
+       do {
+               u32 val;
+               int ret;
+
+               ret = tb_sw_read(sw, &val, TB_CFG_SWITCH, offset, 1);
+               if (ret)
+                       return ret;
+
+               if ((val & bit) == value)
+                       return 0;
+
+               usleep_range(50, 100);
+       } while (ktime_before(ktime_get(), timeout));
+
+       return -ETIMEDOUT;
+}
+
 /*
  * tb_plug_events_active() - enable/disable plug events on a switch
  *
index 4ec89df..78b884a 100644 (file)
@@ -760,6 +760,8 @@ void tb_switch_remove(struct tb_switch *sw);
 void tb_switch_suspend(struct tb_switch *sw, bool runtime);
 int tb_switch_resume(struct tb_switch *sw);
 int tb_switch_reset(struct tb_switch *sw);
+int tb_switch_wait_for_bit(struct tb_switch *sw, u32 offset, u32 bit,
+                          u32 value, int timeout_msec);
 void tb_sw_set_unplugged(struct tb_switch *sw);
 struct tb_port *tb_switch_find_port(struct tb_switch *sw,
                                    enum tb_port_type type);
index a95c3e9..3a2e712 100644 (file)
@@ -50,28 +50,6 @@ enum usb4_ba_index {
 #define USB4_BA_VALUE_MASK             GENMASK(31, 16)
 #define USB4_BA_VALUE_SHIFT            16
 
-static int usb4_switch_wait_for_bit(struct tb_switch *sw, u32 offset, u32 bit,
-                                   u32 value, int timeout_msec)
-{
-       ktime_t timeout = ktime_add_ms(ktime_get(), timeout_msec);
-
-       do {
-               u32 val;
-               int ret;
-
-               ret = tb_sw_read(sw, &val, TB_CFG_SWITCH, offset, 1);
-               if (ret)
-                       return ret;
-
-               if ((val & bit) == value)
-                       return 0;
-
-               usleep_range(50, 100);
-       } while (ktime_before(ktime_get(), timeout));
-
-       return -ETIMEDOUT;
-}
-
 static int usb4_native_switch_op(struct tb_switch *sw, u16 opcode,
                                 u32 *metadata, u8 *status,
                                 const void *tx_data, size_t tx_dwords,
@@ -97,7 +75,7 @@ static int usb4_native_switch_op(struct tb_switch *sw, u16 opcode,
        if (ret)
                return ret;
 
-       ret = usb4_switch_wait_for_bit(sw, ROUTER_CS_26, ROUTER_CS_26_OV, 0, 500);
+       ret = tb_switch_wait_for_bit(sw, ROUTER_CS_26, ROUTER_CS_26_OV, 0, 500);
        if (ret)
                return ret;
 
@@ -303,8 +281,8 @@ int usb4_switch_setup(struct tb_switch *sw)
        if (ret)
                return ret;
 
-       return usb4_switch_wait_for_bit(sw, ROUTER_CS_6, ROUTER_CS_6_CR,
-                                       ROUTER_CS_6_CR, 50);
+       return tb_switch_wait_for_bit(sw, ROUTER_CS_6, ROUTER_CS_6_CR,
+                                     ROUTER_CS_6_CR, 50);
 }
 
 /**
@@ -480,8 +458,8 @@ int usb4_switch_set_sleep(struct tb_switch *sw)
        if (ret)
                return ret;
 
-       return usb4_switch_wait_for_bit(sw, ROUTER_CS_6, ROUTER_CS_6_SLPR,
-                                       ROUTER_CS_6_SLPR, 500);
+       return tb_switch_wait_for_bit(sw, ROUTER_CS_6, ROUTER_CS_6_SLPR,
+                                     ROUTER_CS_6_SLPR, 500);
 }
 
 /**