> -----Original Message-----
> From: Vladimir Oltean <olte...@gmail.com>
> Sent: Monday, August 17, 2020 4:19 PM
> To: richardcoch...@gmail.com
> Cc: linuxptp-devel@lists.sourceforge.net; fer...@gmail.com; Keller, Jacob E
> <jacob.e.kel...@intel.com>
> Subject: [RFC PATCH v2 00/14] Dynamic sync direction for ts2phc
> 
> Changes in v2:
> - Added Jacob's review tags, addressed some feedback.
> - Dropped patch "pmc_common: fix potential memory leak in
>   run_pmc_events()"
> - Reordered patches (put the tmv helpers first)
> - Fixed memory leaks
> 


Any chance you could also provide a "git range-diff"? i.e. assuming v1 is at 
dynamic-ts2phc-v1 and v2 is at dynamic-ts2phc-v2

git range-diff master dynamic-ts2phc-v1 dynamic-ts2phc-v2

This creates a sort of diff of the series that can help show what you changed 
between the versions.

Thanks,
Jake

> As discussed in this email thread:
> https://sourceforge.net/p/linuxptp/mailman/message/37047555/
> there is a desire to synchronize multiple DSA switches in a
> boundary_clock_jbod setup, using a PPS signal, and the ts2phc program
> already offers a solid base.
> 
> This patch series extends the ts2phc program to cater for that use case
> by introducing a new '-a' option and friends ('--transportSpecific').
> This makes it quite similar to phc2sys which has the same ability, just
> that ts2phc can give much better performance if the hardware can assist
> with that.
> 
> The overall board design for my use case is that there's an SoC with an
> embedded DSA switch, and hanging off of 3 ports of that embedded switch
> are 3 external switches. Every networking device (the DSA master for the
> embedded switch, the embedded switch, as well as each individual
> external switch) has a PTP clock. The topology for PPS signal
> distribution is fixed - that is given by hardware ability - the
> /dev/ptp1 clock can emit a valid PPS, and all external switches can
> timestamp that PPS (it is connected in a sort-of simplex "bus" design),
> and it cannot be any other way around. It looks like this:
> 
>       +---------------------------------------------------------------+
>       | LS1028A                           /dev/ptp0 (unused)          |
>       |               +------------------------------+                |
>       |               |      DSA master for Felix    |                |
>       |               |(internal ENETC port 2: eno2))|                |
>       |  +------------+------------------------------+-------------+  |
>       |  | Felix embedded L2 switch          /dev/ptp1             |  |
>       |  |                             PPS master, sync slave      |  |
>       |  | +--------------+   +--------------+   +--------------+  |  |
>       |  | |DSA master for|   |DSA master for|   |DSA master for|  |  |
>       |  | |  SJA1105 1   |   |  SJA1105 2   |   |  SJA1105 3   |  |  |
>       |  | |(Felix port 1)|   |(Felix port 2)|   |(Felix port 3)|  |  |
>       +--+-+--------------+---+--------------+---+--------------+--+--+
> 
>         /dev/ptp2                /dev/ptp3                /dev/ptp4
>   PPS slave, sync master    PPS slave, sync slave     PPS slave, sync slave
> +-----------------------+ +-----------------------+ +-----------------------+
> |   SJA1105 switch 1    | |   SJA1105 switch 2    | |   SJA1105 switch 3    |
> +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+
> |sw1p0|sw1p1|sw1p2|sw1p3| |sw2p0|sw2p1|sw2p2|sw2p3|
> |sw3p0|sw3p1|sw3p2|sw3p3|
> +-----+-----+-----+-----+ +-----+-----+-----+-----+ +-----+-----+-----+-----+
>    ^
>    |
> GM connected here
> 
> In text, it would be described as this:
> 
> cat ts2phc.cfg
> [global]
> first_step_threshold    0.00002
> step_threshold          0.00002
> ts2phc.pulsewidth       500000000
> ts2phc.perout_phase     0
> 
> # Felix
> [/dev/ptp1]
> ts2phc.master           1
> 
> # SJA1105 switch 1
> [/dev/ptp2]
> ts2phc.channel          0
> ts2phc.extts_polarity   both
> 
> # SJA1105 switch 2
> [/dev/ptp3]
> ts2phc.channel          0
> ts2phc.extts_polarity   both
> 
> # SJA1105 switch 3
> [/dev/ptp4]
> ts2phc.channel          0
> ts2phc.extts_polarity   both
> 
> cat gPTP.cfg
> [global]
> gmCapable               1
> priority1               248
> priority2               248
> logAnnounceInterval     0
> logSyncInterval         -3
> syncReceiptTimeout      3
> neighborPropDelayThresh 50000
> min_neighbor_prop_delay -20000000
> assume_two_step         1
> path_trace_enabled      1
> follow_up_info          1
> transportSpecific       0x1
> ptp_dst_mac             01:80:C2:00:00:0E
> network_transport       L2
> delay_mechanism         P2P
> step_threshold          0.00002
> tx_timestamp_timeout    20
> boundary_clock_jbod     1
> 
> [sw1p0]
> [sw1p1]
> [sw1p2]
> [sw1p3]
> [sw2p0]
> [sw2p1]
> [sw2p2]
> [sw2p3]
> [sw3p0]
> [sw3p1]
> [sw3p2]
> [sw3p3]
> 
> At a high level, what I have done is:
> - I moved the PMC related code from phc2sys into pmc_common.c, for
>   ts2phc reuse
> - I created an extra abstraction in ts2phc as "struct clock" that would
>   represent what's synchronizable. The "master" and "slave" concepts
>   retain their meaning, which is: "master" == the device that emits PPS,
>   and "slave" == the device that timestamps PPS.
> 
> The changes should be backwards-compatible with the non-automatic mode.
> I have only tested non-automatic mode with a PHC master (that's all I
> have) and it still appears to work as before.
> 
> Vladimir Oltean (14):
>   tmv: introduce a conversion helper from ptp_clock_time
>   tmv: introduce an initializer from nanoseconds
>   posix_clock_open: derive PHC index from device name if possible
>   phc2sys: rename struct node to struct phc2sys_private
>   phc2sys: break out pmc code into pmc_common.c
>   ts2phc: create a private data structure
>   ts2phc: instantiate a full clock structure for every slave PHC
>   ts2phc: instantiate a full clock structure for every PHC master
>   ts2phc: instantiate a pmc node
>   ts2phc_slave: print master offset
>   ts2phc: split slave poll from servo loop
>   ts2phc: reconfigure sync direction by subscribing to ptp4l port events
>   ts2phc: allow the PHC PPS master to be synchronized
>   ts2phc_phc_master: make use of new kernel API for perout waveform
> 
>  config.c                |   1 +
>  makefile                |   3 +-
>  missing.h               |  53 ++++
>  phc2sys.c               | 661 ++++++++++------------------------------
>  pmc_common.c            | 337 ++++++++++++++++++++
>  pmc_common.h            |  35 +++
>  tmv.h                   |  15 +
>  ts2phc.8                |   5 +
>  ts2phc.c                | 638 +++++++++++++++++++++++++++++++++++---
>  ts2phc.h                |  78 +++++
>  ts2phc_generic_master.c |   2 +-
>  ts2phc_generic_master.h |   3 +-
>  ts2phc_master.c         |  10 +-
>  ts2phc_master.h         |   8 +-
>  ts2phc_master_private.h |   1 +
>  ts2phc_nmea_master.c    |   5 +-
>  ts2phc_nmea_master.h    |   3 +-
>  ts2phc_phc_master.c     |  70 +++--
>  ts2phc_phc_master.h     |   3 +-
>  ts2phc_slave.c          | 385 +++++++++++------------
>  ts2phc_slave.h          |  10 +-
>  util.c                  |  10 +
>  22 files changed, 1581 insertions(+), 755 deletions(-)
>  create mode 100644 ts2phc.h
> 
> --
> 2.25.1



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

Reply via email to