TPM FIFO 接口驱动程序

TCG PTP 规范定义了两种接口类型:FIFO 和 CRB。前者基于序列读写操作,后者基于包含完整命令或响应的缓冲区。

FIFO (First-In-First-Out,先进先出) 接口被 tpm_tis_core 相关的驱动程序使用。最初 Linux 只有一个名为 tpm_tis 的驱动程序,它支持内存映射 (即 MMIO) 接口,但后来扩展到支持 TCG 标准的其他物理接口。

由于上述历史原因,原始的 MMIO 驱动程序被称为 tpm_tis,而 FIFO 驱动程序的框架则被命名为 tpm_tis_core。tpm_tis 中的后缀“tis”来自 TPM Interface Specification (TPM 接口规范),这是 TPM 1.x 芯片的硬件接口规范。

通信基于 TPM 芯片通过硬件总线或内存映射共享的 20 KiB 缓冲区,具体取决于物理连接方式。该缓冲区进一步分成五个大小相等的 4 KiB 缓冲区,它们提供等效的寄存器组,用于 CPU 和 TPM 之间的通信。在 TCG 术语中,这些通信端点被称为“locality”(区域)。

当内核想要向 TPM 芯片发送命令时,它首先通过设置 TPM_ACCESS 寄存器中的 requestUse 位来保留 locality 0。当访问被授予时,该位由芯片清除。一旦完成通信,内核会写入 TPM_ACCESS.activeLocality 位。这会通知芯片该 locality 已被释放。

待处理的 locality 由芯片按降序逐个处理

  • Locality 0 具有最低优先级。

  • Locality 5 具有最高优先级。

有关 locality 的目的和含义的更多信息,请参阅 TCG PC Client Platform TPM Profile Specification 的第 3.2 节。

参考资料

TCG PC Client Platform TPM Profile (PTP) 规范 https://trustedcomputinggroup.org/resource/pc-client-platform-tpm-profile-ptp-specification/