HTE 内核提供程序驱动程序¶
描述¶
Nvidia tegra HTE 提供程序(也称为 GTE (通用时间戳引擎))驱动程序实现了两个 GTE 实例:1) GPIO GTE 和 2) LIC (传统中断控制器) IRQ GTE。两个 GTE 实例都从系统计数器 TSC 获取时间戳,该计数器具有 31.25MHz 的时钟速率,并且驱动程序在将时钟节拍率转换为纳秒后将其存储为时间戳值。
GPIO GTE¶
此 GTE 实例实时为 GPIO 添加时间戳。为此,需要将 GPIO 配置为输入。只有始终开启 (AON) 的 GPIO 控制器实例才支持实时为 GPIO 添加时间戳,因为它与 GPIO GTE 紧密耦合。为了支持这一点,GPIOLIB 添加了两个可选的 API,如下所述。GPIO GTE 代码支持内核和用户空间使用者。内核空间使用者可以直接与 HTE 子系统通信,而用户空间使用者的时间戳请求则通过 GPIOLIB CDEV 框架发送到 HTE 子系统。Documentation/devicetree/bindings/timestamp
中描述的 hte 设备树绑定提供了一个示例,说明使用者如何请求 GPIO 线。
请参阅 gpiod_enable_hw_timestamp_ns()
和 gpiod_disable_hw_timestamp_ns()
。
对于用户空间使用者,在 IOCTL 调用期间必须指定 GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE 标志。请参阅 tools/gpio/gpio-event-mon.c
,它返回以纳秒为单位的时间戳。
LIC(传统中断控制器)IRQ GTE¶
此 GTE 实例实时为 LIC IRQ 线添加时间戳。Documentation/devicetree/bindings/timestamp
中描述的 hte 设备树绑定提供了一个示例,说明使用者如何请求 IRQ 线。由于它与 IRQ GTE 提供程序是一对一的映射,因此使用者只需指定他们感兴趣的 IRQ 号即可。HTE 框架中此 GTE 实例没有用户空间使用者支持。
IRQ 和 GPIO GTE 实例的提供程序源代码位于 drivers/hte/hte-tegra194.c
。测试驱动程序 drivers/hte/hte-tegra194-test.c
演示了 IRQ 和 GPIO GTE 的 HTE API 用法。