TPM-TPM-Profile-PTP协议-2

news2025/1/10 20:48:45

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 进入低功耗状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/472075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】带你先入门类和对象(上)

作者:小树苗渴望变成参天大树 作者宣言:认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 文章目录 前言一、面向过程和面向对象初步认识二、类的引入三、类的定义四.类的访问限…

java后端为前端提供接口,将数据以树形结构返回(工具类hutool.core.lang.tree)

用于后端java的实用、简洁、通俗易懂的树形工具类使用笔记 设计需求是做一个类似于部门管理的树形结构,后端设计表写逻辑,为前端提供接口,将数据以树形结构返回 这里直接上代码,基本可以直接拿去用,把父id和名称做对…

Oracle之可视化ETL任务调度设计接口实现方案

背景 以前的项目有这么一个需求,线上的任务需要灵活的可视化配置,而一般的ETL任务调度需要写JOB的SQL脚本(需要对Oracle的dbms_job比较熟悉),而维护成本比较高,虽然可以查看执行的信息,但是权限比较高,不利于项目后台数据的安全。所以通过需求背景,自研设计任务调度平…

小程序按钮重复点击解决方案

文章目录 前言一、为什么会发生重复点击二、针对以上问题怎么处理1、分析解决方法:1. 反馈2.禁用 三、最优解决总结 前言 小程序是直面用户便捷的应用,而在用户使用时往往都会涉及到关键节点的按钮点击,例如,注册登录时&#xff…

服务百万商家的系统,发布风险如何规避?微盟全链路灰度实践

一分钟精华速览 全链路灰度发布是指在微服务体系架构中,应用的新、旧版本间平滑过渡的一种发布方式。由于微服务之间依赖关系错综复杂,一次发布可能会涉及多个服务升级,所以在发布前进行小规模的生产环境验证,让新版本的应用实例…

锂电材料浆料匀浆搅拌设备轴承经常故障如何处理?

锂电材料浆料匀浆搅拌设备是锂电池生产中重要的设备之一,用于将活性材料、导电剂、粘结剂和溶剂混合成均匀的浆料,是电极制备过程中不可或缺的步骤。然而,由于高速搅拌和化学腐蚀等因素的影响,轴承经常会出现故障,导致…

Java基础部分面试题(2023最新)

一、Java概述 1. 谈谈你对 Java 平台的理解? ① 平台无关性(一次编译到处运行) ② GC(垃圾自动回收机制,不像C那样需要手动去释放堆内存) ③ 语言特性(泛型、反射、Lambda 表达式) …

Dubbo 简易环境搭建以及使用(2)

目录 环境搭建 Dubbo的3种使用方式: 1. XML配置的方式,一般用于Spring MVC工程 2. 配置文件的方式 (spring boot工程) 3. 注解方式 Dubbo 控制台 环境搭建 本篇将介绍Spring boot zookeeper Dubbo 简易环境的搭建以及使用…

同等学力申硕如何择校?

我们常常会在一些艰难选择面前不知所措,比如说不知道选择什么样的院校学习,不知道选择什么样的专业学习,不知道同等学力申硕的具体过程,不知道这个过程中你要付出多大的代价,更不知道学习中的一些关键环节等&#xff0…

飞利浦水健康携净水新品重磅亮相AWE2023

2023年度中国家电及消费电子博览会(AWE2023)于4月27日在上海新国际博览中心正式开幕。其中,飞利浦水健康携全屋高阶净水G5系列、厨下净水器U22Pro、冰热矿净四合一台式净饮机等新品悉数亮相,在暌违2年的AWE舞台上,为行…

垃圾分类算法训练及部署

垃圾分类算法训练及部署 创建模型与编译模型训练及保存模型生成模型应用 创建模型与编译 数据加载进模型后定义模型结构,并优化损失函数。直接调用VGG-16模型作为卷积神经网络,包括13个卷积层、3个全连接层、5个池化层,后接全连接层&#xf…

终于把 vue-router 运行原理讲明白了(一)!!!

一、vue-router 用法 1.1 首先我们需要在我们的项目中,下载vue-router,我在项目中使用的是3.x版本 1.2 在项目中引入,并实例化路由实例,贴代码如下 1.3 下面代码有两个重点部分,等在第三部分具体分析 (1&a…

FAMI-Pose训练

之前写过FAMI-Pose的论文解析,最近跑了一下官方代码,链接是:FAMI-Pose,但有很多问题,感觉是不是作者上传错了。这篇博客讲一下FAMI-Pose的训练。 运行 首先,安装环境,这个根据官方requirement…

NTT入门 开拓者的卓识

link 大意: 给定一个长度为n的数组a,求[1,n]的k阶子段和 我们定义k阶子段和如下: 思路: 这个k阶字段和,就是在k-1阶的基础上,再讲所有k-1阶的子段和都相加得到k阶子段和 k是很大的,所以我…

【C++学习】unordered_map和unordered_set的使用和封装

🐱作者:一只大喵咪1201 🐱专栏:《C学习》 🔥格言:你只管努力,剩下的交给时间! unordered_map和unordered_set 🧢unordered_map/set🔮性能比较🔮成…

Python采集二手车数据信息实现数据可视化展示

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用&#xff1a; Python 3.8 Pycharm 专业版是付费的 <文章下方名片可获取魔法永久用~> 社区版是免费的 模块使用&#xff1a; 第三方模块 需要安装的 requests >>> pip install requests p…

分享5款让生活和工作变得更加高效的软件

随着科技的发展,我们的生活和工作变得越来越数字化和自动化。许多实用软件应运而生,它们不仅简化了我们的生活,也使工作变得更加高效。这里我们来介绍5款非常实用的软件工具。 1.安全擦除工具——Secure Eraser Secure Eraser是一款可以安全删除数据的工具&#xff0c;它使用…

基于铜锁,在前端对登录密码进行加密,实现隐私数据保密性

本文将基于 铜锁&#xff08;tongsuo&#xff09;开源基础密码库实现前端对用户登录密码的加密&#xff0c;从而实现前端隐私数据的保密性。 首先&#xff0c;铜锁密码库是一个提供现代密码学算法和安全通信协议的开源基础密码库&#xff0c;在中国商用密码算法&#xff0c;例…

京东T7架构师用470页就把微服务架构原理与开发实战文档讲完了

前言 最近几年软件开发方法层出不穷&#xff0c;微服务作为一种主流的架构模式一直热度不减。 为了帮助广大程序员们更好更快地理解微服务的概念&#xff0c;学习微服务在项目中的实践&#xff0c;本文全面阐述了微服务架构模式的特点、架构思路、设计理念、技术框架及具体的…

根据cadence设计图学习硬件知识day07 了解一些芯片

1.LC0502N &#xff08;ESD静电保护元件&#xff09; 1.1 LC0502N 介绍 应用 ● USB 2.0电源和数据线 ● 机顶盒和数字电视 ● 数字视频接口&#xff08;DVI&#xff09; ● 笔记型电脑 ● SIM端口 ● 10/100以太网 1.2 LC0502N 引脚介绍 &#xff08;无语&#xff0…