TLP Prefix Rules

2.2.10 TLP Prefix Rules

以下规则适用于所有携带Prefix的TLP包:

  • byte0的Fmt[2:0] = 100b表示这是1个Prefix TLP,Type[4]指示Prefix的类型
    • 0:Local Prefix
    • 1:End-End Prefix
  • byte1-3 的格式由Prefix的类型定义。
  • 含有TLP前缀的TLP必须包含一个底层的TLP报头。接收到的违反此规则的TLP将被视为‌格式错误的TLP‌,并作为与接收端口相关的上报错误(参见第6.2节)。
  • 允许一个TLP包含多个任何类型的TLP前缀。
    • 当TLP中同时存在Local TLP前缀和End-End TLP前缀时,要求所有Local TLP前缀必须位于任何End-End TLP前缀之前。接收到的违反此规则的TLP将被视为‌格式错误的TLP‌,并作为与接收端口相关的上报错误(参见第6.2节)。
  • 每个TLP Prefix都是1dw。TLP前缀可以重复,以提供额外的数据。
  • Local TLP Prefix按照2.2.10.1章节处理
  • End-End TLP Prefix按照2.2.10.2章节处理

2.2.10.1 Local TLP Prefix Processing

以下规则适用于Local TLP Prefix:

  • L[3:0] 用于区分子类型
    • Type[4] 必须为0
    • L[3:0](Type[3:0]) 按表2-36定义
  • ‌大小、路由和流控制规则‌因每种Local TLP前缀类型而异。
  • 接收方收到其不支持的Local TLP前缀类型时,属于错误。若‌扩展Fmt字段支持位(Extended Fmt Field Supported bit)已置位 ‌,则违反此规则的TLP将被视为‌格式错误的TLP‌(除非其他规范另有说明),并作为与接收端口相关的上报错误(参见第6.2节)。若该位未置位,则行为由设备具体实现决定。
  • Local TLP前缀不受ECRC保护,即使底层TLP受ECRC保护。

2.2.10.1.1 Vendor Defined Local TLP Prefix

如表2-36所述,‌Types VendPrefixL0和VendPrefixL1 ‌保留用作‌厂商自定义Local TLP前缀‌。为确保互操作性和灵活性,此类前缀需遵循以下规则:

  • 除非通过厂商特定机制显式启用,否则组件不得发送包含厂商自定义Local TLP前缀的TLP。
  • 支持使用厂商自定义Local TLP前缀的组件必须支持Fmt字段的3位定义,并置位‌Extended Fmt Field Supported位‌(参见第7.5.3.15节)。
  • 建议组件可通过厂商特定机制进行配置,以便使用两种厂商自定义Local TLP前缀编码中的任意一种发送所有厂商定义的前缀。此类配置无需对称(例如,链路两端可使用不同编码发送相同前缀)。

2.2.10.2 End-End TLP Prefix Processing

以下规则适用于End-End TLP Prefix:

  • E[3:0] 用于区分子类型
    • Type[4] 必须为1
    • E[3:0](Type[3:0]) 按表2-37定义
  • 一个TLP中允许的最大End-End TLP前缀数量为4个

    • 支持TLP前缀的接收方必须检查此规则。如果接收方确定TLP违反此规则,则该TLP为‌格式错误的TLP‌,并作为与接收端口相关的上报错误(参见第6.2节)。
  • End-End TLP前缀的存在不会改变TLP的路由。TLP的路由基于第2.2.4节所述的路由规则。

  • Function通过‌Device Capabilities 2寄存器 ‌中的‌Max End-End TLP Prefixes字段‌(参见第7.5.3.15节)声明其支持的End-End TLP前缀数量。

    • 对于‌Root Ports ‌,该字段允许返回一个值,表明其支持的End-End TLP前缀数量少于Root Port硬件实际实现的数量;然而,错误处理语义仍必须基于该字段中的值。接收到的包含超过Root Port支持数量的End-End TLP前缀的TLP必须按以下方式处理。建议将‌请求(Requests)‌处理为‌ 不支持的请求(Unsupported Requests)‌,否则必须处理为‌ 格式错误的TLP(Malformed TLPs)‌。 建议将‌ 完成(Completions)‌处理为‌ 意外完成(Unexpected Completions)‌,否则必须处理为‌格式错误的TLP ‌。对于‌**接收端口(Ingress Port)‌接收到的TLP,这是与接收端口相关的上报错误(参见第6.2节)。对于在内部接收并传输至‌发送端口(Egress Port)**‌的TLP,这是与发送端口相关的上报错误(参见第6.2节)。
    • 对于所有其他功能类型,接收到的包含超过功能支持数量的End-End TLP前缀的TLP必须处理为‌格式错误的TLP ‌。这是与接收端口相关的上报错误(参见第6.2节)。如果支持,‌高级错误报告(AER)日志记录‌将按照第6.2.4.4节的规定进行。
  • 如果‌End-End TLP Prefix支持位(End-End TLP Prefix Supported bit)已置位‌,则交换机必须支持转发包含最多4个End-End TLP前缀的TLP。

  • 置位了End-End TLP Prefix支持位的不同Root Port可以报告不同的‌Max End-End TLP Prefixes‌值。

  • 如果底层TLP受ECRC保护,则所有End-End TLP前缀均受ECRC保护。(Local Prefix不受支持)

  • 接收方不支持End-End TLP前缀时,接收包含End-End TLP前缀的TLP属于错误。违反此规则的TLP将被视为‌格式错误的TLP‌,并作为与接收端口相关的上报错误(参见第6.2节)。

  • 软件应确保不将包含End-End TLP前缀的TLP发送给不支持的组件。‌Extended Fmt Field Supported位未置位‌的组件可能错误解析包含TLP前缀的TLP。

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

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

  • 对于路由组件(Switch),每个‌发送端口(Egress Port)‌中的‌End-End TLP Prefix阻塞位 ‌决定是否允许通过该发送端口传输包含End-End TLP前缀的TLP(参见第7.5.3.16节)。如果转发被阻塞,则丢弃整个TLP并报告‌TLP Prefix Blocked Error ‌。如果被阻塞的TLP是‌Non-Posted请求 ‌,则发送端口返回带有‌Unsupported Request Completion Status ‌的完成。‌TLP Prefix Blocked Error‌是与发送端口相关的上报错误(参见第6.2节)。

  • 对于启用了‌多播(Multicast)‌的路由组件(Switch)(参见第6.14节),End-End TLP Prefix复制多份。多播数据包的‌TLP Prefix Egress Blocking‌在每个发送端口独立执行。

2.2.10.2.1 Vendor Defined End-End TLP Prefix

如表2-37所述,‌Types VendPrefixE0和VendPrefixE1 ‌保留用作‌厂商自定义End-End TLP前缀‌。为确保互操作性和灵活性,此类前缀需遵循以下规则:

  • 除非通过厂商特定机制显式启用,否则组件不得发送包含厂商自定义End-End TLP前缀的TLP。
  • 建议组件可通过厂商特定机制进行配置,以便使用两种厂商自定义End-End TLP前缀编码中的任意一种。这样,允许在单个PCI Express拓扑中同时使用两种不同的厂商自定义End-End TLP前缀,而无需每个发送方都理解其发送的每个TLP的最终目的地。

2.2.10.2.2 Root Ports with End-End TLP Prefix Supported

支持Root Port之间携带End-End TLP前缀的TLP的点对点路由是可选的,具体实现由设备决定。如果RC支持在两个或多个Root Port之间路由End-End TLP前缀,则必须在每个相关Root Port的‌Device Capabilities 2寄存器 ‌中通过‌End-End TLP Prefix Supported位 ‌声明此能力。

RC无需支持在所有已置位End-End TLP Prefix Supported位的Root Port对之间路由End-End TLP前缀。如果请求的End-End TLP前缀需要在不受支持的Root Port对之间路由,则必须将其处理为‌UR(Unsupported Request)‌;如果完成包含End-End TLP前缀且需要在不受支持的Root Port对之间路由,则必须将其处理为‌ Unexpected Completion(UC)‌。在这两种情况下,错误均由"发送"端口报告。
任何支持由主机软件或Root Complex集成端点(RCiEP)发起的携带End-End TLP前缀的TLP转发的Root Port,都必须置位‌
End-End TLP Prefix Supported位
‌。任何支持将从接收端口接收的携带End-End TLP前缀的TLP转发至RCiEP的Root Port,也必须置位该位。已置位End-End TLP Prefix Supported位的不同Root Port可以报告不同的‌Max End-End TLP Prefixes ‌值。

当RC在Root Port之间执行点对点路由时将TLP拆分为更小的TLP时,必须在每个较小的TLP中复制原始TLP的End-End TLP前缀(参见第1.3.1节)。

相关推荐
search710 天前
前端学习12:概念QOS、MSI
芯片设计·pcie
FPGA_小田老师2 个月前
《FPGA系统:总线接口及Xilinx IP核》专栏导览:从基础到架构的顿悟
fifo·pcie·ddr·通信接口·fpga系统架构·xilinx ip核·数据总线
学工科的皮皮志^_^2 个月前
PCIE学习
经验分享·嵌入式硬件·学习·fpga开发·pcie
胡耀超2 个月前
5、服务器互连技术(小白入门版)
服务器·网络·ai·网络拓扑·gpu·pcie·1024程序员节
tiantianuser2 个月前
NVMe高速传输之摆脱XDMA设计52: 上板资源占用率分析
fpga开发·nvme·pcie·xdma·高性能nvme
飘忽不定的bug3 个月前
RK3568移植RM500U-PCIE模块
linux·pcie·rm500g
FPGA IP3 个月前
高性能PCIe 3.0软核,x1~x16,支持EP/RC,AXI4接口,内置DMA控制器,适用ASIC和FPGA
fpga·pcie·asic·软核
夏天Aileft4 个月前
PCIe Electrical Idle Sequences ( EIOS and EIEOS )
pcie
夏天Aileft4 个月前
PCIe6.0 FC机制
pcie