pcie5.0 错误信号和日志记录

错误信号和日志记录

本节介绍PCI Express组件的错误信号和日志记录要求。这包括发生在PCI Express接口本身上的错误,代表在PCI Express上启动的事务发生的错误,以及发生在组件内并与PCI Express接口相关的错误。PCI Express定义了两种错误报告模式:基线功能和AER功能(AER)。

1、错误分类

PCI Express错误可分为两类:不可纠正错误和可纠正错误。这种分类将导致功能故障的错误与导致性能下降的错误区分开来。无法纠正的错误可进一步分为致命错误或非致命错误。

image-20240229155105191

1.1 可纠正的错误

可纠正的错误包括硬件可以在没有任何信息丢失的情况下恢复的错误条件

硬件可以纠正这些错误,不需要软件干预。例如,TLP中的LCRC错误可能会通过数据链路级别重试进行更正,此错误被视为可更正错误。测量链路级可纠正错误的频率可能有助于分析链路的完整性。

可纠正的错误还包括事务级别的情况,即一个代理检测到TLP错误,但另一个代理负责在需要时采取任何恢复操作,例如使用单独的后续事务重试该操作。检测代理可被配置成将错误报告为可纠正的,因为恢复代理可能能够纠正它。如果确实需要恢复操作,并且恢复代理决定不尝试恢复,则恢复代理必须将错误报告为不可纠正。

1.2 不可纠正的错误

不可纠正的错误是那些影响接口功能的错误情况。进一步将不可纠正的错误分类为致命错误和非fatal错误.

致命错误:致命错误是无法纠正的错误情况,会导致特定链路和相关硬件不可靠。对于致命错误,可能需要重置链路上的组件以恢复可靠运行。平台对致命错误的处理以及限制这些错误影响的任何努力都是特定于平台实现的

非致命错误: 非致命错误是无法纠正的错误,导致特定事务不可靠,但链路在其他方面完全正常。将非致命错误与致命错误隔离开来为设备或系统管理软件中的请求者/接收者逻辑提供了从错误中恢复的机会,而无需重置链路上的组件和干扰正在进行的其他事务。与错误交易无关的设备不受错误影响

2、错误信号

有三种互相补充的报错机制,允许检测到错误的代理向系统或另一个设备发出错误警报。第一种机制是通过完成状态(Completion Status),第二种方法是带内错误消息(Error Messages),第三种是错误转发,也称为数据中毒(Error Forwarding /data poisoning)。

2.1 Completion Status

只要完成包的状态不是SC,就代表对应的请求失败了。对于Non-posted的请求,只要completion包没有返回,请求就没有完成。

image-20240304103207191

image-20240304103223851

2.2 Error Messages

错误消息将发送到RC,以便根据错误的严重性报告错误检测。下面为错误消息格式,它们被路由到RC进行处理。

image.png

image-20240301144607687

错误分为可纠正的、非致命的,要么是致命的。假设启用了信令,则始终以ERR_COR表示可纠正错误,始终以ERR_NONFATAL表示非致命错误,始终以ERR_FATAL表示致命错误。 在支持基于角色的错误报告的后续规范中,非致命错误有时用ERR_NONFATAL发出信号,有时用ERR_COR发出信号,有时根本不发出信号,具体取决于检测错误的代理的角色以及代理是否实现AER。

如果Root Port支持AER,则收到error message(根据error code可以分为ERR_COR/ERR_NONFATAL/ERR_FATAL)或者Root port自己检查到对应错误时,会记录到Root Port的Root Error Status寄存器。

image-20240304103629866

1)对于实现AER功能的设备,允许将寄存器每个不可纠正错误编程为致命或非致命错误。同时不可纠正错误掩码寄存器和可纠正错误掩码寄存器可以独立屏蔽每个错误条件。如果设备控制寄存器和PCI命令寄存器中的组合设置未启用特定类型的错误消息,则无论相应的掩码寄存器的值如何,都不会发送该类的消息。

2)如果给定事务的错误条件没有与最重要的事件隔离,则可能发生错误污染。假如,物理层检测到接收方错误,并向RC报告。为避免传播并导致后续错误(例如,数据链路层的TLP错误),从而使确定错误的根本原因变得更加困难,上层不会报告同一数据包发生的后续错误。

已纠正的内部错误不会造成错误污染,应在发现时报告。

对于在事务层检测到的错误和不可纠正的内部错误,允许并建议对单个收到的TLP报告不超过一个错误,并使用以下优先级(从高到低):

  • Uncorrectable Internal Error

  • Receiver Overflow

  • Malformed TLP

  • ECRC Check Failed

  • AtomicOp Egress Blocked

  • TLP Prefix Blocked

  • ACS Violation

  • MC Blocked TLP

  • Unsupported Request (UR), Completer Abort (CA), or Unexpected Completion

  • Poisoned TLP Received or Poisoned TLP Egress Blocked

每条内部的错误类型(互斥)不分先后。

2.3 Error Forwarding/Data Poisoning

错误转发,也称为数据中毒,通过设置TLP中的EP位来指示。这是PCI Express中的另一种错误报告方法,它使TLP的接收者能够将错误与特定的Request or Completion相连接。与Completion状态机制不同,错误转发可以用于包含数据的Request or Completion。此外,TLP路线沿线的“中间”接收者(不仅仅是最终目的地的接收者),需要检测和报告(如果启用的话)接收中毒的TLP。这可以帮助软件确定路径上的特定Switch是否毒害了TLP.

  • 通过设置TLP(事务层包)的EP(错误指针,置1)位来标记错误数据。

  • 接收到污染TLP的组件需要决定如何处理这些数据,例如丢弃或报告错误

在这里插入图片描述

  下面场景下会用到error formarding(data poisoning) 从main memory读数据时遇到了uncorrectable error PCI write 到main memory时出现parity error internal data buffer或者cache的出现数据完整性错误

3、错误记录

不支持AER功能的器件功能仅记录指示检测到错误的器件状态寄存器位。对于支持AER功能的器件功能,每个错误对应于不可纠正错误状态寄存器或可纠正错误状态寄存器中的一个特定位。软件使用这些寄存器来更精确地确定发生了哪个错误以及错误的严重程度。对于特定的事务层错误和不可纠正的内部错误,记录相关的TLP报头。

在多功能设备中,与设备中的任何特定功能无关的PCI Express错误被记录在该设备中所有功能的相应状态和记录寄存器中

以下PCI Express错误不是特定于功能的错误:

  • 所有物理层错误

  • 所有数据链路层错误

  • 事务层错误:

    ECRC检查失败

    不支持的请求,由没有功能声明TLP引起

    接收器溢出

    流量控制协议错误

    错误的TLP

    意外Completion,由没有功能声明完成引起

    意外Completion,由交换机无法转发的完成引起, 并且入口端口是与多功能设备相关联的交换机上游端口。

    一些事务层错误(例如,接收到中毒的TLP)

  • 一些内部错误

在检测到这些错误之一时,多功能设备应最多生成一条错误报告消息,给定错误的严重级别,消息必须报告请求者ID。如果未启用相应功能,则设备不发送报告消息。

3.1 RC考虑事项

除了上述记录外,还需要支持AER功能的Root Port 或Root Complex Event Collector来实现错误源标识寄存器,该寄存器记录收到的第一个ERR_NONFATAL/ERR_FATAL(不可纠正的错误)和ERR_COR(可纠正的错误)消息的请求者ID。为支持AER而编写的系统软件可以使用根错误状态寄存器来确定哪些字段包含有效信息。

对于Root Port 或Root Complex Event Collector,为了将收到的错误消息或内部生成的错误消息记录在根错误状态寄存器和错误源标识寄存器中,错误消息必须“已发送”。通过命令寄存器中的SERR#使能位(ERR_NONFATAL和ERR_FATAL)或器件控制寄存器中的报告使能位(ERR_COR、ERR_NONFATAL和ERR_FATAL),内部生成的错误消息可以传输。

3.2 多重错误处理(AER功能)

对于AER功能,不可纠正错误状态寄存器可纠正错误状态寄存器累积与特定PCI Express接口对应的错误集合。这些bit位保持置位状态,直到被软件明确清零或复位。由于不可纠正错误状态寄存器中可能设置了多个位,因此第一个错误指针(有效时)指向记录的最早的不可纠正错误。当不可纠正错误状态寄存器的相应bit置位时,第一个错误指针有效。当不可纠正错误状态寄存器的相应bit未置位或为未定义位时,第一个错误指针无效。

AER功能提供了记录header的能力,以发现需要记录header的错误。

可以支持记录多个报头,但至少必须支持记录至少一个报头的能力。记录多个header的能力由多header记录能力位的状态指示,并由高级错误能力和控制寄存器的多header记录使能位使能。当支持并启用多header记录时,将按照检测到错误的顺序记录错误。

如果检测到1、未屏蔽的不可纠正错误时没有可用的header记录资源,2、不可纠正的错误被屏蔽,则设置其错误状态位,但不记录错误。

当软件准备消除第一个错误指针指示的记录错误时,会向指示的错误状态位写入1b以将其清除硬件释放相关的记录资源.如果仍然记录了任何错误实例,硬件必须立即更新header日志、TLP前缀日志、TLP前缀日志当前位、第一个错误指针和不可纠正的错误状态寄存器,以反映下一个记录的错误。如果没有记录其他错误,建议硬件更新第一错误指针,以指示它将永远不会设置的状态位,例如保留的状态位。

如果支持并使能多header记录,并且第一个错误指针有效,则建议软件不要将1b写入除第一个错误指针指示的位之外的任何状态位。如果软件向这些未指示的位写入1b,则允许硬件清除任何相关的记录错误,但是并不要求这样做。

如果软件观察到第一个错误指针无效,并且软件希望清除由于先前的报头记录资源溢出而设置的任何未屏蔽状态位,则软件应该知道之后竞争条件。如果在软件清除这些状态位之前碰巧记录了这些错误的任何新实例,则一个或多个新记录的错误可能会丢失

如果支持并启用了多header记录,软件在清除多头记录启用位时必须特别小心。如果软件在第一个错误指针有效时清除该位,则硬件行为未定义。在清除多表头记录使能位之前,建议软件暂时屏蔽所有不可纠正的错误,然后重复消除第一个错误指针指示的每个错误。

由于实施方案只能记录有限数量的报头,因此软件必须及时为第一个错误指针、报头日志和TLP前缀日志寄存器提供服务,以限制后续错误丢失这些信息的风险。

3.3 Advisory 非致命错误记录

具有AER的代理检测到不可纠正的非致命严重性错误时使用ERR_COR而不是ERR_NONFATAL发出错误信号(如果已启用).

对于建议性非致命错误情况,由于使用可纠正错误消息来通知不可纠正错误,因此涉及不可纠正错误和可纠正错误的控制/状态/屏蔽bit均适用。下图显示了该序列的流程图。以下是日志记录建议非致命错误的一些独特方面。

1、不可纠正错误的严重性必须为非致命性,由不可纠正错误严重性寄存器中的相关位决定。如果严重性为致命错误,则该错误不属于建议性非致命错误,并且会以ERR_FATAL发出信号(如果已启用)。

2、特定错误案例需要是记录的建议性非致命错误案例之一。否则,该错误不符合建议性非致命错误的条件,并将通过不可纠正的错误消息发出信号(如果已启用)。

3、在可纠正错误状态寄存器中设置Advisory 非致命错误状态位以指示Advisory 错误的发生,并且检查可纠正错误屏蔽寄存器中的Advisory 非致命错误屏蔽位,如果设置了该位,则不进行进一步处理。

如果Advisory 非致命错误屏蔽位清零,则根据报告为Advisory 错误的特定不可纠正错误,通过设置不可纠正错误状态寄存器中的“相应”位来继续记录。如果不可纠正错误屏蔽寄存器中的“相应”不可纠正错误位被清除,并且该错误需要记录报头,则根据资源的可用性记录前缀和报头。

4、如果器件控制寄存器中设置了可纠正错误报告使能位,则会发送一条ERR_COR消息。

3.4 TLP前缀日志记录

对于支持TLP前缀和AER的任何设备功能,根据与报头日志寄存器相同的规则,与出错的TLP相关联的TLP前缀被记录在TLP前缀日志寄存器中(使得当第一错误指针有效时,TLP前缀日志和报头日志寄存器总是对应于第一错误指针中指示的错误)。

AER只记录端到端TLP前缀。使用前缀特定机制,可在其他地方记录本地TLP前缀。端对端TLP前缀记录在TLP前缀记录寄存器中。底层TLP报头记录在报头日志寄存器中

4、设备错误信号和记录操作的顺序

image-20240417153451674

5、错误消息控制

错误消息有一组复杂的相关控制和状态位。下图以伪逻辑图的形式提供了错误消息如何生成、记录、转发并最终通知系统的高级摘要

image-20240417153748531

6、错误列表和规则

下表列出了本规范定义的所有PCI Express错误。每个错误都列出了一个简写名称、如何在硬件中检测到错误、错误的默认严重性以及检测到错误的代理所采取的预期操作。

表中默认严重度的列,指定了错误的默认严重度,无需任何软件重新编程。对于支持高级错误报告功能的器件功能,不可纠正的错误可通过错误严重度寄存器编程为致命或非致命。没有高级错误报告功能的设备功能使用默认关联,并且不可重新编程。

如果错误触发了下游端口控制(DPC ),则实施并启用了DPC的下游端口的检测代理操作会有所不同。

6.1、常规PCI Express错误列表

image-20240417163940507

6.2、物理层错误列表

image-20240417164031280

6.3、数据链路层错误列表

image-20240417164133048

image-20240417164153849

6.4、事务层错误列表

image-20240417164328836

image-20240417164413603

image-20240417164440411

7、内部错误

内部错误是发生在组件内的与PCI Express接口相关联的错误,它可能不是由PCI Express接口本身上的数据包或事件引起的,也不是由PCI Express上发起的事务引起的。

内部错误可分为已纠正的内部错误不可纠正的内部错误。已纠正的内部错误是指发生在组件内部的错误,该错误已被硬件屏蔽或解决,没有任何信息丢失或不当操作。可能纠正的内部错误的一个例子是由纠错码(ECC)纠正的内部包缓冲存储器错误。不可纠正的内部错误是指组件内部发生的错误,导致组件运行不正常。可能无法纠正的内部错误的一个示例是无法通过ECC纠正的内存错误。从无法纠正的内部错误中恢复的唯一方法是重置或更换硬件。

报告已纠正的内部错误和不可纠正的内部错误是独立可选的。如果报告了任何一种情况,则必须实施AER。

对于无法纠正的内部错误,header日志记录是可选的。记录报头时,该报头是由于不可修复的内部错误而丢失或损坏的第一个TLP的报头。当没有实现标题记录或标题不可用时,记录全为1的header

与特定PCI Express接口相关的内部错误由与该端口相关的功能报告上游端口报告在无法与特定PCI Express接口关联的交换机内检测到的内部错误。

8、DPC(Downstream Port Containment)

DPC 是一种用于处理PCIe链路中错误情况的机制。当PCIe链路上的一个设备发送错误信号时,DPC机制允许系统针对该错误进行处理,以避免错误的传播和影响其他设备。具体而言,在端口处或以下检测到未屏蔽的不可纠正的错误后,DPC停止下游端口以下的PCI Express传输。

默认情况下,DPC被禁用,除非通过软件使用DPC触发使能域使能,否则无法触发。当DPC触发使能字段设置为01b时,DPC使能,并在下游端口检测到未屏蔽的不可纠正错误或下游端口收到ERR_FATAL消息时触发。当DPC触发使能字段设置为10b时,DPC使能,并在下游端口检测到未屏蔽的不可纠正错误或下游端口收到ERR_NONFATAL或ERR_FATAL消息时触发。除了由PCI Express扩展功能和AER管理的不可纠正的错误类型之外,RP PIO错误也可以作为不可纠正的错误来处理。

当由于收到不可纠正的错误消息而触发DPC时,消息中的请求者ID将记录在DPC错误源ID寄存器中,该消息将被丢弃且不会向上游转发。当DPC由未屏蔽的不可纠正错误触发时,即使启用了该错误,也不会用不可纠正错误消息发出信号。然而,当DPC被触发时,DPC可以发出中断信号或发送ERR_COR消息

当DPC被触发时,下游端口立即设置DPC触发状态位和DPC触发原因字段,以指示触发条件(未屏蔽的不可纠正错误、ERR_NONFATAL、ERR_FATAL、RP_PIO错误或软件触发),并通过将LTSSM定向到 Disabled状态来禁用其链路。一旦LTSSM达到 Disabled状态,它将保持该状态,直到DPC触发状态位被清零。为了确保LTSSM有时间达到 Disabled状态,或者至少在各种错误条件下关闭链路,软件必须将下行端口留在DPC中,直到链路状态寄存器中的 Data Link Layer Link Active bit读取为0b;否则,结果不确定。

在支持DPC RP扩展的根端口中触发DPC后,根端口可能需要一些时间来停止和清理其内部活动,例如与DMA读取请求相关的活动。当DPC触发状态位被置位且DPC RP Busy位被置位时,软件必须离开DPC中的根端口,直到DPC RP Busy位读取0b。

软件从DPC释放下游端口后,端口的LTSSM必须转换到检测状态,此时链路将尝试重新训练。当链路再次达到DL_Active状态时,软件可以使用数据链路层状态更改中断、DL_Active ERR_COR信号或两者并用来发出信号。

欢迎大家关注个人的公众号(ic设计入门到放弃),定期分享pcie、serdes协议、知识。

  • 29
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PCIe 5.0是一个高速数据传输接口技术,是PCIe 4.0的升级版本。在使用PCIe 5.0时可能会发生一些错误,下面我将对这些错误的来源进行解释。 1. 电缆质量:使用低质量或损坏的电缆可能会导致数据传输错误。电缆中的信号线可能有断裂、短路或信号衰减等问题,这会导致PCIe 5.0传输的数据出现错误。 2. 电源和接地问题:电源噪音和不稳定的接地都可能对PCIe 5.0的性能产生负面影响。过高或过低的电压会导致电路中的信号误差,从而导致传输错误。 3. 设备兼容性:某些设备可能不完全兼容PCIe 5.0标准,这可能导致通信错误。在使用PCIe 5.0时,确保所有相关设备都兼容这一标准,以确保正确的数据传输。 4. 时钟同步问题:当PCIe 5.0设备的时钟不同步时,数据传输可能会出现错误。时钟不同步可能是由于设备之间的通信问题或设备的时钟源不准确引起的。 5. 热问题:使用PCIe 5.0的设备在长时间高负载下可能会发热,过高的温度可能导致传输错误。使用散热解决方案来保持设备的正常工作温度,可以减少由于热引起的传输错误。 要解决PCIe 5.0错误,可以采取一些措施。首先,确保所使用的电缆质量良好,并没有损坏。其次,保持设备的电源和接地稳定,尽量降低电源噪音。另外,确保所使用的设备都兼容PCIe 5.0标准。此外,确保设备之间的时钟同步,并定期检查设备的工作温度,保持在正常范围内。通过这些措施,可以减少PCIe 5.0错误的发生,提高数据传输的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值