可以说,pci express设备实现了AER功能,以实现可靠的错误报告。因此,只要设备拦截了此类错误,它就会相应地填充其AER寄存器。如何将这个错误报告给root complex?我读过规范,这些错误将通过“消息TLP”报告。这个“消息TLP”是否意味着将触发MSI以向根联合体发送指示?同样,用于报告其他/非AER错误的机制是否相同?
答案 0 :(得分:2)
PCI-Express错误通过称为消息请求(缩写为Msg)的特定类型的TLP(事务层数据包)来报告。 Msg是一种通用TLP,可用于多种用途(PCI兼容性中断信令,电源管理,热插拔信令等,以及错误信令),并且与其他TLP类型(内存读取请求,内存写入请求,完成,配置读/写等)。
错误消息TLP是来自设备的消息,该消息检测到错误,并指定了检测到的错误的类别以及在哪个设备中检测到该错误。发送设备可以指定多种消息TLP路由选择。这些方法之一是“路由到根联合体”,它引导任何中间组件(如交换机(网桥))将TLP上游转发到根联合体。错误详细信息会记录在特定设备的AER功能中(如果它实现了-大多数PCI-E设备会执行此操作),然后将Msg信号发送给该错误,以将错误发送到根联合体。
从根联合体开始,有两种向平台报告错误的方法。
实际上没有错误是“非AER错误”。但是,设备不必实现AER功能。在这种情况下,“不支持高级错误报告功能的设备仅记录指示已检测到错误的设备状态寄存器位。”因此,错误的详细信息将丢失。