searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

PCIe Advanced Error Reporting错误报告机制

2023-04-23 05:40:24
584
0

在PCIe总线的错误报告机制中,有如下四个比较重要的概念:

  • 错误检测(Error Detection:指的是检测某个错误是否存在的过程。
  • 错误登记(Error Logging:指的是将相关寄存器(配置空间中的)的对应为置位,以等待软件中的相关错误处理程序来处理该错误。
  • 错误报告(Error Reporting:通知系统某个(或多个)错误发生了。在PCIe总线中,发生错误的设备会通过错误消息(Error Message)逐级将错误信息发送至Root,Root接收到错误消息后,会产生对应的中断通知系统。
  • 错误发送(Error Signaling:指的是通过发送错误消息(或者带有UR,CA的Completion和Poisoned TLP)来传递错误信息的过程

PCIe总线Spec定义了两个错误报告等级。第一个为基本的(Baseline Capability),是所有PCIe设备都需要支持的功能。第二个是可选的,称之为高级错误报告(Advanced Error Reporting Capability)。

在基本的错误报告机制中,有两组相关的配置寄存器(配置空间中),分别为:

  • 兼容PCI总线的寄存器(PCI-compatible Registers)
  • PCIe总线中新增的寄存器(PCI Express Capability Registers)

高级错误报告机制(AER)中,又使用了一组专用的配置寄存器(配置空间中)。借助AER可以获得更多的错误信息,有助于软件定位错误源和分析错误原因。

PCIe总线的错误可以分为(Correctable Errors)和不可校正错误(Uncorrectable Errors)。其中,可校正错误可以自动地被硬件识别并被自动的校正或恢复。而不可校正错误又被分为非致命的(Non-Fatal)和致命的(Fatal)。非致命的错误一般有设备驱动软件(Device Specific Software)直接处理,且链路(Link)可恢复,甚至链路上的数据有可能得到恢复(不丢失数据)。致命的错误只能由系统软件(System Software)处理,且一般需要进行复位等操作,因此链路上的数据必然会丢失。

PCIe总线错误检测囊括了链路(Link)上的错误以及包传递过程中的错误,如右图所示。用户设计的应用程序层中的错误不属于链路传输中的错误,不应当通过PCIe的错误检测与处理机制处理,一般可借助设备特殊中断(Device Specific Interrupt)等合适的方式进行报告与处理。

包传递过程的错误主要通过CRC编码来检测。PCIe定义了两种CRC——LCRC和ECRC。其中LCRC(Link CRC)由数据链路层产生和校检,用于检测从一端的数据链路层发送到另一端的数据链路层的TLP是否发生的错误。而ECRC(End-to-end CRC)由事务层产生和校检,且ECRC是可选的。

一般情况下(尤其是没有Switch的简单PCIe总线系统中),ECRC的确是没有必要存在的。ECRC主要为解决Switch中传输的可能存在的传输错误问题的,换句话说,如果用户的设计中并没有Switch(只是简单的Root与Endpoint的端对端直连),完全可以不使用ECRC。

如右图所示,假设来自Endpoint的TLP被正确地传输到Switch的Downstream输入端口(Ingress Port),Downstream输入端口中的数据链路层也完成了对其的LCRC校检,且未发现错误。然后Switch会将该LCRC移除,并添加新的序列号(Sequence Number),随后重新计算LCRC,再将该TLP发送至Switch的Upstream输出端口(Egress Port)。显然,在此过程中TLP是不受保护的,一旦期间数据传输遇到错误等异常,可能会导致重新计算LCRC前的数据已经受到了破坏,且仅仅使用LCRC是无法发现这样的错误的。

 

ECRC是AER中的一部分,要想使用ECRC,该PCIe设备必须是支持AER的。

按照错误产生的层(Layer)来分,则可以分为物理层错误数据链路层错误事务层错误

物理层错误(Physical Layer Errors主要有:

  (1)8b/10b编解码异常

  (2)Framing异常(8b/10b编码中是可选的,128b/130b中是必选的)

  (3)Elastic Buffer错误(可选的)

  (4)起始字符失锁(Loss of Symbol Lock)或者通道对齐失锁(Lane Deskew)(可选的)

数据链路层错误(Data Link Layer Errors主要有:

  (1)LCRC校检失败

  (2)序列号(Sequence Number)异常

  (3)DLLP中的16-bit CRC校检失败

  (4)链路层协议错误(Link Layer Protocol Errors)

事务层错误(Transaction Layer Errors主要有:

  (1)ERCR校检失败(可选的)

  (2)异常的TLP(Malformed TLP)(即TLP的格式异常)

  (3)流量控制协议异常(Flow Control Protocol Violation)

  (4)不支持的请求

  (5)数据损坏(Data Corruption,又称为Poisoned Packet)

  (6)Completer Abort(可选的)

  (7)接收端溢出(Receiver Overflow)(可选的)

  (8)返回包超时(Completion Timeout)

  (9)不对应的返回包(Unexpected Completion,即Completion与发出的Request不一致)

0条评论
0 / 1000
infrahw
7文章数
0粉丝数
infrahw
7 文章 | 0 粉丝
原创

PCIe Advanced Error Reporting错误报告机制

2023-04-23 05:40:24
584
0

在PCIe总线的错误报告机制中,有如下四个比较重要的概念:

  • 错误检测(Error Detection:指的是检测某个错误是否存在的过程。
  • 错误登记(Error Logging:指的是将相关寄存器(配置空间中的)的对应为置位,以等待软件中的相关错误处理程序来处理该错误。
  • 错误报告(Error Reporting:通知系统某个(或多个)错误发生了。在PCIe总线中,发生错误的设备会通过错误消息(Error Message)逐级将错误信息发送至Root,Root接收到错误消息后,会产生对应的中断通知系统。
  • 错误发送(Error Signaling:指的是通过发送错误消息(或者带有UR,CA的Completion和Poisoned TLP)来传递错误信息的过程

PCIe总线Spec定义了两个错误报告等级。第一个为基本的(Baseline Capability),是所有PCIe设备都需要支持的功能。第二个是可选的,称之为高级错误报告(Advanced Error Reporting Capability)。

在基本的错误报告机制中,有两组相关的配置寄存器(配置空间中),分别为:

  • 兼容PCI总线的寄存器(PCI-compatible Registers)
  • PCIe总线中新增的寄存器(PCI Express Capability Registers)

高级错误报告机制(AER)中,又使用了一组专用的配置寄存器(配置空间中)。借助AER可以获得更多的错误信息,有助于软件定位错误源和分析错误原因。

PCIe总线的错误可以分为(Correctable Errors)和不可校正错误(Uncorrectable Errors)。其中,可校正错误可以自动地被硬件识别并被自动的校正或恢复。而不可校正错误又被分为非致命的(Non-Fatal)和致命的(Fatal)。非致命的错误一般有设备驱动软件(Device Specific Software)直接处理,且链路(Link)可恢复,甚至链路上的数据有可能得到恢复(不丢失数据)。致命的错误只能由系统软件(System Software)处理,且一般需要进行复位等操作,因此链路上的数据必然会丢失。

PCIe总线错误检测囊括了链路(Link)上的错误以及包传递过程中的错误,如右图所示。用户设计的应用程序层中的错误不属于链路传输中的错误,不应当通过PCIe的错误检测与处理机制处理,一般可借助设备特殊中断(Device Specific Interrupt)等合适的方式进行报告与处理。

包传递过程的错误主要通过CRC编码来检测。PCIe定义了两种CRC——LCRC和ECRC。其中LCRC(Link CRC)由数据链路层产生和校检,用于检测从一端的数据链路层发送到另一端的数据链路层的TLP是否发生的错误。而ECRC(End-to-end CRC)由事务层产生和校检,且ECRC是可选的。

一般情况下(尤其是没有Switch的简单PCIe总线系统中),ECRC的确是没有必要存在的。ECRC主要为解决Switch中传输的可能存在的传输错误问题的,换句话说,如果用户的设计中并没有Switch(只是简单的Root与Endpoint的端对端直连),完全可以不使用ECRC。

如右图所示,假设来自Endpoint的TLP被正确地传输到Switch的Downstream输入端口(Ingress Port),Downstream输入端口中的数据链路层也完成了对其的LCRC校检,且未发现错误。然后Switch会将该LCRC移除,并添加新的序列号(Sequence Number),随后重新计算LCRC,再将该TLP发送至Switch的Upstream输出端口(Egress Port)。显然,在此过程中TLP是不受保护的,一旦期间数据传输遇到错误等异常,可能会导致重新计算LCRC前的数据已经受到了破坏,且仅仅使用LCRC是无法发现这样的错误的。

 

ECRC是AER中的一部分,要想使用ECRC,该PCIe设备必须是支持AER的。

按照错误产生的层(Layer)来分,则可以分为物理层错误数据链路层错误事务层错误

物理层错误(Physical Layer Errors主要有:

  (1)8b/10b编解码异常

  (2)Framing异常(8b/10b编码中是可选的,128b/130b中是必选的)

  (3)Elastic Buffer错误(可选的)

  (4)起始字符失锁(Loss of Symbol Lock)或者通道对齐失锁(Lane Deskew)(可选的)

数据链路层错误(Data Link Layer Errors主要有:

  (1)LCRC校检失败

  (2)序列号(Sequence Number)异常

  (3)DLLP中的16-bit CRC校检失败

  (4)链路层协议错误(Link Layer Protocol Errors)

事务层错误(Transaction Layer Errors主要有:

  (1)ERCR校检失败(可选的)

  (2)异常的TLP(Malformed TLP)(即TLP的格式异常)

  (3)流量控制协议异常(Flow Control Protocol Violation)

  (4)不支持的请求

  (5)数据损坏(Data Corruption,又称为Poisoned Packet)

  (6)Completer Abort(可选的)

  (7)接收端溢出(Receiver Overflow)(可选的)

  (8)返回包超时(Completion Timeout)

  (9)不对应的返回包(Unexpected Completion,即Completion与发出的Request不一致)

文章来自个人专栏
云服务器硬件基础知识
7 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0