net: dsa: sja1105: make future_base_time a common helper
authorVladimir Oltean <vladimir.oltean@nxp.com>
Mon, 23 Mar 2020 22:59:22 +0000 (00:59 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 24 Mar 2020 05:15:07 +0000 (22:15 -0700)
Because the PTP_CLK pin starts toggling only at a time higher than the
current PTP clock, this helper from the time-aware shaper code comes in
handy here as well. We'll use it to transform generic user input for the
perout request into valid input for the sja1105 hardware.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/sja1105/sja1105_ptp.h
drivers/net/dsa/sja1105/sja1105_tas.c

index 6f4a19e..119e345 100644 (file)
@@ -21,6 +21,33 @@ static inline s64 sja1105_ticks_to_ns(s64 ticks)
        return ticks * SJA1105_TICK_NS;
 }
 
+/* Calculate the first base_time in the future that satisfies this
+ * relationship:
+ *
+ * future_base_time = base_time + N x cycle_time >= now, or
+ *
+ *      now - base_time
+ * N >= ---------------
+ *         cycle_time
+ *
+ * Because N is an integer, the ceiling value of the above "a / b" ratio
+ * is in fact precisely the floor value of "(a + b - 1) / b", which is
+ * easier to calculate only having integer division tools.
+ */
+static inline s64 future_base_time(s64 base_time, s64 cycle_time, s64 now)
+{
+       s64 a, b, n;
+
+       if (base_time >= now)
+               return base_time;
+
+       a = now - base_time;
+       b = cycle_time;
+       n = div_s64(a + b - 1, b);
+
+       return base_time + n * cycle_time;
+}
+
 struct sja1105_ptp_cmd {
        u64 ptpstrtsch;         /* start schedule */
        u64 ptpstopsch;         /* stop schedule */
index fa6750d..77e547b 100644 (file)
@@ -28,33 +28,6 @@ static s64 sja1105_delta_to_ns(s64 delta)
        return delta * 200;
 }
 
-/* Calculate the first base_time in the future that satisfies this
- * relationship:
- *
- * future_base_time = base_time + N x cycle_time >= now, or
- *
- *      now - base_time
- * N >= ---------------
- *         cycle_time
- *
- * Because N is an integer, the ceiling value of the above "a / b" ratio
- * is in fact precisely the floor value of "(a + b - 1) / b", which is
- * easier to calculate only having integer division tools.
- */
-static s64 future_base_time(s64 base_time, s64 cycle_time, s64 now)
-{
-       s64 a, b, n;
-
-       if (base_time >= now)
-               return base_time;
-
-       a = now - base_time;
-       b = cycle_time;
-       n = div_s64(a + b - 1, b);
-
-       return base_time + n * cycle_time;
-}
-
 static int sja1105_tas_set_runtime_params(struct sja1105_private *priv)
 {
        struct sja1105_tas_data *tas_data = &priv->tas_data;