• Rajvi Jingar's avatar
    x86/tsc: Convert ART in nanoseconds to TSC · fc804f65
    Rajvi Jingar authored
    Device drivers use get_device_system_crosststamp() to produce precise
    system/device cross-timestamps. The PHC clock and ALSA interfaces, for
    example, make the cross-timestamps available to user applications.  On
    Intel platforms, get_device_system_crosststamp() requires a TSC value
    derived from ART (Always Running Timer) to compute the monotonic raw and
    realtime system timestamps.
    
    Starting with Intel Goldmont platforms, the PCIe root complex supports the
    PTM time sync protocol. PTM requires all timestamps to be in units of
    nanoseconds. The Intel root complex hardware propagates system time derived
    from ART in units of nanoseconds performing the conversion as follows:
    
         ART_NS = ART * 1e9 / <crystal frequency>
    
    When user software requests a cross-timestamp, the system timestamps
    (generally read from device registers) must be converted to TSC by the
    driver software as follows:
    
        TSC = ART_NS * TSC_KHZ / 1e6
    
    This is valid when CPU feature flag X86_FEATURE_TSC_KNOWN_FREQ is set
    indicating that tsc_khz is derived from CPUID[15H]. Drivers should check
    whether this flag is set before conversion to TSC is attempted.
    Suggested-by: default avatarChristopher S. Hall <christopher.s.hall@intel.com>
    Signed-off-by: default avatarRajvi Jingar <rajvi.jingar@intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: peterz@infradead.org
    Link: https://lkml.kernel.org/r/1520530116-4925-1-git-send-email-rajvi.jingar@intel.com
    fc804f65
tsc.c 37.1 KB