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/