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前缀

相关推荐
sinat_384241091 小时前
使用 npm 安装 Electron 作为开发依赖
服务器
朝九晚五ฺ1 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
自由的dream1 小时前
Linux的桌面
linux
xiaozhiwise2 小时前
Makefile 之 自动化变量
linux
Kkooe2 小时前
GitLab|数据迁移
运维·服务器·git
久醉不在酒3 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
意疏4 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
虚拟网络工程师4 小时前
【网络系统管理】Centos7——配置主从mariadb服务器案例(下半部分)
运维·服务器·网络·数据库·mariadb
BLEACH-heiqiyihu4 小时前
RedHat7—Linux中kickstart自动安装脚本制作
linux·运维·服务器