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

电子说

1.2w人已加入

描述

PCIe总线有三种错误报告方式,分别是:

1.     Completions:通过Completion中的状态位向Request返回错误信息

2.     Poisoned Packet(又称为错误传递,Error Forwarding):告知接收端当前TLP的Data Payload已经被破坏

3.     Error Message(错误消息):向主机报告错误信息

前两种之前的文章都已经提及,错误消息的格式和对应的消息编码如下所示:

PCIe

PCIe

为了兼容PCI总线的错误报告机制(使用PERR#和SERR#),PCIe设备会自动将CA、UR和Poisoned TLP转换为对应的错误信息。具体这里就不详细介绍了,有兴趣的可以自行阅读PCIe Spec的相关章节。

PCIe

PCIe设备的配置空间中的状态与控制寄存器如上图所示,通过这些寄存器可以使能(或禁止)通过错误消息(Error Message)发送错误报告、查询错误状态信息,以及链路训练和初始化状态等。

前面的文章介绍过,默认的错误分类如下表所示:

PCIe

这些错误类型可以通过设备控制寄存器(Device Control Register)中的相关位,进行使能或者禁止:

PCIe

也可以通过设备状态寄存器(Device Status Registers)相关位查询错误状态:

PCIe

当然,当Root接收到错误消息后,怎么处理还要取决于Root Control Register的设置:

PCIe

链路错误(Link Errors)一般发生在物理层与数据链路层通信的过程中。对于Downstream的设备,如果链路上发生了Fatal错误,此时,该设备并不能够向Root报告错误。这种情况下,需要Upstream设备向Root来报告错误。为了消除链路错误,一般需要对链路进行重新训练(Retrain)。如下图所示,在链路控制寄存器中,可以通过往Retrain Link这一位写1,来强制进行链路重训练。

PCIe

当发起重训练请求后,软件可以检查链路状态寄存器(Link Status Register)中的Link Training位,来确认链路训练是否已经完成,如下图所示。当该位为1时,表明链路训练尚未完成(或者还没有开始),如果链路训练已经完成,硬件会自动将该位清零。

PCIe

PCIe总线的错误登记与报告的流程图如下图所示:

PCIe

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分