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的错误可能直接对系统复位处理。
Correctable Errors:是指可纠正的错误,在硬件不经过软件的干预可以通过自身的逻辑纠正的错误。对于一些可纠正的错误如果处理校正的设备不处理的话需要将错误报告成Uncorrectable Errors。
Uncorrectable Errors:不可纠正的错误,这类错误会影响接口的功能,这类错误在协议中没有明确的机制可以纠正。对于PCIe具备更健壮的错误处理机制的设备来说,会进一步区分该错误为:Fatal和Non-Fatal。
Fatal Error:这类错误导致链路和硬件异常只有通过复位操作实现恢复。
Non-Fatal:这类错误可能会导致特定的传输变得不可靠,但是链路和硬件的其他功能不受影响。设备驱动软件提供恢复机制,并不会影响到链路和其他设备的运行。
3. 错误信号转发和通知
PCIe提供了三种方式转发通知错误:
1. 通过回复完成状态Completion Status
2. 通过错误消息 error Messages
3. 通过错误转发机制Error Forwarding
3.1 Completion Status:
针对Non-Posted请求,一些错误可以通过completion status的方式通知系统或其他设备,这种方式的通知,使上层协议或者软件有机会可以判断状态做相应的补救处理。