写在前面:
1、本文参考来源PCIe 6.2,2024.02.25
2、仅作为个人学习记录和分享,转载请注明出处
3、个人能力有限,协议的理解均基于个人,如有错误还望指出
文章目录
目录
1.For Non-Flit Mode
图1.Common Packet Header Field for Non-Flit Mode
图1为Non-Flit模式下的通用包头接口,其中从左至右依次为Byte0-Byte3,每个Byte中的bit按从高到低排序。图中各个域的解释如下:
Fmt:一般来讲表示Header的大小--3/4DW是否包含数据
Type:表示TLP的类型--读/写/配置等,一般Fmt跟Type有规定的组合,详见协议Table2-3
T9/T8:一般为Tag的bit9和bit8,不采用10bit时这两个bit位为0
TC:表示traffic class,跟传输的优先级相关
A2/Attr:Attr[2:0],表示采用的排序规则
R:表示Reserve,一般为0
TH:TLP Hints,表示是否存在TLP Processing Hint和TPH TLP Prefix,也就是PH和ST是否有效,PH一般来将表示此段数据的操作频率和类型,ST在MSIX-Table中配置,表示更细的操作颗粒度
TD:表示是否存在TLP Digest
EP:表示当前TLP是否为poisoned
length:表示当前TLP的payload的大小,注意一般0表示1024DW,1表示1DW
2.For Flit Mode
2.1Header Base
图2.First DW of Header Base for Non-Flit Mode
图2表示的为Flit Mode的Header Base的第一个DW,其中各个域的含义为:
Type:表示当前TLP的类型,包括读/写/配置/DMWr等,其中还表明当前Header Base的大小/是否包含payload data等
TC:跟Non-Flit Mode含义一致
OHC:Orthogonal Header Content,包括OHC-A/OHC-B/OHC-C等
TS:表示Trailer Size,主要包括包含ECRC的1DW大小/IDE MAC的3DW大小/IDE MAC和PCRC的4DW大小
Attr:跟Non-Flit Mode含义一致
Length:跟Non-Flit Mode含义一致
一般来讲Header Bse后紧跟OHC,可以包含你多个和多类型的OHC,但是需要按照A-B-C-E的顺序。Receiver必须检查Request-OHC是否符合规则,如果不符合则处理为UR,对Complete来说则处理为UC。
2.2.OHC-A
图3.OHC-A1至OHC-A5
1)OHC-A1
主要适配场景为:
- 包含具体字节使能和或者PASID的memory request
- 采用地址路由的包含PASID的message和路由到RC的包含PASID的message
- translation请求
NW:表示No Write,此bit位除了translation请求外均为Reserved
PV:表示PASID Valid,置1时表示PASID有效,清零时表示PASID无效,此外同时表示PMR和ER是否有效
PMR:Privileged Mode Rquested,此bit位除了translation请求外均为Reserved
FDBE/LDBE:表示当前TLP的payload中的第一个/最后一个DW中的字节使能
ER:Execute Requested 此bit位除了translation请求外均为Reserved
2)OHC-A2
主要适配的场景为:IO请求中必须包含
历史遗留应用,在此不做解释
3)OHC-A3
主要适配的场景为:配置请求中必须包含
Destination Segment/Reserved:当DSV清零时为Reserved,置1时为Destination Segment
DSV:Destination Segment Valid
FDBE/LDBE:表示当前TLP的payload中的第一个/最后一个DW中的字节使能
4)OHC-A4
主要适配的场景为:ID路由的消息,其要求包含Destination Segment和/或PASID(此场景下必须包含)
Destination Segment/Reserved:当DSV清零时为Reserved,置1时为Destination Segment
DSV:Destination Segment Valid
PV:PASID Valid
5)OHC-A5
主要适配的场景为:completions
- 不成功的completions必须
- 包含lower address[1:0]的Non-UIO completions并且其不为00b
- 需要包含Deestination Segment的completions,因为其相关的请求的Requester Segment与Completer获取到的Segment不一致
- 当cpl-status为succeccful和lower address[1:0]为00b和completer's的Segment Captured bit清零时均满足时必须不包含OHC-A5
- 满足上一点中的三个条件时同时满足对应requester也不包含Requester Segment或者包含的Requester Segment与completer获取的Segment不一致和TEE-IO Supported清零或者Completion不是一个Selective IDE Stream时,被允许不包含OHC-A5
Destination Segment/Reserved:当DSV清零时为Reserved,置1时为Destination Segment
DSV:Destination Segment Valid
LA:Low Address的低两bit
Cpl.Status:表示CPL的状态,包括SC/CA/UR等
总结:场景需求说明:
1)对所有Memory Request来说允许包含OHC-A1
2)对OHC-A1来说,当请求中需要包含OHC-A1中的域信息时,OHC-A1都必须被实现,当OHC-A1没有被实现时,对请求超过/等于2DW的FDBE和LDBE均被视为1111b
2.3.OHC-B
图4.OHC-B
主要适配场景为:仅适配地址路由场景,当OHC-B出现在别的类型的TLP中时,其所有域均为Reserved
ST:Steering Tag,操作颗粒度
PH:Processing Hint
HV:Hints Valid,表示PH和SY有效,具体情况如下:
- 00b--PH和ST均无效并Reserved
- 01b--PH和ST[7:0]有效,但是ST[15:8]无效并Reserved
- 10b--保留编码,receiver必须将其看待为00b
- 11b--PH[1:0]和ST[15:0]均有效
AMA:Address Translation Services Memory Attribute
AV:AMA Valid,表示AV是否有效
2.4.OHC-C
图5.OHC-C
主要适配场景:
1)IDE TLP必须包含OHC-C
2)Non-IDE TLP在想要指示Requester Segment的情况下也必须包含OHC-C
Requester Segment:此域当RSV失效时为Reserved
PR_Sent_Counter:分成两种:
- 使用-NPR后缀,一般出现在传输Non-Posted请求中,表示最后一个Non-Posted请求或者IDE同步消息传输完成后传输的Posted请求个数
- 使用-CPL后缀,一般出现在传输CPL完成中,表示最后一个CPL完成或者IDE同步消息传输完成后传输的Posted请求个数
Stream_ID:表示IDE Stream的ID,请求与完成需一致
Sub_Stream:关联于TLP类型:
- IDE TLP中:000b-Posted Request;001b-Non-Posted Request;010b-Completion;011b-110b,reeceiver的行为未定义;对IDE Completionn TLP来说,Requester Segement必须为Reserved且RSV必须清零
- Non-IDE TLP中:其值必须为111b,同时PR_Sent_Counter/Stream_ID/K/T均为Reserved
K:表示一个聚合单元的第一个TLP(翻转)
T:被TEE管理机制使用,表示TLP来自一个受信的可执行环境
补充说明:
- 对Requester的要求:
1)当Segment Captured Bit为清零状态时,所有Non-IDE消息和Memory请求不允许包含带有Requester Segment的OHC-C
2)当Segment Captured Bit置1时,由Requester初始化的所有消息请求都必须包含带有Requester Sgment的OHC-C
3)当Segment Captured Bit置1时,Requester允许在Memory请求中包含带有Requester Segment的OHC-C
4)当Segment Captured Bit清零时,由Requester初始化的ID路由的消息请求都不可以包含Destination Segment并且DSV为清零状态
- 对Completer的要求:
1)当Segment Captured bit被清零时,completer必须在包含OHC-A5的所有completion中将completer Segment域置0
2)completer必须在configuration request中将OHC-A5的DSV和Destination Segment域置0
3)对没有Requester Segment的NP请求的Completion其OHC-A5的DSV和Destination Segment均置0
4)跟第三点相反的就必须包含Destination Segment
5)当Segment Captured Bit置1,且收到包含Requester Segment的NP Memory Reuqest,其对应的completion必须包含Destination Segment