HTE 内核提供者驱动程序¶
描述¶
Nvidia Tegra HTE 提供者,也称为 GTE(通用时间戳引擎)驱动程序,实现了两个 GTE 实例:1) GPIO GTE 和 2) LIC(传统中断控制器)IRQ GTE。这两个 GTE 实例都从系统计数器 TSC 获取时间戳,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 用法。