| .. SPDX-License-Identifier: GPL-2.0+ |
| |
| ============================================ |
| The Linux Hardware Timestamping Engine (HTE) |
| ============================================ |
| |
| :Author: Dipen Patel |
| |
| Introduction |
| ------------ |
| |
| Certain devices have built in hardware timestamping engines which can |
| monitor sets of system signals, lines, buses etc... in realtime for state |
| change; upon detecting the change they can automatically store the timestamp at |
| the moment of occurrence. Such functionality may help achieve better accuracy |
| in obtaining timestamps than using software counterparts i.e. ktime and |
| friends. |
| |
| This document describes the API that can be used by hardware timestamping |
| engine provider and consumer drivers that want to use the hardware timestamping |
| engine (HTE) framework. Both consumers and providers must include |
| ``#include <linux/hte.h>``. |
| |
| The HTE framework APIs for the providers |
| ---------------------------------------- |
| |
| .. kernel-doc:: drivers/hte/hte.c |
| :functions: devm_hte_register_chip hte_push_ts_ns |
| |
| The HTE framework APIs for the consumers |
| ---------------------------------------- |
| |
| .. kernel-doc:: drivers/hte/hte.c |
| :functions: hte_init_line_attr hte_ts_get hte_ts_put devm_hte_request_ts_ns hte_request_ts_ns hte_enable_ts hte_disable_ts of_hte_req_count hte_get_clk_src_info |
| |
| The HTE framework public structures |
| ----------------------------------- |
| .. kernel-doc:: include/linux/hte.h |
| |
| More on the HTE timestamp data |
| ------------------------------ |
| The ``struct hte_ts_data`` is used to pass timestamp details between the |
| consumers and the providers. It expresses timestamp data in nanoseconds in |
| u64. An example of the typical timestamp data life cycle, for the GPIO line is |
| as follows:: |
| |
| - Monitors GPIO line change. |
| - Detects the state change on GPIO line. |
| - Converts timestamps in nanoseconds. |
| - Stores GPIO raw level in raw_level variable if the provider has that |
| hardware capability. |
| - Pushes this hte_ts_data object to HTE subsystem. |
| - HTE subsystem increments seq counter and invokes consumer provided callback. |
| Based on callback return value, the HTE core invokes secondary callback in |
| the thread context. |
| |
| HTE subsystem debugfs attributes |
| -------------------------------- |
| HTE subsystem creates debugfs attributes at ``/sys/kernel/debug/hte/``. |
| It also creates line/signal-related debugfs attributes at |
| ``/sys/kernel/debug/hte/<provider>/<label or line id>/``. Note that these |
| attributes are read-only. |
| |
| `ts_requested` |
| The total number of entities requested from the given provider, |
| where entity is specified by the provider and could represent |
| lines, GPIO, chip signals, buses etc... |
| The attribute will be available at |
| ``/sys/kernel/debug/hte/<provider>/``. |
| |
| `total_ts` |
| The total number of entities supported by the provider. |
| The attribute will be available at |
| ``/sys/kernel/debug/hte/<provider>/``. |
| |
| `dropped_timestamps` |
| The dropped timestamps for a given line. |
| The attribute will be available at |
| ``/sys/kernel/debug/hte/<provider>/<label or line id>/``. |