PCIE学习笔记--PCIe错误源详解(二)

摘要:
事务错误事务错误主要包括不支持的请求、CompleterAbort、非预期的Completion和Completion超时。该错误类型主要通过返回的CompletionTLP包头中的Compl.Status告知Requester,如下图所示。需要注意的是,PCIe设备必须能够针对多个事务分别计时。PCIe1.x和2.0的Spec建议超时时间最好设置为10ms至50ms之间,对于一些特殊情况,超时时间最低可设置为30us。PCIe2.1Spec开始,增加了第二设备控制寄存器用于查看和控制超时时间的值。

转载地址:http://blog.chinaaet.com/justlxy/p/5100057799

这篇文章主要介绍事务(Transaction)错误、链路流量控制(Link Flow Control)相关的错误、异常的TLP(Malformed TLP)以及内部错误(Internal Errors)等。

事务(Transaction )错误

事务错误主要包括不支持的请求(Unsupported Request)、Completer Abort、非预期的Completion和Completion超时。该错误类型主要通过返回的Completion TLP包头中的Compl. Status告知Requester,如下图所示。另外,之前介绍TLP Header的文章中也简单地提到过相关内容,可以回顾一下:http://blog.chinaaet.com/justlxy/p/5100053354

image.png

image.png

不支持的请求(Unsupported Request)主要包括:

1. 请求类型不被当前PCIe设备支持

2. 消息中使用了不支持或者未定义的消息编码

3. 请求的地址空间超出(或者不在)设备的地址空间中

4. 针对Completer的IO或者存储映射控制空间(Memory-mapped Control Space)进行的Poisoned写操作(EP=1)

5. Root或者Switch的Downstream端口接收到针对其二级总线(Secondary Bus)上的不存在的设备的配置请求(Configuration Request)

6. Endpoint接收到Type1型的配置请求

7. Completion中使用了保留的Completion状态编码(参考上面的表格)

8. 设备(的某个功能,Function)处于D1、D2或者D3hot电源管理状态时,却接收到了除了配置请求和消息之外的内容

Completer Abort(CA)主要包括:

1. Completer接收的特殊请求,只有在违背其规则的情况下才能对该请求进行响应(返回Completion)

2. 因为某些恒定的错误状态(Permanent Error Condition),导致Completer无法响应接收到的请求

3. Completer接收到存在访问控制服务错误(Access Control Services Error,ACS Error)的请求

4. PCIe-to-PCI桥接收到针对其连接的PCI设备的请求,但是该PCI设备无法处理该请求

非预期的Completion主要包括:

1. Requester接收到的Completion和其发出的Request不一致

Completion超时:

所有的PCIe设备都必须支持Completion超时定时器,除非该设备只是用于初始化配置事务的。需要注意的是,PCIe设备必须能够针对多个事务(Transaction)分别计时。PCIe 1.x和2.0的Spec建议超时时间最好设置为10ms至50ms之间,对于一些特殊情况,超时时间最低可设置为30us。PCIe 2.1 Spec开始,增加了第二设备控制寄存器(Device Control Register 2)用于查看和控制超时时间的值。如下图所示:

image.png

如果,某个请求对应多个Completion,那么除了最后一个Completion,其他的Completion不会造成该请求的定时器停止计时。

链路流量控制(Link Flow Control)相关的错误

链路流量控制相关的错误主要有:

1. 在FC初始化时,链路相邻设备无法完成针对任何一个VC的,最小的FC Credits的交换更新(Advertises)

2. 链路相邻设备交换更新(Advertises)的FC Credits超过了最大值(Data Payload最大为2047,Header最大为127)

3. 链路相邻设备交换更新时,FC Credits为非零值,且该链路的FC Credits之前已经被初始化为无限值了

4. 接收端Buffer溢出,导致数据丢失(可选的,但是如果使能,则认为是Fatal Error)

关于Flow Control可以参考之前的文章:http://blog.chinaaet.com/justlxy/p/5100053464

http://blog.chinaaet.com/justlxy/p/5100053465

异常的TLP(MalformedTLP)

异常的TLP(Malformed TLP)错误主要有:

1. Data Payload超过了最大值(Max Payload Size)

2. 数据长度(Data Length)与包头中的长度值不一致

3. 存储地址起始位置跨越了4KB边界(Naturally-aligned 4KB Boundary)

4. TD(TLP Digest)的值与ECRC是否使用不一致

5. 字节使能冲突(Byte Enable Violation)

6. 未定义的类型值(Type Field Values)

7. Completion违反了RCB(Read Completion Boundary)值

8. 针对非配置请求返回的Completion中的状态为配置请求重试状态(Configuration Request Retry Status)

9. TC域包含了一个未被分配到当前使能的VC的值(也被称为TC Filtering)

10. IO或者配置请求冲突(可选的)

11. 中断Emulation消息向下发送(可选的)

12. TLP前缀错误(具体请参考PCIe Spec V2.0的2.2~2.6相关章节)

内部错误(Internal Errors)

一般指的是Switch等桥设备内部产生的错误

免责声明:文章转载自《PCIE学习笔记--PCIe错误源详解(二)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇五种常见Windows服务无法启动问题的排错方法正则表达式——RegExp零宽断言下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【原创】Linux PCI驱动框架分析(三)

背 景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器 使用工具:Source Insight 3.5, Visio 1. 概述 先回顾一下PCIe的架构图: 本文将讲...

ovs offload

  Enable switchdev modeThe VF representor has switchdev ops Switchdev mode is a mode in E-Switch, that binds between representor and VF. Representor is a port in DPDK that is co...

用Qemu搭建x86学习环境

作者信息作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 软件平台主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linux内核版本: Linux-4.10 Busybox版本:busybox-1.24.2 工具链: gcc 具备的功能模拟一个双核或者单核的x86架构的系统,根文件系统用r...

PCI规范学习笔记

以前看过一段时间Cyclone FPGA控制PEX8111的程序,没看懂,最近又结合PCI规范重新看了一下。 PCI Speci rev2.3    FRAME# is driven by the master to indicate the beginning and end of a transaction.   IRDY# is driven by...

Memory及其controller芯片整体测试方案(下篇)

{  第三部分  }  DDR总线的设计、调试和验证  在计算机架构中,DDR作为程序运算的动态存储器,面对如高性能计算、图形计算、移动计算、工业应用等领域的要求,发展出DDR4,以及用于图形计算的GDDR5, HBM2,面向移动计算的低功耗LPDDR4等标准。 处理器的运算速度越来越快,DDR的性能也要求越来越高,明显的趋势是DDR总线工作频率持续提升,...

PCIe知识摘要记录

摘: 一、 在PCIe的Spec中,并没有特别详细的关于Root Complex的定义,从实际的角度来讲,可以把Root Complex理解为CPU与PCIe总线系统通信的媒介。Endpoint处于PCIe总线系统拓扑结构中的最末端,一般作为总线操作的发起者(initiator,类似于PCI总线中的主机)或者终结者(Completers,类似于PCI总线...