Add support for the free-running mode that will not adjust the sink
clock when enabled.

V2: changed implementation to instantiate NTPSHM servo that serves as
    the nochange servo

Signed-off-by: Maciek Machnikowski <mac...@machnikowski.net>
---
 phc2sys.8 | 4 ++++
 phc2sys.c | 9 ++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/phc2sys.8 b/phc2sys.8
index 99fc937..42f2bdb 100644
--- a/phc2sys.8
+++ b/phc2sys.8
@@ -323,6 +323,10 @@ Same as option
 .B \-E
 (see above).
 
+.TP
+.B free-running
+Don't adjust the sink clock if enabled. The default is 0 (disabled).
+
 .TP
 .B transportSpecific
 The transport specific field. Must be in the range 0 to 255.
diff --git a/phc2sys.c b/phc2sys.c
index 599f9bd..007ae21 100644
--- a/phc2sys.c
+++ b/phc2sys.c
@@ -103,6 +103,7 @@ struct phc2sys_private {
        int forced_sync_offset;
        int kernel_leap;
        int state_changed;
+       int free_running;
        struct pmc_agent *agent;
        LIST_HEAD(port_head, port) ports;
        LIST_HEAD(clock_head, clock) clocks;
@@ -129,7 +130,8 @@ static struct servo *servo_add(struct phc2sys_private *priv,
        ppb = clockadj_get_freq(clock->clkid);
        /* The reading may silently fail and return 0, reset the frequency to
           make sure ppb is the actual frequency of the clock. */
-       clockadj_set_freq(clock->clkid, ppb);
+       if (!priv->free_running)
+               clockadj_set_freq(clock->clkid, ppb);
        if (clock->clkid == CLOCK_REALTIME) {
                sysclk_set_leap(0);
                max_ppb = sysclk_max_freq();
@@ -1280,6 +1282,11 @@ int main(int argc, char *argv[])
        print_set_level(config_get_int(cfg, NULL, "logging_level"));
 
        priv.servo_type = config_get_int(cfg, NULL, "clock_servo");
+       priv.free_running = config_get_int(cfg, NULL, "free_running");
+       if (priv.free_running) {
+               priv.servo_type = CLOCK_SERVO_NTPSHM;
+       }
+
        if (priv.servo_type == CLOCK_SERVO_NTPSHM) {
                config_set_int(cfg, "kernel_leap", 0);
                config_set_int(cfg, "sanity_freq_limit", 0);
-- 
2.36.1



_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to