【PCI】PCIe高级错误上报能力AER(十二)

本文参考PCIe协议 5.0:https://download.csdn.net/download/zz2633105/89204842

本文参考intel IP用户指南:https://www.intel.cn/content/www/cn/zh/docs/programmable/683501/23-2-10-0-0/debugging-data-transfer-and-performance-25123.html

本文参考《PCIe体系结构导读》:https://download.csdn.net/download/zz2633105/89363330

如有描述错误地方,欢迎留言指出,拜谢!

AER

AER(Advanced Error Reporting)是一种用于检测和报告PCIe设备中发生的错误的机制,它允许PCIe设备检测到并报告各种类型的错误。错误类型包含Correctable Errors 和Uncorrectable errors两种,其中Uncorrectable errors下面又分为ERR_FATAL和ERR_NONFATAL。

Correctable Errors:可纠正错误是指错误发生后,硬件可以自动恢复,不影响正常业务。

Uncorrectable errors:错误发生后,影响设备功能,硬件不能自动恢复

  • ERR_FATAL:致命错误,此错误类型影响了PCIe link链路,为了防止错误扩散,通常会由错误设备的上游桥对错误设备进行复位操作
  • ERR_NONFATAL:指影响了设备功能,但是PCIe link还是稳定的
    在这里插入图片描述

AER功能启动条件:

  1. 对于EP设备和RC都应该启动Command Register寄存器中SERR#Enable;
  2. 对于EP设备,需要将AER中不可纠正错误掩码和可纠正错误掩码清空;
  3. 对于EP设备,需要将Device Control Register寄存器中Correctable Error Reporting Enable、Non-Fatal Error Reporting Enable、Fatal Error Reporting Enable、Unsupported Request Reporting Enable功能打开;
  4. 对于RC,需要将AER Root Error Command Register寄存器中Correctable Error Reporting Enable、Non-Fatal Error Reporting Enable、Fatal Error Reporting Enable功能打开。

AER相关寄存器
在这里插入图片描述

Uncorrectable Error Status Register寄存器对应Bit为1时,Uncorrectable Error Severity Register寄存器对应Bit为1表示ERR_FATAL,为0表示ERR_NONFATAL

Advanced Error Reporting Extended Capability Header (Offset 00h)

在这里插入图片描述

Bit Location Register Description
15:0 PCI Express Extended Capability ID,PCIe扩展Cap的ID,对于AER功能,其ID为0x0001.
19:16 Capability Version,对于支持End-End TLP Prefix的设备,这个必须为2,其他设备可填1或2.
31:20 Next Capability Offset,下一个Cap的偏移地址。

Uncorrectable Error Status Register (Offset 04h)

不可纠正错误状态寄存器表示PCI Express设备上单个错误的错误检测状态。该寄存器不同Bit置1表示检测到特定错误,软件可以通过向相应的位写入1b来清除错误状态,寄存器含义如下:
在这里插入图片描述

[0] Undefined

Undefined-从该位读取的值是未定义的。

[3:1] Reserve

[4] Data Link Protocol Error Status

可能原因:发送端数据链路层收到了预期之外的ACK或NAK。

数据链路层在发送TLP之前,发送端会将TLP封装,加上Sequence前缀和LCRC后缀,用于保障数据链路层两端报文完整性,如下图所示。

在这里插入图片描述

假设上电协商之后发送端只发送了Sequence=1的一个报文,那么发送端就预期接收Sequence=1的ACK或NAK。接收端接收到这个报文之后,应该回复一个ACK或NAK报文(假设不聚合),这个回复的报文中Sequence也必须为1。ACK/NAK的报文格式如下。
在这里插入图片描述

当接收端接收到的ACK或NCK的Sequence不等于1,那么将产生Data Link Protocol Error,如果Data Link Protocol Error Status位对应的mask不为1,则将Data Link Protocol Error Status位置1,并上报错误。

数据链路层更详细的交互流程可参考网址或查看PCIe体系结构导读第7.2章节。

[5] Surprise Down Error Status (Optional)

该状态为可选,如果硬件不支持,则应硬连接至0。

由link up状态在L0期间突然被置位,表示物理链路层意外断开。这个功能一般是桥设备支持的功能,也就是说,桥下面的EP意外链路断开时,桥设备可以将该Bit置1,并上报给系统软件。设备未插好、暴力热插拔都可能产生该错误。

当桥设备Slot Capabilities Register的Hot-Plug Surprise bit置1时(表示支持热插拔),桥设备将不会上报这个错误。

[11:6] Reserve

[12] Poisoned TLP Received Status

在TLP报文中,有一个EP Bit表示这个报文是否为Poisoned TLP,当该Bit为1时,表示这个报文携带的Date已经不可靠,注意,这个EP只是表征报文携带的数据不可靠了,与报文的Header无关。
在这里插入图片描述

当设备收到一个Poisoned TLP时,需要上报Poisoned TLP Received error。注意,部分主机的RC接收到Poisoned TLP报文会重启。

[13] Flow Control Protocol Error Status (Optional)

接收端一段时间未收到更新Credit的报文或更新Credit超过限制。

[14] Completion Timeout Status

一个经常碰到的错误。请求端发出的Non-post请求(cfg read与memory read)在规定时间内未收到完成报文。可通过修改请求端的Device Capabilities

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值