thunderbolt: Check valid TMU configuration in tb_switch_tmu_configure()
authorMika Westerberg <mika.westerberg@linux.intel.com>
Mon, 10 Oct 2022 15:04:16 +0000 (18:04 +0300)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Fri, 9 Jun 2023 09:07:23 +0000 (12:07 +0300)
Instead of at enable time we can do this already in
tb_switch_tmu_configure().

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

index 41c353f..91459bf 100644 (file)
@@ -282,9 +282,11 @@ static int tb_enable_tmu(struct tb_switch *sw)
         * highest accuracy.
         */
        if (tb_switch_is_clx_enabled(sw, TB_CL1))
-               tb_switch_tmu_configure(sw, TB_SWITCH_TMU_RATE_NORMAL, true);
+               ret = tb_switch_tmu_configure(sw, TB_SWITCH_TMU_RATE_NORMAL, true);
        else
-               tb_switch_tmu_configure(sw, TB_SWITCH_TMU_RATE_HIFI, false);
+               ret = tb_switch_tmu_configure(sw, TB_SWITCH_TMU_RATE_HIFI, false);
+       if (ret)
+               return ret;
 
        /* If it is already enabled in correct mode, don't touch it */
        if (tb_switch_tmu_is_enabled(sw))
index 5c4b671..2ecad0a 100644 (file)
@@ -987,9 +987,8 @@ int tb_switch_tmu_init(struct tb_switch *sw);
 int tb_switch_tmu_post_time(struct tb_switch *sw);
 int tb_switch_tmu_disable(struct tb_switch *sw);
 int tb_switch_tmu_enable(struct tb_switch *sw);
-void tb_switch_tmu_configure(struct tb_switch *sw,
-                            enum tb_switch_tmu_rate rate,
-                            bool unidirectional);
+int tb_switch_tmu_configure(struct tb_switch *sw, enum tb_switch_tmu_rate rate,
+                           bool unidirectional);
 /**
  * tb_switch_tmu_is_enabled() - Checks if the specified TMU mode is enabled
  * @sw: Router whose TMU mode to check
index 84abb78..be310d9 100644 (file)
@@ -648,9 +648,6 @@ int tb_switch_tmu_enable(struct tb_switch *sw)
        bool unidirectional = sw->tmu.unidirectional_request;
        int ret;
 
-       if (unidirectional && !sw->tmu.has_ucap)
-               return -EOPNOTSUPP;
-
        /*
         * No need to enable TMU on devices that don't support CLx since on
         * these devices e.g. Alpine Ridge and earlier, the TMU mode HiFi
@@ -724,10 +721,16 @@ int tb_switch_tmu_enable(struct tb_switch *sw)
  *
  * Selects the rate of the TMU and directionality (uni-directional or
  * bi-directional). Must be called before tb_switch_tmu_enable().
+ *
+ * Returns %0 in success and negative errno otherwise.
  */
-void tb_switch_tmu_configure(struct tb_switch *sw,
-                            enum tb_switch_tmu_rate rate, bool unidirectional)
+int tb_switch_tmu_configure(struct tb_switch *sw, enum tb_switch_tmu_rate rate,
+                           bool unidirectional)
 {
+       if (unidirectional && !sw->tmu.has_ucap)
+               return -EINVAL;
+
        sw->tmu.unidirectional_request = unidirectional;
        sw->tmu.rate_request = rate;
+       return 0;
 }