Some Rules For TLP

写在前面:

1、本文参考来源PCIe 6.2,2024.02.25

2、仅作为个人学习记录和分享,转载请注明出处

3、个人能力有限,协议的理解均基于个人,如有错误还望指出


目录

一、MPS/MRRS/RCB

1.MPS

2.MRRS

3.RCB

二、Routing Rules

1.地址路由

2.ID路由

3.隐式路由

三、FDBE/LDBE

1.FM

2.NMF

四、Transaction ID

1.Tag

2.相关寄存器



一、MPS/MRRS/RCB

1.MPS

  MPS的全称为Max Payload Size,字面含义就是最大负载大小,一般应用在携带payload的TLP中,常见的有MWr和CPLD。在此以Single-Function的Endpoint为例说明, 就是其产生和接收到的携带数据负载的TLP包中的数据长度不可以超过MPS的限制。如果是多功能设备则建议采用所有function中的最小设置值(当然不建议配置不同的function为不同的MPS值),特别的对ARI设备必须采用Function 0的设置值。

  MPS的配置主要涉及到三个寄存器,如图1.1和图1.2所示。

图1.1 Device Capabilities Register

图1.2 Device Control Register

Max_Payload_Size Supported:此寄存器的属性为RO,即表示当前function支持的最大负载大小,其编码与大小对应关系如下:

  • 000b-128bytes
  • 001b-256bytes
  • 010b-512bytes
  • 011b-1024bytes
  • 100b-2048bytes
  • 101b-4096bytes
  • 110b-Reserved
  • 111b-Reserved

注意在FM下,其最小配置值为512bytes

Rx_MPS_Fixed:此寄存器的属性为HwInt。根据协议解释其置1的时候Rx_MPS_Limit由Max_Payload_Size Supported域表示否则则由Max_Payload_Size域表示。在FM模式下其位必须置1。一般来讲,接收端需要支持所有function中最大的MPS设置。注意在FM下,需要支持接收length域指示的整个范围的TLP,用来确定TLP的总大小和确定下一个TLP的开始位置。

Mixed_MPS_Supported:此寄存器的属性位HwInt。当其置1时,function需要具备根据不同的目标实现并支持不同MPS配置的能力。在FM模式下此位必须置1。

Max_Payload_Size:此寄存器的属性为RW。一般来讲此寄存器的值表示了function的最大数据负载。其编码与大小对应关系如下:

  • 000b-128bytes
  • 001b-256bytes
  • 010b-512bytes
  • 011b-1024bytes
  • 100b-2048bytes
  • 101b-4096bytes
  • 110b-Reserved
  • 111b-Reserved

2.MRRS

  MRRS的全称为Max Read Request Size,其主要是用来限制Memory读请求单次能请求的最大长度。

图1.3 Device Control Register

Max_Read_Request_Size:此寄存器的属性为RW。其编码与大小对应关系如下:

  • 000b-128bytes
  • 001b-256bytes
  • 010b-512bytes
  • 011b-1024bytes
  • 100b-2048bytes
  • 101b-4096bytes
  • 110b-Reserved
  • 111b-Reserved

3.RCB

  RCB的全称为Read Completion Boundary,其主要是用来控制CPLD返回的个数,其需要根据地址和长度来判断。一般来说需要满足两个条件(当出现返回地址不是RCB的整数倍时):

  • 从请求地址整包返回
  • 除起始包和结尾包之外的均为RCB的整数倍(包括地址和数据)

切割示例:

Memory读请求地址为10020h且长度为100h(256d)时,并且操作对象为Ep时,切割可以存在如下几种情况:

  • 256
  • 96+160
  • 96+128+32
  • 224+32

图1.4 Link Control Register

Read Completion Boundary:此寄存器的属性对RP/Switch Port为RO,对Ep和Bridge为RW,其编码对应关系为:0b--64byte;1b--128byte,特别的对Ep来讲此寄存器值一般为1,即128byte


二、Routing Rules

  路由规则主要分成三种,分别为地址路由、ID路由和隐式路由。其中隐式路由只适用于Message请求中。

1.地址路由

  一般地址路由在Memory、IO和地址路由消息中使用。在NFM模式下,其具备3DW和4DW两种格式,如图2.1和图2.2所示。在FM模式下,其具备3/4/5/6/7DW(FM中定义的最大的Header Base的大小为7DW)五种格式,如图2.3/2.4/2.5所示,其中超过4个DW的长度只是在4DW之后根据不同的类型进行增加。

图2.1 32-bit Address Routing-NFM

图2.2 64-bit Address Routing-NFM

图2.3 32-bit Address Routing-FM

图2.4 64-bit Address Routing-FM

图2.5 64-bit Address Routing-FM-5/6/7DW

  注意:在FM模式下AT域中编码为01b时为Reserved;对地址在4GB范围内的请求,requester必须使用32-bit格式。对于使用64-bit地址格式且高32bit为0的格式来访问地址小于4GB来讲,receiver的行为不进行规定;对所有地址路由的UIO请求、包含部分header加密的IDE TLPs和采用地址路由的FM模式的消息均必须使用64-bit地址格式(当地址访问小于4GB的空间时,高32bit为零)

2.ID路由

  一般ID路由在配置请求、ID路由消息和完成包中使用。ID路由主要采用Bus、Device、Function Number来定义TLP的目的地。对Non-ARI设备来说BDF分别占用8-bit/5-bit/3-bit,对ARI设备来说为BF,其分别占用8-bit/8-bit。对FM来说,completion和ID路由消息采用Destination Segment(Destination BDF)来路由到目的Hierarchy中。NFM下采用的两种Header格式如图2.6和图2.7所示。FM下采用3/4/5/6/7DW,如图2.8/2.9所示。

图2.6 ID Routing For 3DW Header-NFM

图2.7 ID Routing For 4DW Header-NFM

图2.8 ID Routing For 3DW Header Base-FM

图2.9 ID Routing For 4/5/6/7DW Header Base-FM

3.隐式路由

隐式路由机制下没有地址或者ID来标识目的地,采用的 是Header中Type域的低3bit来表示路由类型,如表2.1所示。

表2.1 消息路由

r[2:0]DescriptionBytes 8-15(no VDM)
000b路由到RCReserved
001b在FM下使用address+AT路由Address/AT
010b通过ID路由参考上一小节
011b从RC进行广播Reserved
100blocal-terminate at ReceiverReserved
110bGathered and routed to RCReserved
111bReserved-Terminate at ReceiverReserved

三、FDBE/LDBE

写在介绍前,在此不讨论TH bit置1的情况,即Memory Read中的FDBE/LDBE域为ST[7:0]

1.FM

FDBE/LDBE的全称为First/Last DW Byte Enables,理解就是表示数据负载中第一个DW和最后一个DW中那些bytes生效,置1表示有效,反之无效。LDBE和FDBE所处位置分别为TLP Header的Byte7的高4bit和低4bit。FDBE/LDBE只存在于Memory/IO/Configuration Request中。

相关规则如下:

1.1 长度为1DW时

  • FDBE不可以为0000b
  • LDBE必须为0000b
  • FDBE允许空洞访问,例如1010b;0101b;1001b等

1.2 长度为2DW时

  • LDBE必须不为0000b
  • Memory请求地址为QW对齐时,FDBE和LDBE不允许出现空洞
  • Memory请求地址为非QW对齐时,允许FDBE和LDBE组合为非空洞,但是其本身不可出现空洞,例如1100b-0011b;1000b-0111b

1.3 长度大于等于3DW时

  • LDBE必须不为0000b
  • Memory请求地址为非QW对齐时,允许FDBE和LDBE组合为非空洞,但是其本身不可出现空洞,例如1100b-0011b;1000b-0111b

特别的,允许出现零长度的读写,即Memory Write/Read Request请求中length域为1DW,但是FDBE/LDBE均为0000b,其中写请求不会对Completer产生任何影响,Completer会对读请求产生携带1DW数据的completion,其1DW数据可以为任何内容,同样的此特殊情况的读请求也不可以操作non-prefetchable空间。

2.NMF

基本上与FM类似。但是FDBE/LDBE只存在于OHC-A1/OHC-A2/OHC-A3中,相对的,需要使用FDBE/LDBE时需要包含对应OHC-A类型。

对Memory Request来说,其长度大于等于2DW,且没有包含OHC-A1则认为其LDBE和FDBE均为1111b,否则则必须包含OHC-A1。

注意:出于安全性的考虑,建议对DW中不生效的byte均填充0。


四、Transaction ID

Transaction ID是Transaction Descriptor的一部分,其主要是用来标识未完成的transctions(outstanding Transactions),一般用来将completions跟requests联系起来(在此不讨论在groups之间不需要采用唯一Transaction ID的三种特殊的completion groups)。Transaction ID主要包含Requester ID和Tag两部分,部分情况下还包含TC,如图所示。

图4.1 Transaction ID

1.Tag

  Tag主要有四种大小:14-bit;10-bit;8-bit;5bit,对于一个Function来讲,其作为Reuqester或者Completer时可以支持不同的Tag大小。Tag在使用时需要遵循如下规则:

  • 所有Function都必须支持8-bit Tag Completer能力,特别的对UIO Completer来说必须支持14-bit Tag
  • 支持FM的Function必须支持14-bit Tag Completer能力,因此其自然支持10-bit Tag Completer
  • 支持超过16GT/s数据速率的Function(包括Switch,除PCI/PCIX Bridge)必须支持10-bit Tag Completer能力
  • Function在不可以支持10/14-bit Tag Requester能力,除非其支持10/14-bit Tag Completer能力
  • 在NFM下,Tag[9]和Tag[8]在不支持10-bit Tag Requester能力下必须均为0b
  • Receiver/Completer在处理Tag时,只关注对应Completer capability寄存器配置,不关注Requester Enable寄存器配置(8-bit Tag对应的为Extended Tag Field Enable)
  • 如果在Ep中10/14-bit Tag Requester Enable均使能,则允许使用14-bit Tag来产生对host memory的访问。一般来讲不允许软件或者固件使能14-bit Tag Requester Enable,除非HOST支持14-bit Tag Completer
  • 当Ep访问的是另一个Ep时,建议采用8/5-bit Tag,除非两者一致
  • 对14-bit Tag来说,强烈建议认为非0000b的Tag[13:10]为有效值,且Requester不产生Tag[13:10]为0000b的Tag值。但是为了兼容此前的版本,可以产生Tag[13:8]为000000b之外的任意值,并认为其是有效的
  • 对10-bit Tag来说,为00b的Tag[9:8]为无效值,且Requester不产生Tag[9:8]为00b的Tag值。
  • 如果Requester产生了10/14-bit Tag的请求给没有对应Tag Completer能力使能的Completer则会产生无效的Tag Completion,此Completion被认为是UC,并且Requester会认为completion timeout
  • 如果Requester支持同时向不同的completer发送10/14-bit Tag和8/5-bit Tag请求,则要求Extended Tag Field Enable的配置值与8/5-bit Tag请求保持一致
  • 在FM下,要求Completer可以同时处理来自不同的Hierarchies的具备相同 Transaction ID的请求
  • 对Posted请求来说,在NFM下,Tag[13:8]保留(实际上Tag只有10bit);在FM下,Tag[13:0]保留
  • 在同一个Hierarchy下Transaction ID和Reuqester ID都是唯一的,并且Transaction ID被包含在Request和Completion中

表4.1 Tag使能配置对应允许Tag范围关系表

14-bit Tag

Requester

Enable

10-bit Tag

Requester

Enable

Extended Tag Field EnableMaximum Request Tag Size8-bit Tag Completer允许的范围10-bit Tag Completer允许的范围14-bit Tag Completer允许的范围
0005-bit0-310-310-31
0018-bit0-2550-2550-255
01010-bit0-31256-1023256-1023
01110-bit0-255256-1023256-1023
10014-bit0-310-311024-16383
10114-bit0-2550-2551024-16383
11014-bit0-31256-10231024-16383
11114-bit0-255256-10231024-16383

2.相关寄存器

图4.2 Device Capibilities Register

图4.3 Device Control Register

图4.4 Device Capibilities 2 Register

图4.5 Device Control 2 Register

图4.6 Device Capibilities 3 Register

图4.7 Device Control 3 Register

Extended Tag Field Supported:此寄存器的属性为RO。此寄存器在10-bit或者14-bit Tag Reuqester Supported位置1的时候置1,当其置1时标识其支持8-bit Tag,否则则支持5-bit Tag

Extended Tag Field Enable:此寄存器的属性为RW。在10-bit和14-bit Tag Requester Enable均失效的情况下,此寄存器置1表示requester可以产生8-bit Tag请求,否则则只可以产生5-bit Tag请求

10-Bit Tag Completer Supported:此寄存器的属性为HwInit。表示是否支持10-Bit Tag Completer,置1时表示支持,否则则为不支持

10-Bit Tag Requester Supported:此寄存器的属性为HwInit。表示是否支持10-Bit Tag Requester,置1时表示支持,否则则为不支持。对于10-Bit Tag Completer Supported清零时,此位不可置1

10-Bit Tag Requester Enable:此寄存器属性位RW。当此位置1时表示可以产生10-bit Tag范围的请求。在存在尚未执行完成的Non-Posted请求时,软件修改此寄存器的值其产生的结果是未定义的。对VF来说需要跟PF相关联(在此不展开)

14-Bit Tag Completer Supported:此寄存器的属性为HwInit。表示是否支持14-Bit Tag Completer,置1时表示支持,否则则为不支持。在FM下此寄存器必须置1。

14-Bit Tag Requester Supported:此寄存器的属性为HwInit。表示是否支持14-Bit Tag Requester,置1时表示支持,否则则为不支持。对于14-Bit Tag Completer Supported清零时,此位不可置1

14-Bit Tag Requester Enable:此寄存器属性位RW。当此位置1时表示可以产生14-bit Tag范围的请求。在存在尚未执行完成的Non-Posted请求时,软件修改此寄存器的值其产生的结果是未定义的。对VF来说需要跟PF相关联(在此不展开)

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值