thunderbolt: Change downstream router's TMU rate in both TMU uni/bidir mode
authorGil Fine <gil.fine@intel.com>
Thu, 26 May 2022 10:59:19 +0000 (13:59 +0300)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Mon, 6 Jun 2022 09:19:23 +0000 (12:19 +0300)
In case of uni-directional time sync, TMU handshake is
initiated by upstream router. In case of bi-directional
time sync, TMU handshake is initiated by downstream router.
In order to handle correctly the case of uni-directional mode,
we avoid changing the upstream router's rate to off,
because it might have another downstream router plugged that is set to
uni-directional mode (and we don't want to change its mode).
Instead, we always change downstream router's rate.

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

index b656659..985ca43 100644 (file)
@@ -359,13 +359,14 @@ int tb_switch_tmu_disable(struct tb_switch *sw)
                 * In case of uni-directional time sync, TMU handshake is
                 * initiated by upstream router. In case of bi-directional
                 * time sync, TMU handshake is initiated by downstream router.
-                * Therefore, we change the rate to off in the respective
-                * router.
+                * We change downstream router's rate to off for both uni/bidir
+                * cases although it is needed only for the bi-directional mode.
+                * We avoid changing upstream router's mode since it might
+                * have another downstream router plugged, that is set to
+                * uni-directional mode and we don't want to change it's TMU
+                * mode.
                 */
-               if (unidirectional)
-                       tb_switch_tmu_rate_write(parent, TB_SWITCH_TMU_RATE_OFF);
-               else
-                       tb_switch_tmu_rate_write(sw, TB_SWITCH_TMU_RATE_OFF);
+               tb_switch_tmu_rate_write(sw, TB_SWITCH_TMU_RATE_OFF);
 
                tb_port_tmu_time_sync_disable(up);
                ret = tb_port_tmu_time_sync_disable(down);