RE: [PATCH v4 2/2] PTP: add support for one-shot output

From: Keller, Jacob E
Date: Tue Sep 24 2019 - 17:16:17 EST


> -----Original Message-----
> From: Hall, Christopher S
> Sent: Tuesday, September 24, 2019 1:24 PM
> To: Keller, Jacob E <jacob.e.keller@xxxxxxxxx>; Felipe Balbi
> <felipe.balbi@xxxxxxxxxxxxxxx>; Richard Cochran <richardcochran@xxxxxxxxx>
> Cc: netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> Subject: RE: [PATCH v4 2/2] PTP: add support for one-shot output
>
> Good catch on the terminology. This is an API that produces edges not pulses.
> This flag causes the PEROUT ioctl to ignore the period argument and produce a
> single edge. Currently, the igb driver implements the same function, but uses
> a "magic" invalid period specification to signal that the period argument
> should be ignored (use_freq == 0):
>
> if (on && ((ns <= 70000000LL) || (ns == 125000000LL) ||
> (ns == 250000000LL) || (ns == 500000000LL))) {
> if (ns < 8LL)
> return -EINVAL;
> use_freq = 1;
> }

>From my understanding, the use_freq = 0 is intended to perform a clock using the target time registers with an interrupt to re-trigger the next toggle.

If you use a frequency not supported by freqout, it will result in an interrupt that re-toggles the target time, not a single edge.

>
> The proposal is to support this function without magic period specifications
> using an explicit flag instead. An example use case is pulse-per-second
> output. While PPS is periodic, time-aware GPIO is driven by (an
> unadjustable) Always Running Timer (ART). It's necessary to schedule each
> edge in software to produce PPS synced with system time.
>
> Chris

Oh, so "one shot" will simply toggle the clock output once. I see.

So this won't really work for generating a pulse per second, and we would possibly still want an API for that?

Thanks,
Jake