ptp: Add PTP_SYS_OFFSET_PRECISE for driver crosstimestamping
authorChristopher S. Hall <christopher.s.hall@intel.com>
Mon, 22 Feb 2016 11:15:25 +0000 (03:15 -0800)
committerJohn Stultz <john.stultz@linaro.org>
Thu, 3 Mar 2016 22:23:43 +0000 (14:23 -0800)
commit719f1aa4a67199a3c4c68a03f94e5ec44d9d5f82
tree0a6cdf499ae615abf88e8d826e0c63c431f54bdb
parentf9677e0f83080bb4186865868c359e72e1fac1ea
ptp: Add PTP_SYS_OFFSET_PRECISE for driver crosstimestamping

Currently, network /system cross-timestamping is performed in the
PTP_SYS_OFFSET ioctl. The PTP clock driver reads gettimeofday() and
the gettime64() callback provided by the driver. The cross-timestamp
is best effort where the latency between the capture of system time
(getnstimeofday()) and the device time (driver callback) may be
significant.

The getcrosststamp() callback and corresponding PTP_SYS_OFFSET_PRECISE
ioctl allows the driver to perform this device/system correlation when
for example cross timestamp hardware is available. Modern Intel
systems can do this for onboard Ethernet controllers using the ART
counter. There is virtually zero latency between captures of the ART
and network device clock.

The capabilities ioctl (PTP_CLOCK_GETCAPS), is augmented allowing
applications to query whether or not drivers implement the
getcrosststamp callback, providing more precise cross timestamping.

Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: kevin.b.stanton@intel.com
Cc: kevin.j.clarke@intel.com
Cc: hpa@zytor.com
Cc: jeffrey.t.kirsher@intel.com
Cc: netdev@vger.kernel.org
Acked-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: Christopher S. Hall <christopher.s.hall@intel.com>
[jstultz: Commit subject tweaks]
Signed-off-by: John Stultz <john.stultz@linaro.org>
Documentation/ptp/testptp.c
drivers/ptp/ptp_chardev.c
include/linux/ptp_clock_kernel.h
include/uapi/linux/ptp_clock.h