[Intel PMC TGPIO Driver 0/5] Add support for Intel PMC Time GPIO Driver with PHC interface changes to support additional H/W Features

From: christopher . s . hall
Date: Fri Jan 31 2020 - 01:40:47 EST


From: Christopher Hall <christopher.s.hall@xxxxxxxxx>

Upcoming Intel platforms will have Time-Aware GPIO (TGPIO) hardware.
The TGPIO logic is driven by the Always Running Timer (ART) that's
related to TSC using CPUID[15H] (See Intel SDM Invariant
Time-Keeping).

The ART frequency is not adjustable. In order, to implement output
adjustments an additional edge-timestamp API is added, as well, as
a periodic output frequency adjustment API. Togther, these implement
equivalent functionality to the existing SYS_OFFSET_* and frequency
adjustment APIs.

The TGPIO hardware doesn't implement interrupts. For TGPIO input, the
output edge-timestamp API is re-used to implement a user-space polling
interface. For periodic input (e.g. PPS) this is fairly efficient,
requiring only a marginally faster poll rate than the input event
frequency.

Acknowledgment: Portions of the driver code were authored by Felipe
Balbi <balbi@xxxxxxxxxx>

=======================================================================

Christopher Hall (5):
drivers/ptp: Add Enhanced handling of reserve fields
drivers/ptp: Add PEROUT2 ioctl frequency adjustment interface
drivers/ptp: Add user-space input polling interface
x86/tsc: Add TSC support functions to support ART driven Time-Aware
GPIO
drivers/ptp: Add PMC Time-Aware GPIO Driver

arch/x86/include/asm/tsc.h | 6 +
arch/x86/kernel/tsc.c | 116 +++-
drivers/ptp/Kconfig | 13 +
drivers/ptp/Makefile | 1 +
drivers/ptp/ptp-intel-pmc-tgpio.c | 867 ++++++++++++++++++++++++++++++
drivers/ptp/ptp_chardev.c | 86 ++-
drivers/ptp/ptp_clock.c | 13 +
include/linux/ptp_clock_kernel.h | 2 +
include/uapi/linux/ptp_clock.h | 26 +-
9 files changed, 1099 insertions(+), 31 deletions(-)
create mode 100644 drivers/ptp/ptp-intel-pmc-tgpio.c

--
2.21.0