linux/drivers/ptp
Vladimir Oltean f65b71aa25 ptp: add ability to configure duty cycle for periodic output
There are external event timestampers (PHCs with support for
PTP_EXTTS_REQUEST) that timestamp both event edges.

When those edges are very close (such as in the case of a short pulse),
there is a chance that the collected timestamp might be of the rising,
or of the falling edge, we never know.

There are also PHCs capable of generating periodic output with a
configurable duty cycle. This is good news, because we can space the
rising and falling edge out enough in time, that the risks to overrun
the 1-entry timestamp FIFO of the extts PHC are lower (example: the
perout PHC can be configured for a period of 1 second, and an "on" time
of 0.5 seconds, resulting in a duty cycle of 50%).

A flag is introduced for signaling that an on time is present in the
perout request structure, for preserving compatibility. Logically
speaking, the duty cycle cannot exceed 100% and the PTP core checks for
this.

PHC drivers that don't support this flag emit a periodic output of an
unspecified duty cycle, same as before.

The duty cycle is encoded as an "on" time, similar to the "start" and
"period" times, and reuses the reserved space while preserving overall
binary layout.

Pahole reported before:

struct ptp_perout_request {
        struct ptp_clock_time start;                     /*     0    16 */
        struct ptp_clock_time period;                    /*    16    16 */
        unsigned int               index;                /*    32     4 */
        unsigned int               flags;                /*    36     4 */
        unsigned int               rsv[4];               /*    40    16 */

        /* size: 56, cachelines: 1, members: 5 */
        /* last cacheline: 56 bytes */
};

And now:

struct ptp_perout_request {
        struct ptp_clock_time start;                     /*     0    16 */
        struct ptp_clock_time period;                    /*    16    16 */
        unsigned int               index;                /*    32     4 */
        unsigned int               flags;                /*    36     4 */
        union {
                struct ptp_clock_time on;                /*    40    16 */
                unsigned int       rsv[4];               /*    40    16 */
        };                                               /*    40    16 */

        /* size: 56, cachelines: 1, members: 5 */
        /* last cacheline: 56 bytes */
};

Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-07-19 19:22:56 -07:00
..
idt8a340_reg.h ptp: clockmatrix: Rework clockmatrix version information. 2020-01-07 13:51:23 -08:00
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
Makefile ptp: add VMware virtual PTP clock driver 2020-03-05 17:25:07 -08:00
ptp_chardev.c ptp: add ability to configure duty cycle for periodic output 2020-07-19 19:22:56 -07:00
ptp_clock.c ptp_clock: Let the ADJ_OFFSET interface respect the ADJ_NANO flag for PHC devices. 2020-05-25 17:55:17 -07:00
ptp_clockmatrix.c ptp: ptp_clockmatrix: Add adjphase() to support PHC write phase mode. 2020-05-02 16:31:45 -07:00
ptp_clockmatrix.h ptp: ptp_clockmatrix: Add adjphase() to support PHC write phase mode. 2020-05-02 16:31:45 -07:00
ptp_dte.c ptp: ptp_dte: use devm_platform_ioremap_resource() to simplify code 2019-10-10 16:21:13 -07:00
ptp_idt82p33.c ptp: idt82p33: remove unnecessary comparison 2020-04-24 16:59:21 -07:00
ptp_idt82p33.h ptp: Add a ptp clock driver for IDT 82P33 SMU. 2020-02-24 13:08:46 -08:00
ptp_ines.c ptp: ptp_ines: convert to devm_platform_ioremap_resource 2020-04-29 11:44:08 -07:00
ptp_kvm.c ptp_kvm: Make kvm_ptp_lock static 2020-04-20 11:02:56 -07:00
ptp_pch.c ptp_pch: use generic power management 2020-06-25 12:35:44 -07:00
ptp_private.h ptp: fix the race between the release of ptp_clock and cdev 2019-12-30 20:19:27 -08:00
ptp_qoriq_debugfs.c ptp_qoriq: add little enadian support 2019-02-12 12:58:48 -05:00
ptp_qoriq.c ptp_qoriq: drop the code of alarm 2020-02-16 18:30:41 -08:00
ptp_sysfs.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
ptp_vmw.c ptp: add VMware virtual PTP clock driver 2020-03-05 17:25:07 -08:00