PCIe学习笔记(19)

TLP Prefix(前缀)规则

以下规则适用于任何包含TLP Prefix的TLP:

•对于任何TLP, TLP第0字节的Fmt[2:0]字段值为100b表示存在TLP Prefix, Type[4]位表示TLP Prefix的类型。

◦Type[4]位的值为0b表示存在Local TLP Prefix

◦Type[4]位的值为1b表示存在End-End TLP Prefix

•TLP Prefix的第1到第3字节的格式由其TLP Prefix类型定义。

•包含TLP前缀的TLP必须有一个底层的TLP报头。收到的违反此规则的TLP将作为畸形TLP处理。这是一个与接收端口相关的报告错误(参见6.2节)。

•允许一个TLP包含多个任何类型的TLP前缀(那么Type字段怎么标?)

◦当TLP中存在Local和End-End TLP前缀的组合时,需要所有Local TLP前缀位于任何End-End TLP前缀之前。收到的违反此规则的TLP将作为畸形TLP处理。这是一个与接收端口相关的报告错误(参见6.2节)。

•每个TLP前缀的大小为1DW。可以重复使用TLP前缀,以便为附加数据提供空间。

Local TLP Prefix Processing

•本地TLP前缀类型由Type字段的L[3:0]子字段确定;

◦Type[4]必须为0b;

◦本地TLP前缀L[3:0]的定义如表2-36所示

•大小、路由和流量控制规则根据不同的Local TLP Prefix类型而不同。

•接收到不支持的本地TLP前缀类型的TLP是一个错误。如果设置了扩展Fmt字段支持位,除非在另一规格中明确另有规定,违反此规则的TLP将被视为畸形TLP。这是一个与接收端口相关联的报告错误(见第6.2节)。如果清除了扩展Fmt字段支持位,行为是设备定义的。

•,即使底层TLP受ECRC保护,没有本地TLP前缀受ECRC保护。(这个主要是和End-End TLP前缀的区别)

Vendor Defined Local TLP Prefix

VendPrefixL0"和"VendPrefixL1"类型保留作为厂商自定义的本地TLP前缀。为了最大限度地提高互操作性和灵活性,以下规则应用于这些前缀:

•组件不得发送包含供应商定义的本地TLP前缀的TLP,除非已明确启用(使用供应商特定的机制)。

•支持任何供应商定义的本地TLP前缀的组件必须支持Fmt字段的3位定义,并具有扩展Fmt字段支持位集。

•建议组件是可配置的(使用供应商特定的机制),以便所有供应商定义的前缀都可以使用两种供应商定义的本地TLP前缀编码中的任何一种发送。这样的配置不必是对称的(例如,链路的每一端可以使用不同的编码传输相同的前缀)。

End-End TLP Prefix Processing

•End-End TLP前缀类型由Type字段的子字段E[3:0]确定

◦Type[4]必须为1b

◦End-End TLP前缀E[3:0]的值定义如表2-37所示

•在一个TLP中允许的最大End-End TLP前缀数为4:

◦支持TLP前缀的Receiver必须检查此规则。如果接收方认定该TLP违反了此规则,则该TLP为畸形TLP。这是一个与接收端口相关的报告错误。

•End-End TLP前缀的存在不会改变该TLP的路由。

•功能通过Device Capabilities 2寄存器中的Max End-End TLP Prefixes字段表示它们支持多少个End-End TLP前缀。

◦对于RC,允许Max End-End TLP前缀字段返回一个值,表示支持比根端口硬件实际实现的更少的End-End TLP前缀;但是,错误处理语义仍然必须基于字段中包含的值。收到的TLP包含的End-End TLP前缀数超过根端口支持的数目时,处理方法如下。建议将请求作为不受支持的请求处理,否则它们必须作为畸形的tlp处理。建议将Completions作为意外Completions处理,否则必须作为畸形tlp处理。对于入端口收到的TLPs,这是一个与入端口相关的报告错误。对于内部接收到的要从出口端口发送出去的tlp,这是一个与出口端口相关的报告错误。

◦对于所有其他功能类型,收到的TLP包含更多的End-End TLP前缀,而不是一个功能所支持的,必须作为畸形TLP处理。这是一个与接收端口相关的报告错误(参见6.2节)。

•如果设置了End-End TLP前缀支持位,SW必须支持转发最多4个End-End TLP前缀的TLP。

•不同根端口的End-End TLP前缀支持位集允许报告不同的最大End-End TLP前缀值。

•如果底层TLP受ECRC保护,则所有End-End TLP前缀都受ECRC保护。

•接收不支持End-End TLP前缀的接收器收到带有End-End TLP前缀的TLP会出错。违反此规则的TLP将作为畸形TLP处理。这是一个与接收端口相关的报告错误(参见6.2节)。

•软件应确保包含End-End TLP前缀的TLP不会发送到不支持它们的组件。扩展Fmt字段支持位为Clear的组件可能会误认为包含TLP前缀的TLP。

•如果上游端口的某个功能设置了End-End TLP前缀支持位,则该上游端口的所有功能都必须将收到的包含不支持的End-End TLP前缀类型的请求作为不支持的请求处理(UR)。这是一个与接收端口相关的报告错误(参见6.2节)。

•如果上游端口的某个功能设置了End-End TLP前缀支持位,则该上游端口的所有功能都必须将收到的包含不支持的End-End TLP前缀类型的Completion处理为Unexpected Completion(UC)。这是一个与接收端口相关的报告错误(参见6.2节)。

•对于路由元素,每个出口端口的End-End TLP前缀阻塞位决定包含End-End TLP前缀的TLP是否可以通过该出口端口传输。如果转发被阻断,则整个TLP被丢弃,并报告TLP Prefix blocked Error。如果被阻塞的TLP是一个Non-Posted请求,则出口端口返回一个带有Unsupported Request Completion Status的Completion。TLP前缀阻塞错误是一个与出口端口相关的报告错误(参见6.2节)。

•对于启用多播的路由元素(参见6.14节)。End-End TLP前缀在一个TLP的所有组播副本中被复制。TLP前缀Egress组播报文的阻塞在每个Egress端口独立进行。

Vendor Defined End-End TLP Prefix

"VendPrefixE0"和"VendPrefixE1"类型保留作为厂商自定义的端到端TLP前缀。为了最大限度地提高互操作性和灵活性,以下规则应用于此类前缀:

•组件不得发送包含供应商定义的End-End TLP前缀的TLP,除非已明确启用(使用供应商特定的机制)。

•建议组件可配置(使用供应商特定的机制),以使用两种供应商定义的End-End TLP前缀编码中的任何一种。这样做允许在单个PCI Express拓扑中同时使用两个不同的供应商定义的端到端TLP前缀,而不要求每个源都了解其发送的每个TLP的最终目的地。

Root Ports with End-End TLP Prefix Supported

支持根端口之间包含End-End TLP前缀的TLP对等路由是可选的,依赖于具体实现。如果RC支持两个或多个根端口之间的End-End TLP前缀路由能力,则必须通过Device Capabilities 2寄存器中的End-End TLP前缀支持位在每个关联的根端口中指出该能力。

对于所有设置了"End-End TLP前缀支持位"的根端口对,RC不需要支持End-End TLP前缀路由。带有End-End TLP前缀的请求需要在不支持的根端口对之间进行路由,必须作为UR(Unsupported Request)处理。带有End-End TLP前缀的Completion需要在不支持的根端口对之间进行路由,必须作为Unexpected Completion(UC)处理。在这两种情况下,该错误都由"发送"端口报告。

对于支持转发由主机软件或rciep (Root Complex Integrated Endpoints)发起的带有End-End TLP前缀的TLP的根端口,必须设置"End-End TLP前缀支持位"。对于支持将入端口接收到的带有End-End TLP前缀的TLP转发到rciep的根端口,必须设置"End-End TLP前缀支持位"。

设置了End-End TLP前缀支持位集的不同根端口允许报告不同的最大End-End TLP前缀值。

当RC在根端口之间进行点对点路由时,如果将一个TLP拆分为更小的TLP,则必须在每个更小的TLP中复制原TLP的End-End TLP前缀

相关推荐
天狼122222 分钟前
第5章-1 优化服务器设置
运维·服务器·adb
傻啦嘿哟1 小时前
Python正则表达式:用“模式密码“解锁复杂字符串
linux·数据库·mysql
浪裡遊3 小时前
Linux常用指令
linux·运维·服务器·chrome·功能测试
SugarPPig3 小时前
PowerShell 查询及刷新环境变量
服务器
段ヤシ.4 小时前
银河麒麟(内核CentOS8)安装rbenv、ruby2.6.5和rails5.2.6
linux·centos·银河麒麟·rbenv·ruby2.6.5·rails 5.2.6
深夜情感老师6 小时前
centos离线安装ssh
linux·centos·ssh
我的作业错错错6 小时前
搭建私人网站
服务器·阿里云·私人网站
王景程6 小时前
如何测试短信接口
java·服务器·前端
微网兔子7 小时前
伺服器用什么语言开发呢?做什么用什么?
服务器·c++·后端·游戏
夸克App8 小时前
实现营销投放全流程自动化 超级汇川推出信息流智能投放产品“AI智投“
运维·人工智能·自动化