编辑
2024-03-01
记录知识
0

PCIE事务层-消息请求

消息请求主要传递如下信号:

  • INTx中断信号
  • 电源管理
  • 错误信号
  • 锁定事务支持
  • slot电源限制支持
  • Vendor-Defined信息
  • LTR(延迟容忍报告)
  • OBFF(buffer刷新和填充的优化信息)
  • DRS
  • FRS
  • PTM

对于一个消息请求,格式如下所示

image.png

对于上面header内的type域的[2:0]代表了消息路由类型如下:

image.png

INTx中断信号

MSI/MSI-X是PCIE首选的中断信号机制,中断消息的length字段是reserved的,有如下8种中断消息

image.png

image.png

电源管理信号

image.png

错误信号消息

image.png

锁定事务

image.png

槽位电源限制

限制下游端口的电源大小 image.png

Vendor-Defined信息

image.png

image.png

LTR(Latency Tolerance Reporting)

延迟容忍上报信息用于上报设备对读写服务消息的容忍度

image.png

OBFF信息

OBFF是向EP设备上报平台的中心资源情况

image.png

PTM信息

Precision Time Measurement,高精度时间测量

image.png

image.png

编辑
2024-02-29
记录知识
0

PCIE事务层-tlp事务层描述符

描述符通过三个部分组成,事务ID,属性域,TC域。如下图

image.png

Transaction ID

由上可以知道,事务ID是以一个16位的的requester ID和一个8位的tag组成。 这是由请求者的BDF,Bus Number[7:0]、Device Number[4:0]、Function Number[2:0]组成的信息。 对于post请求,仅发送bdf作为requester id即可,对于non-posted请求,还需要tag字段,

attributes

这里之前有提到,对于attr[2]和attr[1:0]定义如下

image.png

对于bit1和bit2,有四种模式为,1.pci强排序模式,2.轻松排序模式,3.基于ID的排序模式,4.轻松排序或ID排序,如下

image.png

对于bit0,选择是否cache一致性。0是默认一致,1可不一致,如下图

image.png

tc

tc作为流量控制,之前也提到过,000为默认不控制,001-111按照优先级做流控

image.png

编辑
2024-02-28
记录知识
0

PCIE事务层-tlp路由寻址

tlp有三种方式路由,Address方式,ID方式和implicit(隐式) address和id是常用路由方式,implicit仅用作message request的type tlp包的路由,这里描述一下address和id。

地址路由

address 路由用作memory和io类型,如果是64位地址则header是4dword,32位地址则是3dword,如下

image.png

对于地址路由时,header的1dword的at字段在memory read/write和atomicOp请求时有效,其他tlp类型时,at字段保留。如下

image.png

也就是:00b=未转换的地址,01b=地址转换请求,10b=已转换的地址,11b=预留

如果存在转换的地址,则地址映射关系,体现在header域的byte8-byte15上,如下图所示

image.png

值得注意的是,对于4g以下的地址,请求必须以32位的格式。

ID路由

id路由通常作为配置请求,ID Routed Message和Completions。对于header中,需要定义Vendor_Defined Messages作为ID。

id路由通过BDF(Bus,Device,Function Numbers)来明确TLP的目的地址

对于ari和非ari设备,id路由的header域值如下

image.png

如果是4dword的tlp header,id路由的header布局如下.(不同字节的header由tlp的类型决定)

image.png

如果是3dword的tlp header,id路由的header布局如下

image.png

这里可以从byte8和byte9来确定BDF值作为id路由的依据

First/Last DW Byte

对于header的byte7,有两个字段,last dw/1st dw。它与byte2和byte3的length[9:0]有一定关系:

  • 如果length的长度是大于1dword,则1st的值不能为0000,last的值也不能为0000
  • 如果length的长度等于1字节,则last的值必须是0000
编辑
2024-02-28
记录知识
0

PCIE事务层-tlp包格式

事务层主要处理生成和接收TLP包,以及其他如交换流控信息,支持软件和硬件启动的电源管理,这里主要说TLP包。

image.png

TLP事务类型

主要包括四个类型,内存,IO,配置,消息。如下图

image.png

TLP包格式

TLP包有前缀,头,数据,摘要四个部分组成,如下图

image.png

详细的TLP包格式如下图

image.png

tlp prefix

对于TLP的包的前缀包含如下字段。

image.png

前缀默认只有1dword,也就是上述字段。这里注意的是prefix的fmt一定是100b,其中type位的4位代表前缀的类型。对于local tlp prefix的type字段如下

image.png

组合起来如下

  • 1000 0000 ---> MR-IOV
  • 1000 1110 ---> VendPrefixL0
  • 1000 1111 ---> VendPrefixL1

对于end-end tlp prefix 的type字段如下

image.png

组合起来如下

  • 1001 0000 ---> ExtTPH
  • 1001 0001 ---> PASID
  • 1001 1110 ---> VendPrefixE0
  • 1001 1111 ---> VendPrefixE1

这里VendPrefix均是Vendor定义的TLP前缀字段

tlp header

和prefix一样,header的第一个dword也是固定格式

image.png

但是对于fmt字段,不是prefix的固定的100,而是如下定义

image.png

这里fmt的值代表整个header包含多少个dword,

而接下来的type字段确定tlp的类型,故fmt和type的对于tlp包的类型如下图

image.png

image.png

这里还有如下字段解释

  • R:预留
  • TC[2:0]: 流量控制,默认是0,最大流量,001-111是基于优先级的流量控制等级
  • Attr[2]:是否支持ID-Based Ordering(设置允许不相关流量之间放宽排序要求,避免pcie在生产者和消费者模型中发送死锁)
  • LN:对于内存请求中,指示是否为LN Read还是LN Write,对完成者指示LN是否完成
  • TH:是否存在TPH(TLP Processing Hints)
  • TD:确定是否存在1个dword的tlp digest
  • EP:确定tlp的数据是否有效(CRC校验),1代表无效
  • Attr[1:0]:bit5标识是否打开Relaxed Ordering,bit4标识是否打开硬件(cache)一致性管理
  • AT: 与地址转换有关,00b=未转换的地址,01b=地址转换请求,10b=已转换的地址,11b=预留

关于length域,主要如下

  • Length[9:0]:tlp的data payload的大小,以dword为单位

image.png

tlp data payload

对于data payload,需要注意如下

  1. 通常情况下,payload的size是length[9:0]大小的dword,但是在Device Control寄存器会设置一个Max_Payload_Size,length[9:0]的值不能超过这个size。
  2. header后面的数据第一个字节更趋近于0,后面的字节逐步增加(非AtomicOp Request和AtomicOp Completion)
  3. 如果是AtomicOp Request和AtomicOp Completion,则第一数据字节应该是数据的最低有效字节,如果涉及到小端,则是header-0x100-0x107。因为0x100是最低位字节,如果涉及大端,则是header-0x107-0x100。 如下图

image.png

对于数据 76543210,如果非AtomicOp Request和AtomicOp Completion,则0x100存放0,0x107存放7(第二点) 如果是AtomicOp Request和AtomicOp Completion,如果目标内存架构是小端,则100存放0,107存放7(小端数据高位存在低地址)。如果是大端,则100存放7,107存放0.

tlp digest

如上述可知,TD位如果是1,则tlp址出digest,并且digest域存放ecrc的值,当然,如果tlp本身不支持ecrc校验,则应该主动忽略digest域的内容

这里ECRC的意思是,end to end crc,端到端crc。ecrc与lcrc不同的点是,数据的内部转发不会对lcrc值进行校验,如果转发过程中出现错误,则可以通过ecrc来进行判断。

编辑
2024-02-28
记录知识
0

PCIE的拓扑结构

pcie主要有rc,ep,和switch以及pcie to pci/pci-x bridge组成,如下图所示

image.png

root complex

rc设备通常直接对接cpu和memory,通常也是pcie设备的根设备,也就是bus域的根设备

endpoints

ep设备是终端设备,也就是具体实现功能的设备,它有如下特殊的ep设备:

  • 传统EP设备
  • PCIE EP设备
  • 复合rc和ep功能的pcie设备
  1. 对于传统ep设备,主要兼容早期的pci-x等设备,所以可能生成io requests
  2. 对于pcie ep设备禁止生成io requests
  3. 对于rc和ep复合设备其大部分仍是pcie ep设备的要求,它可以灵活的作为rc设备,但是这种设备不能出现在rc设备的拓扑结构中,也不能出现在switch设备的拓扑结构中,只能单一存在。

switch

switch设备可以提供多个虚拟的pci-pci的bridge设备,如下图所示

image.png

所以switch具有如下两个特性

  • switch设备能够在内部bridge产生竞争的时候产生仲裁
  • switch设备只能是bridge,内部不能出现ep设备

对于switch包含设备

  • Root Complex Event Collector(RCEC)设备
  • PCI Express to PCI/PCI-X Bridge
  1. RCEC设备是特殊的switch设备(0x08,0x07),它对RC设备的错误信息收集和PME消息,
  2. PCIE to PCI/PCI-X作为bridge来扩展pcie设备