TPM FIFO 接口驱动程序

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

FIFO(先进先出)接口由依赖于 tpm_tis_core 的驱动程序使用。最初 Linux 只有一个名为 tpm_tis 的驱动程序,它覆盖了内存映射(也称为 MMIO)接口,但后来扩展到覆盖 TCG 标准支持的其他物理接口。

由于上述历史原因,最初的 MMIO 驱动程序称为 tpm_tis,而 FIFO 驱动程序的框架称为 tpm_tis_core。tpm_tis 中的后缀“tis”来自 TPM 接口规范,它是 TPM 1.x 芯片的硬件接口规范。

通信基于一个 20 KiB 的缓冲区,该缓冲区由 TPM 芯片通过硬件总线或内存映射共享,具体取决于物理布线。该缓冲区进一步分为五个大小相等的 4 KiB 缓冲区,这些缓冲区为 CPU 和 TPM 之间的通信提供了等效的寄存器集。在 TCG 术语中,这些通信端点称为局部性。

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

挂起的局部性由芯片按降序依次服务。

  • 局部性 0 具有最低优先级。

  • 局部性 5 具有最高优先级。

有关局部性的目的和含义的更多信息,请参阅 TCG PC 客户端平台 TPM 配置文件规范的第 3.2 节。

参考资料

TCG PC 客户端平台 TPM 配置文件 (PTP) 规范 https://trustedcomputinggroup.org/resource/pc-client-platform-tpm-profile-ptp-specification/