diff options
author | Richard Cochran <richardcochran@gmail.com> | 2011-04-22 06:03:08 -0400 |
---|---|---|
committer | John Stultz <john.stultz@linaro.org> | 2011-05-23 16:01:00 -0400 |
commit | d94ba80ebbea17f036cecb104398fbcd788aa742 (patch) | |
tree | 7fe40228c5ea2bb77f2892b722d27155df8c1157 /Documentation/ptp/ptp.txt | |
parent | caebc160ce3f76761cc62ad96ef6d6f30f54e3dd (diff) |
ptp: Added a brand new class driver for ptp clocks.
This patch adds an infrastructure for hardware clocks that implement
IEEE 1588, the Precision Time Protocol (PTP). A class driver offers a
registration method to particular hardware clock drivers. Each clock is
presented as a standard POSIX clock.
The ancillary clock features are exposed in two different ways, via
the sysfs and by a character device.
Signed-off-by: Richard Cochran <richard.cochran@omicron.at>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Diffstat (limited to 'Documentation/ptp/ptp.txt')
-rw-r--r-- | Documentation/ptp/ptp.txt | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/Documentation/ptp/ptp.txt b/Documentation/ptp/ptp.txt new file mode 100644 index 000000000000..ae8fef86b832 --- /dev/null +++ b/Documentation/ptp/ptp.txt | |||
@@ -0,0 +1,89 @@ | |||
1 | |||
2 | * PTP hardware clock infrastructure for Linux | ||
3 | |||
4 | This patch set introduces support for IEEE 1588 PTP clocks in | ||
5 | Linux. Together with the SO_TIMESTAMPING socket options, this | ||
6 | presents a standardized method for developing PTP user space | ||
7 | programs, synchronizing Linux with external clocks, and using the | ||
8 | ancillary features of PTP hardware clocks. | ||
9 | |||
10 | A new class driver exports a kernel interface for specific clock | ||
11 | drivers and a user space interface. The infrastructure supports a | ||
12 | complete set of PTP hardware clock functionality. | ||
13 | |||
14 | + Basic clock operations | ||
15 | - Set time | ||
16 | - Get time | ||
17 | - Shift the clock by a given offset atomically | ||
18 | - Adjust clock frequency | ||
19 | |||
20 | + Ancillary clock features | ||
21 | - One short or periodic alarms, with signal delivery to user program | ||
22 | - Time stamp external events | ||
23 | - Period output signals configurable from user space | ||
24 | - Synchronization of the Linux system time via the PPS subsystem | ||
25 | |||
26 | ** PTP hardware clock kernel API | ||
27 | |||
28 | A PTP clock driver registers itself with the class driver. The | ||
29 | class driver handles all of the dealings with user space. The | ||
30 | author of a clock driver need only implement the details of | ||
31 | programming the clock hardware. The clock driver notifies the class | ||
32 | driver of asynchronous events (alarms and external time stamps) via | ||
33 | a simple message passing interface. | ||
34 | |||
35 | The class driver supports multiple PTP clock drivers. In normal use | ||
36 | cases, only one PTP clock is needed. However, for testing and | ||
37 | development, it can be useful to have more than one clock in a | ||
38 | single system, in order to allow performance comparisons. | ||
39 | |||
40 | ** PTP hardware clock user space API | ||
41 | |||
42 | The class driver also creates a character device for each | ||
43 | registered clock. User space can use an open file descriptor from | ||
44 | the character device as a POSIX clock id and may call | ||
45 | clock_gettime, clock_settime, and clock_adjtime. These calls | ||
46 | implement the basic clock operations. | ||
47 | |||
48 | User space programs may control the clock using standardized | ||
49 | ioctls. A program may query, enable, configure, and disable the | ||
50 | ancillary clock features. User space can receive time stamped | ||
51 | events via blocking read() and poll(). One shot and periodic | ||
52 | signals may be configured via the POSIX timer_settime() system | ||
53 | call. | ||
54 | |||
55 | ** Writing clock drivers | ||
56 | |||
57 | Clock drivers include include/linux/ptp_clock_kernel.h and register | ||
58 | themselves by presenting a 'struct ptp_clock_info' to the | ||
59 | registration method. Clock drivers must implement all of the | ||
60 | functions in the interface. If a clock does not offer a particular | ||
61 | ancillary feature, then the driver should just return -EOPNOTSUPP | ||
62 | from those functions. | ||
63 | |||
64 | Drivers must ensure that all of the methods in interface are | ||
65 | reentrant. Since most hardware implementations treat the time value | ||
66 | as a 64 bit integer accessed as two 32 bit registers, drivers | ||
67 | should use spin_lock_irqsave/spin_unlock_irqrestore to protect | ||
68 | against concurrent access. This locking cannot be accomplished in | ||
69 | class driver, since the lock may also be needed by the clock | ||
70 | driver's interrupt service routine. | ||
71 | |||
72 | ** Supported hardware | ||
73 | |||
74 | + Freescale eTSEC gianfar | ||
75 | - 2 Time stamp external triggers, programmable polarity (opt. interrupt) | ||
76 | - 2 Alarm registers (optional interrupt) | ||
77 | - 3 Periodic signals (optional interrupt) | ||
78 | |||
79 | + National DP83640 | ||
80 | - 6 GPIOs programmable as inputs or outputs | ||
81 | - 6 GPIOs with dedicated functions (LED/JTAG/clock) can also be | ||
82 | used as general inputs or outputs | ||
83 | - GPIO inputs can time stamp external triggers | ||
84 | - GPIO outputs can produce periodic signals | ||
85 | - 1 interrupt pin | ||
86 | |||
87 | + Intel IXP465 | ||
88 | - Auxiliary Slave/Master Mode Snapshot (optional interrupt) | ||
89 | - Target Time (optional interrupt) | ||