TCG_PCClient_Device_Driver_Design_Principles_TPM2p0_v1p1_r4_211104_final.pdf

4 简介 本文档补充了 TCG PC Client Platform TPM Profile for TPM 2.0 Specification [PTP]; 特别是,本文档为有兴趣开发 DD 的 DD 编写者提供指导,以便与旨在满足 [PTP] 要求的 TPM 对话。 在使用本文档之前,读者应该熟悉 TPM 库规范第 1 部分中描述的 TPM 体系结构,并彻底熟悉 [ PTP]规范。 [PTP] 作者的目的是提供足够的标准化、指导和限制,以允许每个操作系统或每个操作系统环境中的通用 DD 访问和控制来自不同 TPM 制造商的 TPM,同时仍然为 TPM 制造商提供足够的灵活性 产品和功能差异化。 然而,[PTP] 是从 TPM 开发人员的角度编写的,几乎没有包含有助于 DD 设计人员的信息性评论。 本文档的读者是 TPM 制造商和 TPM DD 设计、开发和测试工程师。 TPM 制造商会发现此文档很有价值,因为它从 DD 的角度解释了 TPM 的行为。 此外,本文档提供的指南可能对独立 BIOS 供应商有用

TPM 寄存器接口
[PTP] 定义了 TPM 寄存器和寄存器接口类型的访问方法,以及任何物理接口依赖性。

5 接口选择
根据 [PTP] 的 TPM 可以在物理 SPI 接口上提供最多三个不同的逻辑接口:
 符合 TIS 1.3 的 FIFO
 根据 [PTP] 的 FIFO
 CRB
FIFO 接口在 LPC 和 SPI 物理接口上相同,但在 I2C 物理接口上不同。
根据平台实现,必须根据图 1 接口选择切换 TPM 的默认接口。
注意:切换仅与 BIOS DD 相关。

6 局部性和访问协议

[PTP] 中定义的局部性是 TPM 为不同平台组件提供对 TPM 的隔离访问的机制。 TPM 通过为每个位置提供不同的寄存器地址范围来实现这一点。 有关其他信息,请参阅 [PTP] 第 5.2 节。 位置是对 TPM 的断言,即命令的源与特定平台组件相关联。 局部性可以被认为是基于硬件的授权。 TPM 实际上并不知道位置和平台组件之间关系的性质。 [PTP] 中定义了区域的保护和分离(以及因此与相应平台组件的关联)。 TPM 的设计为命令提供单线程访问:即,每个命令必须在请求另一个命令之前完成。 局部性并不意味着不同的平台组件可以同时访问 TPM。 使用的方案是 TPM 级别的请求/授权方案。 通常,对一个地方的访问是非抢占式的,即,如果一个地方可以访问 TPM,那么在另一个地方可以被授予访问权限之前,该地方必须释放它的地方。 通过捕获机制提供异常。 该机制旨在仅用作“故障安全”,而不是正常执行的协议,以防止可能成为死锁的系统。 对于 FIFO 和 CRB 接口,局部性断言是通过在指定的地址范围块与 TPM 交互来完成的。 每个地区都被分配了一个地址范围,并且当在与地区关联的地址范围内接收到命令时,TPM 设置一个内部标志(localityModifier)来记录哪个地区已被授予访问权限。

与 TPM Localities 关联的所有进程都可以访问 TPM_ACCESS_x (FIFO) 或 TPM_LOC_STATE_x (CRB) 寄存器,用于检查和/或请求使用其关联的 Locality。 如果当前执行进程的 Locality 不是 TPM 当前活动的 Locality,则可以使用分配给进程 Locality 的 TPM_ACCESS_x/TPM_LOC_STATE_x 发出请求。 如果没有设置 TPM Locality 或当前有权访问 TPM 的 Locality 释放它,则请求 Locality 被授予访问权限。 请参阅图 2 位置访问协议 - DD 观点以了解相应的流程。

7 使用 TPM 的代码流 以下流程图

(图 3、图 4、图 5 和图 6)提供了代码流的信息序列,DD 通过遵循 [PTP] 的规范性和信息性部分关于 FIFO 或 CRB 协议。 这些流程图仅供参考,仅供参考。 通常的做法是让 DD 在与 TPM 通信期间检查寄存器的一致性。 这确保了实际的 TPM 状态与 DD 假定的 TPM 状态一致。 建议在命令写入、执行和读取期间添加对 TPM_CRB_STS_X.tpmSts 和 TPM_CRB_STS_X.tpmIdle(CRB 接口)的检查,以确保没有发生致命错误并且 TPM 不处于空闲状态。

7.1 FIFO 协议 FIFO 协议的代码流专为常见用例而设计。 有一些优化的可能性,可以应用于特定的平台。 DD 的开发人员必须考虑 DD 所针对的平台的功能,并且必须确定在应用优化时是否存在任何功能风险。
7.1.1 解释和定义 下面表 2 中定义的 DD 变量和缩写用于 FIFO 协议的以下流程图(图 3 和图 4):

7.1.2 取消读取TPM.burstCount 如果DD有指示TPM准备好接收命令(TPM.commandReady == 1),DD可能只读取一次TPM.burstCount然后写入所有字节(初始 TxSize 的值)包含在 DD 的传输缓冲区到 TPM FIFO 中。 注意:此优化要求主机和 TPM 之间的硬件握手(对于 LPC:SYNC = Long Wait,对于 SPI:Wait states per [PTP],6.4.5 Flow Control)绝对正确地工作。 否则,如果握手出现问题,平台可能会挂起。

7.2 CRB 协议
7.2.1 解释和定义
下表 3 中定义的 DD 变量和缩写用于 CRB 协议的以下流程图(图 5 和图 6):

注意:任何超时情况都表示需要正确处理错误的 TPM 故障。
如果无法纠正此类情况,则 TPM 有缺陷。
所有表达式都遵循 C 风格语法

8 中断使用

为方便起见,本节重复了 TCG PC 客户端平台 TPM 配置文件 [PTP] 规范第 5.6 节“中断”中包含的一些信息。

8.1 设置

TPM 的 OS DD 将向 OS 注册一个 ISR 以指示它可以处理中断。 这通常在 TPM DD 初始化期间完成。 然后,操作系统将确保每当 TPM 设备触发中断时,都会调用 TPM DD 的 ISR 来处理中断。 OS DD 设计指南建议采用拆分方法来处理中断:使用 ISR 来处理快速任务,例如确认中断。 然后,ISR 会安排另一个处理程序,有时称为延迟过程调用 (DPC),它会执行更多时间密集型工作

8.2 启用中断

启用TPM 中断就像在中断启用寄存器(TPM_INT_ENABLE_x 或TPM_CRB_INT_ENABLE_x)中设置相应中断位一样简单。 关于如何使用中断有不同的方法。 一种是在OS TPM DD启动时启用中断,另一种是选择性地启用中断。 如果操作系统 TPM DD 采用第一种方法,它必须在中断处理程序和发送 TPM 命令的代码之间进行同步,以确定是否需要中断。 仅在发送命令后启用中断和在接收到中断后禁用中断将不需要这种同步。 操作系统 TPM DD 编写者必须意识到,启用和禁用中断会产生性能成本,即额外的寄存器读取和写入。 操作系统也可能会产生处理中断的开销。 它必须将中断分派给正确的中断服务程序。 调度中断时,操作系统通常会屏蔽其他中断,直到中断被确认。 为了解决这些惩罚,[PTP] 包含对可能优化的描述:许多命令在正常操作期间立即响应,因此 DD 在发送命令后,应轮询 TPM 以获取响应,同时保持数据可用中断禁用。 如果 DD 确定 TPM 将无法立即响应,它将停止轮询 TPM 并启用数据可用中断。 如果 DD 这样做,则在轮询期间最后一次读取发生的时间与启用中断之间可能会出现竞争条件。 因此,使能中断后,DD应该再轮询一次TPM。 这同样适用于影响其他中断的变化。 对于 LPC 设备,TPM_INT_ENABLE_x 寄存器还包含中断的极性。 TPM DD 应注意不要在正常操作期间更改极性。 某些 TPM 实现要求操作系统 TPM DD 设置已由固件/操作系统分配给 TPM 设备的中断向量。 OS TPM DD查询OS提供的设备信息,将中断向量写入TPM_INT_VECTOR_x寄存器。

8.3 处理中断
  当导致 TPM 发出中断信号的事件发生时,TPM 必须在 TPM_INT_STATUS_x 或 TPM_CRB_INT_STS_x 寄存器中设置适当的字段。 如果 TPM 尚未发送中断,则 TPM_INT_STATUS_x 或 TPM_CRB_INT_STS_x 寄存器中的字段从 0 到 1 的转换必须导致 TPM 根据 SIRQ 或 PIRQ 协议断言适当的中断。 中断服务例程将读取 TPM_INT_STATUS_x 或 TPM_CRB_INT_STS_x 寄存器以确定原因并采取适当的措施。 当中断被服务时,中断服务例程必须对 I/O APIC 执行中断结束 (EOI),以重新准备 I/O APIC 中的 TPM 中断。 然后中断服务例程还必须向TPM发送TPM_EOI,以允许TPM发送新的中断。

在收到 TPM_EOI 消息之前,TPM 不得发出另一个中断,即使发生了应该引起中断的新事件。 TPM 应在 TPM_INT_STATUS_x 或 TPM_CRB_INT_STS_x 寄存器中设置适当的字段,但 TPM 断言中断直到它收到 TPM_EOI。 如果中断处理程序检测到设置了多个字段,它可能会处理所有原因并清除多个状态字段。 这意味着可以在不引起新中断的情况下处理中断。 中断处理程序可能会在发送 TPM_EOI 之前继续检查 TPM_INT_STATUS_x 或 TPM_CRB_INT_STS_x 字段是否设置了新字段。 请注意,每个中断只能有一个未完成的通知。 如果 TPM DD 实施了一种策略,可以为每个命令启用和禁用数据可用中断,例如,基于命令的持续时间,则应在确认中断时禁用数据可用中断。 这必须在发送下一个命令之前发生。 由于 TPM 的串行特性,TPM 的通信接口不应在发送下一个命令之前触发另一个数据可用中断。 请注意,中断可能会在设备之间共享。 这意味着当另一个设备触发中断时,可以调用 TPM DD 的 ISR。 TPM DD 必须检查 TPM_INT_STATUS_x 或 TPM_CRB_INT_STS_x 寄存器以查看 TPM 设备是否生成中断。 如果 TPM DD 实现延迟过程调用 (DPC),则数据可用中断的 DPC 可以读取响应或向另一个线程发出信号以继续处理响应

9 寻址、电源管理和 TPM 操作模式

本章描述了在电源管理和 ACPI 方面相当复杂的 TPM 处理。 TPM DD 的实施不需要本章。
9.1 TPM 寻址
TPM 与其他平台组件一起在平台重置期间初始化。 平台重置后,根据定义,S-CRTM 是第一个执行的代码。 必然地,此环境往往无法发现 TPM 的逻辑位置。 D-CRTM 具有相同的局限性。 因此,为了为 PC 客户端提供最佳的安全性和性能属性,PTP 规范将 TPM 的位置定义为固定位置,不允许有任何差异。 基于 ACPI 的操作系统使用平台固件提供的 ACPI 表来分配和保留 TPM 资源。 DD 使用即插即用管理器的接口来发现为当前平台的启动周期分配的资源。 (例如,是否已为该引导周期分配了 TPM DD,分配了哪个 IRQ 等?)但是,如果没有用于 TPM 的 ACPI 表条目,操作系统将不会加载 DD,因此可以执行 没有什么。

9.2 电源管理
9.2.1 提醒
对于 PC,ACPI 定义了一组电源状态,每个状态都有不同的性能和电源要求。 系统状态 系统状态描述了整个系统的电源状态。 定义的系统状态列举如下:
 S0 - 工作状态(更快的响应时间,高功率使用)
 S1、S2、S3 – 睡眠(某些组件可能已断电;易失性存储器已通电)
 S4 – 休眠(系统关闭;易失性内存内容保存到非易失性内存)
 S5 – 关闭设备状态
设备状态
D0–D3 取决于设备:

9.2.2 Power State Transitions

TPM 设计为仅在平台“运行状态”期间消耗电力,即特别是在 S0、S1 和 S2 ACPI 电源状态期间。 在平台的“非运行”状态(S4 和 S5)期间,TPM 不耗电。 TPM 可以在 S3 期间从辅助或备用电源汲取电力,但这样做只能在发出 TPM2_Shutdown (STATE) 命令时维持所需的状态。 在特定条件下平台的“运行状态”期间,允许 TPM 进入较低功率状态。 如果 TPM 处于空闲状态,只要 TPM 设备驱动程序(即图 3 使用 FIFO 协议发送命令的流程图)和 TPM 功能不受影响,就可以通过关闭内部功能块来降低其功耗。 当 TPM 在其接口上接收到会导致其从空闲状态变为就绪状态的事务时,TPM 在 TIMEOUT_B 内退出低功耗模式。 在收到 TPM2_Startup 命令之前,不允许 TPM 进入低功耗状态

TPM-TPM-Profile-PTP协议-2相关推荐

  1. PTP 协议实现多个Basler/海康工业相机同步拍照

    开通PTP协议,使用交换机实现多个工业相机纳秒级同步拍照. Basler 相机设置:先设置外触发 (1)设置主相机:选择一个相机在Transport layer 下IEEE 1588 V2 Enabl ...

  2. ptp协议服务器,ptp服务器 ieee1588 ieee 1588 1588对时

    ptp服务器, ieee1588, ieee 1588, 1588对时,ptp 1588,ieee 1588 ptp, ptp时间服务器, ieee1588 ptp, ieee1588时钟,1588 ...

  3. android 加密 tpm,TPM 设备

    TPM的全称是Trusted Platfrom Module ,其是一个微控制器,可以存储密匙,密码和数字证书 TPM 目前看有SPI和I2C 两种接口,其一般嵌入到主板上,主要用于低于外部软件攻击和 ...

  4. linux下测试tpm,TPM笔记(2)--TPM安装手册

    判断机器上是否有TPM芯片的简单方法 查看BIOS-Security中是否有TPM设置选项. TPM真实开发环境构建手册 实验环境:Ubuntu 11.10 Linux Kernel 3.0.0 软件 ...

  5. TPM分析笔记(七)TPM 模块中的密码算法家族。

    目录 密码攻击 暴力破解 根据类型来计算算法强度 针对算法本身的攻击 安全的定义 密码家族 哈希(摘要) 哈希扩展(HashExtend) 基于哈希的消息认证码(HashedMessageAuthen ...

  6. 转录本counts,FPKM,TPM相互转化

    FPKM: Fragments Per Kilobase of exon model per Million mapped fragments(每千个碱基的转录每百万映射读取的fragments) F ...

  7. ptp精准时间协议_PTP协议时间同步精度测试

    PTP 协议时间同步精度测试 陈良华 ; 黄源 [摘 要] 本文根据 PTP 精确时间协议的同步原理 , 研究了时间同步的测试方法与实 现 , 提出了测试时间同步的方法和系统结构 , 开发了时间同步测 ...

  8. 树莓派Linux内核编译选项如何开启TPM 2.0

    本文更新于2018-08-11 首发于简书, 文章链接 http://www.jianshu.com/p/174844b99716 同步至GitHub:https://github.com/liuqu ...

  9. ptp精准时间协议_PTP高精度时间同步协议

    Precision Time Protocol ( PTP ) 一.什么是 PTP PTP 是一种高精度时间同步协议 , 可以到达亚微秒级精度 , 有资料说可达到 30 纳秒左右的偏差精度 , 但需 ...

  10. ptp精准时间协议_网络时钟同步协议– NTP, PTP – 默默的点滴

    这篇文章介绍一下两个时钟同步的网络协议:NTP和PTP. 这里不涉及协议的原理和具体实现(想了解的可自行Google),重点是如何搭建起这两个服务. 1. NTP及PTP简介 NTP(Network ...

最新文章

  1. 国内42所一流大学综合排名出炉!清北之后谁是国内第三?
  2. Javascript日期时间总结
  3. SAP系统中发送消息的几种办法
  4. 简单案例:unittest+HTMLTestRunner实现生成测试报告
  5. JVM 的内存模型及jstat命令的使用
  6. php 文件 后缀,php如何修改文件后缀名
  7. Q1:spring-boot中Controller路径无法被访问的问题
  8. 直播电商都用上 AI 实时翻译了!歪果仁也能听懂李佳琦
  9. Citrix Bypass总结
  10. 点击更多显示更多内容
  11. Linux上的errno和strerror
  12. Android 自定义View:教你轻松实现内存清理加速球的效果
  13. 香港服务器低价租用内幕
  14. Swiper.js实现无缝滚动
  15. 将2到10这9个自然数填入图中9个圆圈中,每个数只能用一次,且使每一条直线上的三个数的和相同,则中间圆圈的数是(),对应的每一条直线上的三个数的和是()
  16. Linux目录文件操作命令篇--(工作常用命令的深度使用,小白必收藏)
  17. Android 音视频深入 六 使用FFmpeg播放视频(附源码下载)
  18. 计算机图形学:3D坐标系及左右手坐标的转换
  19. matlab 图像退化,基于matlab的退化图像复原(一)------图像退化处理
  20. [猿来小课]Python开发入门第三讲:Python的安装

热门文章

  1. 基于ESP32的SPI读取MPU9250数据
  2. (Android-RTC-1)Android-WebRTC初体验
  3. python定义一个空列表lt_11个python列表方法全面解析!
  4. 计算机二级c++考试
  5. POI Excel插入图片(网络路径、本地路径)
  6. 我理解的企业技术管理(三)——如何做好技术管理
  7. 快速理解数据库函数依赖(平凡函数依赖、非平凡函数依赖、完全函数依赖、部分函数依赖、传递依赖)
  8. 什么是RIA,他的优势?
  9. [GYM103660] The 19th Zhejiang University City College Programming Contest 浙大城市学院校赛VP/S
  10. Cloud Foundry的真实情况到底是怎样的?