PCIe prefix总结

这周研究了一下spec中关于prefix的部分,在此做一个总结,欢迎大家指正补充。

TLP Prefix基本介绍

TLP 0 字节的 Fmt [2:0] 字段值为 100b 表示当前 DW TLP Prefix
TLP Prefix 分为两大类: Local End-End ,其中 Local TLP Prefix 用以在 PCIe 链路两侧传递信息, End-End 用以在 Requester Completer 之间传递信息。
通过 Type 字段 [4]bit 来加以区分, 0 Local TLP Prefix 1 End-End TLP Prefix
允许一个 TLP 包含 多个 任何类型的 TLP 前缀
TLP 中存在 Local End-End TLP 前缀的组合时,需要所有 Local TLP 前缀位于任何 End-End TLP 前缀 之前
每个 TLP 前缀的大小为 1DW
下图为prefix基本组成。
下图为Type编码及对应的prefix类型
PCIe prefix总结_第1张图片

Local TLP Prefix处理

Local TLP Prefix Type 字段 Type[4] 位为 0b ,用 L[3:0] 作更细的 Local TLP Prefix 分类。
各类型的 Local TLP Prefix 的大小、路由、流控不一而论。
若接收者收到了不支持类型的 Local TLP Prefix 则为出现错误。若设备能力 2 寄存器中开启了 Extended Fmt Field Supported 则按照畸形包处理,并在接收端口处上报错误。若未开启 Extended Fmt Field Supported ,错误处理方式由设备自行决定。

    Local TLP Prefix不受ECRC的保护,此时其后续TLP仍然可以受ECRC保护

下图为Local TLP prefix类型

PCIe prefix总结_第2张图片

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

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

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

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

PCIe prefix总结_第3张图片

下图为Extended Fmt Field Supported 字段所在寄存器位置。

PCIe prefix总结_第4张图片

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处理

End-End TLP Prefix Type 字段 Type[4] 位为 1b ,用 E[3:0] 作更细的 End-End TLP Prefix 分类。
End-End TLP Prefix 最大数目为 4 ,若接收者接收到的 End-End TLP Prefix 数目大于 4 ,应按照畸形包处理。
End-End TLP Prefixd 的出现不会改变该 TLP 原本的路由规则。
Function 支持的最大 End-End TLP Prefix 数目通过 Device Capabilities 2 register Max End-End TLP Prefixes field 进行配置;
支持 End-End TLP Prefix switch 应支持转发最高携带 4 End-End TLP Prefix TLP
多个支持 End-End TLP Prefix RP 间,支持的最大 End-End TLP Prefix 数目可以不同;
若后续 TLP ECRC 保护,则 End-End TLP Prefix 同样 ECRC 保护
若接收者不支持 End-End TLP Prefix 但收到了带有 End-End TLP Prefix TLP ,则为出现错误,按照畸形包处理,接收端口上报错误;
软件应确保携带 End-End TLP Prefix TLP 不会发给不支持 End-End TLP Prefix 的组件,因为该组件会曲解 End-End TLP Prefix
若上游端口某 Function 支持 End-End TLP Prefix 但收到了不支持类型的 End-End TLP Prefix ,该上游端口所有 Function 都应把其收到的地址请求按照 UR 处理,地址 Complition 按照 CA 处理,接收端口上报错误;
对于一些其路由作用的元素,若某出端口开启了 End-End Prefix Blocking 功能,则携带 End-End TLP Prefix TLP 会被阻塞在该出端口;一旦被阻塞,不仅是 TLP Prefix ,整个 TLP 都会被丢掉,并上报 TLP Prefix 阻塞错误;若被阻塞的是非转发请求 TLP ,该出端口会返回一笔完成状态为不支持请求的完成的消息;

若某元素开启了组播功能,复制到每一个组播组的TLP都会携带原TLPEnd-End TLP Prefix

下图为End-End TLP prefix类型

PCIe prefix总结_第5张图片

还没写完,发现总结的文档没带回来,后面补上。

你可能感兴趣的:(linux,运维,服务器)