0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PCIe错误报告的两种机制详解

VIBT_dputech 来源:CSDN博客 作者:CSDN博客 2020-10-23 11:14 次阅读

1.PCIe错误报告的两种机制

1. Baseline Error Reporting:该机制是PCIe设备必需支持的一种错误报告机制,同时设备会定义最小的错误报告请求。应该是通过配置Device Control和Command寄存器做到通知其他设备产生了错误的一种机制。

2. Advanced Error Reporting(AER):该机制是PCIe设备用来获取更健壮的错误报告信息的一种特殊机制。该机制的相关寄存器会在PCIe扩展配置空间中上报。

2.PCIe错误的分类

由上图可以看出PCIe将各个层产生的错误大致分为两类:Correctable和Uncorrectable。

其中又将Uncorrectable分为Fatal和Nonfatal两种。通过分类平台可以对Correctable甚至Uncorrectable-Nonfatal的错误分配低优先级的处理,或者检测错误频率等处理;对于Uncorrectable-Fatal的错误可能直接对系统复位处理。

CorrectableErrors:是指可纠正的错误,在硬件不经过软件的干预可以通过自身的逻辑纠正的错误。对于一些可纠正的错误如果处理校正的设备不处理的话需要将错误报告成Uncorrectable Errors。

UncorrectableErrors:不可纠正的错误,这类错误会影响接口的功能,这类错误在协议中没有明确的机制可以纠正。对于PCIe具备更健壮的错误处理机制的设备来说,会进一步区分该错误为:Fatal和Non-Fatal。

FatalError:这类错误导致链路和硬件异常只有通过复位操作实现恢复。

Non-Fatal:这类错误可能会导致特定的传输变得不可靠,但是链路和硬件的其他功能不受影响。设备驱动软件提供恢复机制,并不会影响到链路和其他设备的运行。

3.错误信号转发和通知

PCIe提供了三种方式转发通知错误:

1.通过回复完成状态CompletionStatus

2. 通过错误消息 errorMessages

3.通过错误转发机制ErrorForwarding

3.1 Completion Status:

针对Non-Posted请求,一些错误可以通过completion status的方式通知系统或其他设备,这种方式的通知,使上层协议或者软件有机会可以判断状态做相应的补救处理。

3.2 Error Message:

根据错误的严重程度,不同类型的Error Message会被发送给RC。

对于PCIe1.0和1.0a之前的协议一般规定:correctable error发送ERR_COR,non-fatal errors发送ERR_NONFATAL,fatal error发送ERR_FATAL。

随后版本的协议支持Role-Based Error Reporting,可以进一步通过检测设备的身份和AER相关配置将non-fatal error以ERR_NONFATAL或ERR_COR的方式发出去,甚至不发通知。因为在一些平台下发送ERR_NONFATAL可能会阻止其他设备的恢复操作或者决定错误的最终处理,由于不是最合适决定错误最终处理的设备,该设备可以通过配置AER来将错误已ERR_COR的形式通知其他设备,如果是最合适的设备则会以ERR_NONFATAL消息的方式通知其他设备。

对于ERR_NONFATAL,如果软件想避免后续接受设备的错误检测,可以直接配置AER将该错误升级为ERR_FATAL,后续的设备总是会以ERR_FATAL的方式转发下去,无论后续设备是哪种身份。

3.2.1错误消息严重性可编程

对于不同的设备对致命和非致命的界定不同,AER提供了错误消息可编程的机制。AER以协议Error list中判定的消息结果作为默认发送的方式,但是也可通过编程AER的一些寄存器发送更高级的错误消息。

3.2.2错误消息屏蔽

只有当Device Control 寄存器的Reporting Enable fields或PCI Command寄存器的SERR# Enable位置1的情况下设备才能转发消息,此外如果配置了AER的设备可以通过Uncorrectable Error Mask寄存器和Correctable Error Mask寄存器对不同的error进行屏蔽操作。

3.2.3 错误消息污染

如果错误没有得到隔离导致后续的错误覆盖最根本的错误这种情况就是错误污染,比如一个TLP在数据链路层出错的话就不再上传到事务层,而是丢弃这个TLP,上报错误消息。如果产生错误污染就很难定位到根本的错误消息是从哪里产生的。对于产生自同一源的错误协议规定了错误的优先级,越底层的错误其优先级越高。

· 不可更正的内部错误(Uncorrectable Internal Error)

· 接收端Buffer溢出

· 流量控制协议错误

· ECRC校检失败

· 异常的TLP(Malformed TLP)

· AtomicOp Egress Blocked

· TLP包头异常(TLP Prefix Blocked)

· 访问控制服务(Access Control Services,ACS)异常

· MC(Multi-cast) Blocked TLP

· 不支持的请求(Unsupported Request,UR),Completer Abort(CA)或者不对应的返回包(Unexpected Completion)

· 接收到损坏的数据包(Poisoned Packet)

3.2.4 AdvisoryNon-FatalError(警告性的非致命错误)

在一些情况下如果检测到ERR_NONFATAL错误的设备并不是最终决定错误处理的设备,设备如果配有AER则发送ERR_COR提醒软件,若果没有配置AER则不发送消息通知软件。PCIe规定以下几种情况为警告性的非致命错误:

1.CompleterSending a CompletionwithUR/CA Status

2.IntermediateReceive

3.UltimatePCIExpressReceiverofaPoisonedTLP

4.Requesterwith completion timeout

5.Receiver of an unexpected completion

3.3错误转发(Datapoisoning)

一旦出现这种情况TLP的EP位被置1,TLP整个路由流程中的接收者都将报告接收到这个poison的TLP,从而能追踪出现问题的位置。

4.错误日志记录

如果设备不支持AER,只有通过查看Device Status寄存器中是否检测到错误,如果支持AER则对应的Uncorrectable Error Status寄存器和Correctable Error Status寄存器会记录相应状态。对于明确的事务层的错误AER的Header Log寄存器会记录第一个uncorrectable error TLP的头。

4.1错误源溯源

错误消息中包含Requester ID如下图:

系统软件可以根据RootPort或者RootComplexEventCollector的AER寄存器的内容获取有效的信息

4.2多条错误的处理(支持AER设备)

对于一个设备如果同时收到多条错误,其AER状态寄存器的位会置上,直到软件清理或者复位清除。即使AER的多个状态位被置起,但是First Error Pointer寄存器和Header Log寄存器中记录的信息还是第一个错误的信息。即使这样还是应该及时的处理First Error Pointer寄存器和Header Log寄存器的信息,防止后续错误增加系统的风险。

5. 流程中涉及到的寄存器介绍

5.1 PCIe标准配置空间的Command Register和Status Register

5.2PCIE Capabilities寄存器的Device Control和Status寄存器

5.3AER寄存器介绍

5.3.1Uncorrectable/correctableErrorStatus/mask/severityRegister

Uncorrectable和correctable的status mask severity寄存器类似,值得注意的是correctable系列的寄存器有个Advisory Non-Fatal Error Status(mask/severity),处理上文中提及的警告性的非致命错误。对于Uncorrectable的错误有Severity寄存器来配置对应错误的严重性,而Correctable的错误并没有对应的Severity寄存器。

Status:当产生相应的错误时,Status寄存器的相应位会被置1;

Mask:当对应错误的mask位置1时,将不再上报错误消息,虽然mask被置1,但是如果有错误产生status相应位仍会置1;

Severity:根据设备的不同要求,可以将uncorrectable error的严重程度配置,1则表示fatal error;

5.3.2AdvancedErrorCapabilitiesandControlRegister

First Error Pointer:表示status中报告的第一个错误(对应的status的bit位)

5.3.3HeaderLogRegister

Header Log Register:记录了第一个错误TLP的Header内容。

6.错误消息上报和记录流程

7.Errormessage路由过程中的寄存器控制流程

8.总结

Advanced Error Reporting(AER)机制提供了更健壮和丰富的错误消息机制,比传统的PCIe Baseline Error Reporting机制提供了更多的错误处理。AER机制让错误信号更加丰富,让Fw开发人员可以根据不同的场景对错误做出不同的响应。

责任编辑人:CC

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PCIe
    +关注

    关注

    13

    文章

    1083

    浏览量

    80836

原文标题:谈谈PCIe错误报告机制

文章出处:【微信号:dputech,微信公众号:DapuStor】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PCB设计中如何进行统一批量检测并生成错误报告

    不仅能在PCB设计的过程中实时检测, 而且也能够在需要的时候进行统一的批量检测并生成错误报告。 Altium Designer的设计规则不是PCB对象的属性, 而是独立定义的。 每条规则需针对具体的PCB对象。对于PCB规则系统来说,它必须知道给定的规则应用于哪些对象,即规则的应用范围。可
    的头像 发表于 04-04 09:21 1.1w次阅读
    PCB设计中如何进行统一批量检测并生成<b class='flag-5'>错误报告</b>

    Win8系统操作不当弹出错误报告

    win8有时候会操作不当,系统会弹出一个错误报告,频繁弹出提示窗口,非常麻烦,有什么方法可以将提示窗口关闭呢?系统 会弹出一个错误报告,它会将系统出现的一些问题生成文件报告发送至微软,以便让技术员
    发表于 06-24 14:35

    仿真停止后怎样关掉错误报告

    问个小问题 请问怎样设定才能在仿真停止之后让那个错误报告页面不弹出。每次仿真完之后都弹出烦死了
    发表于 06-23 00:29

    关于Quartus II 错误报告Error (171173): Node from partition Top cannot preserve previous placement at PIN_P8 and honor the location assigment to PIN_F8

    问题:在修改分配管脚后总是出现下面这个错误报告,编译不过。Error (171173): Node rs232_tx from partition Top cannot preserve
    发表于 11-04 21:13

    MPLAB X IDE v3.20编译器使用错误的行号引用报告错误

    嗨,我使用XC16并在汇编中编写,所以当编译过程中代码出错时,编译器将错误报告错误的行中。例如,我在编辑器的第1439行出错,编译器将错误报告在第1741行。我在V3.15也有这个问题,但是当我使用旧的V892时没有。有什么线
    发表于 09-16 11:14

    为什么我设计的TMS320VC5402板子在调试软件时总会出现存储器错误报告

    我设计的TMS320VC5402板子在调试软件时会经常出现存储器错误报告,排除是映射的问题,是不是板子不稳定的因素?还是DSP工作不正常的问题?如何判别?
    发表于 09-17 05:33

    PCIe配置为端点时,如何启用AER(高级错误报告)驱动程序?

    PCIe 配置为端点时,如何启用 AER(高级错误报告)驱动程序。
    发表于 04-19 07:31

    基于软件错误报告数据集成的改进贝叶斯算法

    用户提交的软件错误报告随意性大、主观性强且内容少导致自动分类正确率不高,需要花费大量人工干预时间。随着互联网的快速发展用户提交的错误报告数量也不断增加,如何在海量数据下提高其自动分类的精确度越来越
    发表于 12-18 11:25 0次下载

    PCIe总线的错误报告机制中四个比较重要的概念

    错误报告(Error Reporting):通知系统某个(或多个)错误发生了。在PCIe总线中,发生错误的设备会通过错误消息(Error
    的头像 发表于 08-17 10:09 6197次阅读

    PCIe扫盲—PCIe错误检测机制的详细资料概述

    PCIe总线错误检测囊括了链路(Link)上的错误以及包传递过程中的错误,如下图所示。用户设计的应用程序层中的错误不属于链路传输中的
    的头像 发表于 08-18 11:05 1.5w次阅读

    PCIe总线的三种错误报告方式

    PCIe设备的配置空间中的状态与控制寄存器如上图所示,通过这些寄存器可以使能(或禁止)通过错误消息(Error Message)发送错误报告、查询错误状态信息,以及链路训练和初始化状态
    的头像 发表于 08-23 10:14 1.4w次阅读
    <b class='flag-5'>PCIe</b>总线的三种<b class='flag-5'>错误报告</b>方式

    PCIe错误报告机制上高级错误报告AER

    也是其他错误的根源。PCIe Spec V2.1还支持多个错误的追踪(Tracking Multiple Errors)。
    的头像 发表于 08-27 11:31 6895次阅读
    <b class='flag-5'>PCIe</b><b class='flag-5'>错误报告</b><b class='flag-5'>机制</b>上高级<b class='flag-5'>错误报告</b>AER

    Root如何处理来自其他PCIe设备的错误消息

    高级可校正错误屏蔽寄存器如下图所示,默认情况下,这些bit的值都是0。也就是说,只要发生相关错误,且该错误报告功能被使能,则相关错误便会被报告
    的头像 发表于 08-28 09:44 4096次阅读
    Root如何处理来自其他<b class='flag-5'>PCIe</b>设备的<b class='flag-5'>错误</b>消息

    如何提高PHP网站安全性详细技巧资料说明

    技巧1:使用合适的错误报告 一般在开发过程中,很多程序员总是忘了制作程序错误报告,这是极大的错误,因为恰当的错误报告不仅仅是最好的调试工具,也是极佳的安全漏洞检测工具,这能让你把应用
    发表于 02-14 15:42 1次下载
    如何提高PHP网站安全性详细技巧资料说明

    查看服务器连接错误报告的方法说明

    查看服务器连接错误报告的方法
    发表于 01-07 11:04 903次阅读