这周研究了一下spec中关于prefix的部分,在此做一个总结,欢迎大家指正补充。
TLP Prefix基本介绍
Local TLP Prefix处理
Local TLP Prefix不受ECRC的保护,此时其后续TLP仍然可以受ECRC保护
下图为Local TLP prefix类型
“VendPrefixL0”和“VendPrefixL1”类型保留作为厂商自定义的本地TLP前缀。为了最大限度地提高互操作性和灵活性,以下规则应用于这些前缀:
•组件不得发送包含供应商定义的本地TLP前缀的TLP,除非已明确启用(使用供应商特定的机制)。
•支持任何供应商定义的本地TLP前缀的组件必须支持Fmt字段的3位定义,并具有扩展Fmt字段支持位集。
•建议组件是可配置的(使用供应商特定的机制),以便所有供应商定义的前缀都可以使用两种供应商定义的本地TLP前缀编码中的任何一种发送。这样的配置不必是对称的(例如,链路的每一端可以使用不同的编码传输相同的前缀)
下图为Extended Fmt Field Supported 字段所在寄存器位置。
Extended Fmt Field Supported : If Set, the Function supports the 3-bit definition of the Fmt field. If Clear, the Function supports a 2-bit definition of the Fmt field. Must be Set for Functions that support End-End TLP Prefixes. All Functions in an Upstream Port must have the same value for this bit. Each Downstream Port of a component may have a different value for this bit.It is strongly recommended that Functions support the 3-bit definition of the Fmt field.
End-End TLP Prefix处理
若某元素开启了组播功能,复制到每一个组播组的TLP都会携带原TLP的End-End TLP Prefix
下图为End-End TLP prefix类型
还没写完,发现总结的文档没带回来,后面补上。
来补坑了。接着End-End TLP Prefix部分。
VendPrefixE0及VendPrefixE1是预留给供应商的两类End-End TLP Prefix。为了最大限度地提高这类End-End TLP Prefix的互操作性和灵活性,以下规则适用于此类前缀:
支持End-End TLP Prefix的RP
TLP Prefix Logging
Receiver接收到带有TLP prefix的TLP主要有以下几种错误
对于支持TLP Prefix及AER的device function,在开启了TLP Prefix Log Present Bit后,AER机制会把TLP Prefix错误记录到TLP Prefix Log Register,遵循的规则与TLP Header Log Register相同。 (当First Error Pointer有效时,TLP前缀日志和Header日志寄存器总是对应First Error Pointer中显示的错误)。
TLP Prefix 错误
-End--- Local---End-End前缀交替出现)的前缀在何处处理(EP/SW?),怎么处理?
该错误的类型为Malformed TLP Transaction Layer Errors Uncorrectable (Fatal)
处理方式是:
Receiver:Send ERR_FATAL to Root Complex.Log the prefix/header of the TLP
that encountered the error.
故,在EP处作为畸形包处理;
在SW处正常报错,但不处理?还是不检测?(本人倾向于后者)
(此问题不确定,欢迎讨论)
PASID TLP Prefix
带有未转换地址的Memory Requests ,包括Atomic请求;(Memory Requests (including AtomicOp Requests) with Untranslated Addresses)
地址转换请求(Address Translation Requests)
ATS作废Message(ATS Invalidation Messages)
页请求Message(Page Request Messages)
页请求组PRG响应消息(PRG Response Messages )
PASID TLP Prefix能力与ATS(Address Translation Services)及PRI(Page Request Interface)相互独立,具备PASID TLP Prefix能力的组件可以不支持ATS或PRI,支持ATS或PRI的组件也可以不支持PASID TLP Prefix。
一个TLP最多只能包含一个PASID TLP前缀。
PASID Extended Capability Structure
组件必须实现PASID TLP Prefix能力结构才能使用PASID TLP Prefix能力。有PASID TLP Prefix的扩展能力头标、PASID控制寄存器及PASID能力寄存器三部分。
PASID field
对于地址translated相关的tlp,该字段的使用在ATS中定义
PASID位宽同质性
理论上,每个function的PASID值都是不同的,且PASID位宽也应按照各function的实际需求进行设置。但实际实现时,系统软件往往不遵循该规则,而是在所有的function中都采用相同的PASID访问某块特定地址范围。
这种情况下,为了确保改通用的PASID位宽能够正常工作在RC及TA(Translation Agent,转换代理)上,系统软件应关闭热插拔EP或PASID位宽小于通用PASID位宽的TA的ATS服务。
考虑到RC、EP及TA等硬件组件的实现往往独立于系统软件,为实现软硬件友好交互,因此力荐这些硬件实现位宽20bit的PASID。
Execute Requested
在PASID能力寄存器及控制寄存器中Execute permission Supported及Execute Permission Enable位均有效时该Execute Requested位才能置一,若Execute Request位置一,表示该EP请求执行该TLP地址对应的指令
For RC,the following rules apply:
Privileged Mode Requested
只有在EP支持并使能了特权模式时才能启用Privileged Mode Requested,若Privileged Mode Requested位置一,表示该TLP为一笔特权模式的请求。
For Root Complexes, the following rules apply:
PASID TLP Prefix 使用管理
只有开启了PASID能力的组件才能使用PASID TLP Prefix,否则不能发送和接收带有PASID的TLP Prefix。
RC中的function在使用PASID TLP Prefix时需遵循以下规则:
缺省情况下,不允许使用PASID TLP前缀。
EP/RCiEP中的function在使用PASID TLP Prefix时需遵循以下规则:
◦一个Function可能同时支持有限数量的PASID停止请求。软件应该延迟发出新的停止请求,直到旧的停止请求完成。
◦一个function中的停止请求不能影响任何其他函数的运行。
◦停止请求不得影响Function内任何其他PASID的操作。
◦停止请求不能影响与PASID无关的事务的操作
◦当停止请求机制指示完成时,该function已:
▪ Stopped queuing new Requests for this PASID.
▪ Completed all Non-Posted Requests associated with this PASID.
▪ Flushed to the host all Posted Requests addressing host memory in all TCs that were used by the PASID. The mechanism used for this is device specific (for example: a non-relaxed Posted Write to host memory or a processor read of the Function can flush TC0; a zero length read to host memory can flush non-zero TCs).
▪ Optionally flushed all Peer-to-Peer Posted Requests to their destination(s). The mechanism used for this is device specific.
TLP Prefix Register
以下主要针对prefix涉及到的寄存器及字段进行介绍
欢迎补充讨论。