PCIE Capabilities
PCIE将配置空间分为256 bytes (FF)跟扩展 4096 bytes(FFF),PCIE Capability structure也包括PCI兼容部分和扩展部分
1. PCI 兼容部分Capability structure:
从offset 0x34开始读取下一个ID pointer,直到读取值为00
0x34 处为0x40,表示该Capability (ID=1) offset 为0x40;下一Capability offset指向0x70;ID定义参考PCI_Local_Bus_Spec_3.0 page329, 如ID为1表示PCI powermanagement Capabilit
ID 10 PCI Express Capability (DevCtl/LnkCtl....)如下图,offset 0x34 指向0x80,可以看到0x80 处ID 为0x10,即0x80 开始为PCI Express Capability
2. PCI Express Extended Capabilities
Extended Capabilities 从PCI 配置空间0x100 开始,有一个Capability ID,如果为0000,则表示没有任何扩展功能
类似于PCI Capabilities list
如下图ID为0001,下一个offset指向0x148;
ID 0001 表示AER Capability,所以100开始为Advanced Error Reporting Capability
PCIE error report
PCIe 定义了基本的与AER两种错误报告范例,基本的错误报告是所有PCIe devices需要的,定义了最小错误报告需求;AER 定义了更强大的错误报告,通过Advanced Error Reporting Capability structure完成
PCIe error 包括Uncorrectable errors and Correctable errors,Uncorrectable errors 又包括fatal 跟 no-fatal
设备错误传递及记录流程:(Advanced Error Reporting only)
- detect 到的error type根据Uncorrectable Error Severity reg决定严重性,这个寄存器来决定报为fatal error or no-fatal error,如果对应bit设置为1,则报为fatal error
- 设置对应bit 到Uncorrectable Error Status reg 或者Correctable Error Status reg,bit为1意味着侦测到对应错误,软件可以清掉该error status
- Masked in Uncorrectable Error Mask reg 或者Correctable Error Mask reg,这个寄存器控制着是否report error到PCIe RP;如果mask为1,则对应error不会上报
- 按照3如果mask,则不上报结束;如果没有mask,uncorrected error则记录前缀和报头,并更新前缀和报头报告字段和regs;编辑
- Corrected error如果是Advisory Non-Fatal Error(警告性的非致命错误)则表示是检测到ERR_NONFATAL(uncorrected error)错误的设备并不是最终决定错误处理的设备,因此用ERR_COR代替ERR_NONFATAL来提醒软件
- 如果error 是UR(unsupported request)或者Device control reg 中URRE=0 /FERE=0/CERE=0/NERE=0 或者 SERR_En=0 ,则不报告error;否则则报告对应ERR_FATAL,ERR_NOFATAL,ERR_COR.