PCIE扫盲转发-理解

文章详细介绍了PCIe接口的信号、硬件时序、错误检测机制,特别是AER(AdvancedErrorReporting)在错误报告和处理中的作用,包括错误等级、错误源、错误报告流程和错误消息机制,以及如何通过AER能力结构体定位和处理错误。
摘要由CSDN通过智能技术生成

PCIe扫盲系列博文连载目录篇

硬件时序

pci独立于处理器,树形结构,可以和CPU总线并行操作,一般是33MHz(pci)-133Mhz
pci总线上同一时刻只能有一个主,但是从设备也不是绝对从,可以通过peer-to-peer
pci总线是共享总线,需要仲裁器(arbiter)来决定总线控制权
pci总线地址和数据复用AD,所有信号都与时钟同步,所有信号都发生在时钟上升沿,或者在上升沿采样
关键信号:
Alt

From ChatGPT:
在PCIe(Peripheral Component Interconnect Express)接口中,存在许多不同的信号,用于在设备之间进行通信和控制。以下是一些常见的PCIe信号及其解释:
TX(Transmit):发送数据的信号线。用于将数据从发送器传输到接收器。
RX(Receive):接收数据的信号线。用于接收从发送器发送的数据。
CLK(Clock):时钟信号线。用于同步和定时数据传输。
RESET(Reset):复位信号线。用于将设备复位到初始状态。
REQ(Request):请求信号线。用于请求对方设备执行某个操作或提供服务。
ACK(Acknowledge):应答信号线。用于确认收到请求并表示同意执行操作。
INT(Interrupt):中断信号线。用于设备之间的中断通知。
PME(Power Management Event):电源管理事件信号线。用于设备之间的电源管理事件通知。
PWRGOOD(Power Good):电源正常信号线。用于指示设备的电源供应是否正常。
ERR(Error):错误信号线。用于指示设备发生错误或异常情况。
FRAME(帧):表示传输数据的帧开始和结束的信号。它指示数据传输的开始和结束,用于同步数据的传输。
AD(地址/数据):通常被称为地址/数据信号,用于指示数据传输的类型。在传输阶段,AD信号可以表示地址或数据。
C/BE(Command/Byte Enable):用于传输命令和字节使能的信号。C信号用于传输控制信息,而BE信号用于指示有效数据的字节。
IRDY(Initiator Ready):表示发起方是否准备好发送数据。当IRDY为高电平时,发起方可以发送数据。
DEVSEL(Device Select):由目标设备产生的信号,用于指示是否已选择目标设备。当DEVSEL为低电平时,表示目标设备已经选择。
TRDY(Target Ready):表示目标设备是否准备好接收数据。当TRDY为高电平时,目标设备可以接收数据。
GNT(Grant):由总线主控制器发出的信号,用于授予从设备对总线的使用权。当GNT为低电平时,表示总线主控制器授予从设备使用总线的权限。

​​时序解读

  1. 在第一个时钟上升沿,FRAME#(一次数据传输的起始)和IRDY#(Initiator Ready for data)都为inactive,但是此时某个设备的GNT#(Grant)为active,说明总线仲裁器已经选定当下设备为下一个initiator
  2. 在第二个时钟上升沿,FRAME#被initiator(主机)拉低,说明一个新的事务(Transaction)开始。同时地址和命令都被发到AD上,总线上所有设备(从机)都会锁存这些信息,并检查地址和命令是否和自己匹配。
  3. 第三个时钟上升沿,IRDY#处于active状态,表明主机准备就绪,可以接收数据。AD信号处于三态,需要发生翻转机turn-around cycle,此时TRDY#必须处于inactive,以保证turn-around完成
  4. 第四个时钟上升沿,总线上某个从机确认身份,并依次将DEVSEL#和TRDY#拉低,将响应数据放到AD上,此时FRAME#为active,说明这不是最后一个数据
  5. 第五个时钟上升沿,TRDY# inactive,说明从机尚未就绪,因此所有的操作暂停一个时钟周期(插入一个wait state,最多允许8个)
  6. 第六个时钟上升沿,从机向主机发送第二个数据,此时,FRAME#信号依旧为active,不是最后一个数据
  7. 第七个时钟上升沿,IRDY# inactive,表明主机位就绪,再次出入一个wait state,但是此时从机仍可以向AD上放数据
  8. 第八个时钟上升沿,AD上的第三个数据发送至主机,此时FRAME#被拉高,inactive,说明本次事物(transaction)的最后一个数据,然后,所有控制信号都被拉高,FRAME#、AD、C/BE#处于三态

PCIE 错误检测

重要概念:

错误检测(Error detection):检测某个错误是否存在
错误登记(Error Logging):将相关寄存器(配置空间中的)的对应位置位,等待软件中的相关错误处理程序来处理
错误报告(Error Reporting):通知系统错误发生,pcie中发生错误的设备会通过错误消息逐级将错误发送至root,root接收到错误消息后会产生对应的中断通知os
错误发送(Error Signaling):通过发送错误消息来传递错误信息

错误等级

分为两级,一是基本(Baseline capability),对应pci-compatible registers,一个是可选(advanced error reporting capability),对应pci express capability registers
错误类型分为:correctable errors (可被硬件识别并自动校正和恢复)和uncorrectable error(分为non-fatal和fatal),non-fatal由设备驱动软件处理,且链路可恢复数据一般不会丢失,fatal只能由os处理,且一般需要复位,数据会丢失

检测机制

包传递过程主要通过CRC来检测,pcie定义了两种CRC:LCRC(链路层)和ECRC(事务层),其中ECRC是AER的一部分。
各层的错误类型(错误源):
物理层:8b/10b编解码异常;framing异常;elastic buffer错误;起始字符失锁(Loss of symbol lock)或者通道对齐失锁(lane deskew)
数据链路层:LCRC校验失败;序列号(SN)异常;DLLP中的16-bitCRC校验失败;Link layer protocol errors
事务层:ECRC校验失败;异常的TLP;Flow control protocol violation;不支持的请求;Data corruption(Poisoned Packet);completer abort;receiver overflow;completion timeout;unexpected completion(completion与发出的request不一致)

错误优先级

uncorrectable internal error
接收端buffer溢出(receiver overflow)
流量控制协议错误(Flow control protocol violation)
ECRC校验失败
异常的TLP
atomicop egress blocked
TLP包头异常
访问控制服务(Access control services,ACS)异常
MC(Multi-cast)Blocked TLP
不支持的请求(UR,CA)或者不对应的返回包
接收到损坏的数据包

错误源

ECRC错误

需要先查询设备的配置空间来确认某个function是否支持ECRC,如果支持,通过配置ECCR(error capability and control register)来使能ECRC。如果使能了ecrc可以通过TLP包头中的TD位来判断是否使用ECRC。接收端会根据TLP的包头和数据重新计算CRC然后和收到的ECRC(发送端计算的)进行比较,不一致则认为数据在传输过程中损坏。发生错误后的处理粗略分为两部分,一个是接收端,另一个是发送端:接收端发生ECRC后会丢弃TLP,不对该请求发送TLP,并将ECRC置位,发送端长时间未接收到返回的TLP会超时,一般会重发request;发送端发送完请求后收到返回的completion TLP,如果此时发生ECRC,会置ecrc位,发送端可以选择重发,亦可以选择通过中断上送os。
错误传递 Data Poisoning(Poisoned Data or error forwarding):指已知TLP Data Payload被破坏的情况下,该TLP仍被发送至其他PCIE设备,此时TLP包头的EP会被置位,只针对带Data psyload的TLP和包头无关,比如memory,Configuration,I/O写。传送错误的包有几个原因:

  1. 便于发送端和系统分析错误,至少发送端知道接收端已经接收到了数据
  2. 便于发现switch中的错误
  3. 有些应用允许接受存在错误的数据,比如音视频数据
  4. 应用层可能会恢复数据,比如单bit的ECC

事务错误

包括:UR,CA,UC(Unexpected completion)和CT(completion timeout)。主要通过返回的completion TLP包头中的Compl.Status告知requester
Alt
UR
5. 请求类型不被当前PCIE设备支持
6. 消息中使用了不支持或者未定义的消息编码
7. 请求的地址空间超出或不在设备的地址空间内
8. 针对completer的IO或者存储映射控制空间(Memory-mapped control space)进行的Poisoned写操作(EP=1)
9. root或者switch的downstream端口接收到针对其二级总线(secondary bus)上的不存在的设备的配置请求
10. endpoint接收到type1型的配置请求
11. completion总使用了保留的completion状态编号
12. 设备(或某个function)处于D1、D2或D3hot电源管理状态时,却接收到了除了配置请求和消息之外的内容
CA
13. completer接收的特殊请求,只有在违背其规则的情况下才能对该请求进行响应
14. 因为某些恒定的错误状态,导致completer无法响应接收到的请求
15. completer接收到存在访问控制服务错误(ACS error)的请求
16. pcie-to-pci桥接收到针对其连接的pci设备的请求,但是该pci设备无法处理该请求
UC
requester接收到的completion和其发出的request不一致
CT

From ChatGPT
PCIe(Peripheral Component Interconnect Express)的Completion Timeout Mechanism(完成超时机制)是用于检测和处理传输操作在设备之间超时的一种机制。
在PCIe传输过程中,当一个设备向另一个设备发送一个请求或命令时,接收设备需要在一定时间内完成相应的操作并发送完成响应(Completion)回来。如果接收设备无法在规定的时间内完成操作并发送完成响应,就会发生超时。
Completion Timeout Mechanism的工作原理如下:
Timeout计时器:
每个PCIe设备都有一个内部的计时器,用于跟踪传输操作的时间。
当设备接收到请求或命令时,计时器开始计时。
Completion Timeout值:
PCIe规范定义了一个Completion Timeout值,它规定了设备完成操作的时间限制。
该值通常是根据系统的需求和性能要求进行配置的。
超时检测和处理:
如果设备无法在规定的时间内完成操作并发送完成响应,就会触发超时检测。
当超时检测到时,设备会生成一个超时错误信号或中断,并通知系统主机。
错误处理:
当系统主机接收到超时错误信号或中断时,它可以采取相应的措施来处理错误。
错误处理的具体方式取决于系统的设计和应用需求,可以是重新尝试传输、重置设备等。
Completion Timeout Mechanism的目的是确保PCIe传输操作在合理的时间内完成,以避免系统出现潜在的问题。它可以帮助系统主机识别和处理超时情况,并采取相应的纠正措施。这样可以提高系统的可靠性和性能,并确保设备之间的正常通信。

在这里插入图片描述

链路流量控制错误(Link Flow Control Errors)

  1. FC初始化时,链路相邻设备无法完成针对任何一个VC的最小FC credits的交换更新
  2. 链路相邻设备交换更新的FC credits超过了最大值(data payload最大2047,header最大127)
  3. 链路相邻设备交换更新时,FC credits为非零值,且该链路的FC credits之前已经被初始化为无限值
  4. 接收端buffer溢出,导致数据丢失

异常的TLP

  1. Data paload超过了最大值
  2. 数据长度与包头中的长度值不一致
  3. 存储地址起始位置跨越了4KB边界
  4. TD(TLP Digest)的值与ECRC使用不一致
  5. 字节使能冲突(byte enable violation)
  6. 未定义的类型值
  7. completion违反了RCB(Read Cmpletion Boundary)值
  8. 针对非配置请求返回的completion中的状态为配置请求重试状态
  9. TC域包含了一个未被分配到当前使能的VC的值(TC filtering)
  10. IO或者陪孩子请求冲突
  11. 中断emulation消息向下发送
  12. TLP前缀错误

PCIE错误报告

PCIE错误报告流程图

PCIE总线错误报告流程

三种错误报告方式

1,Completions:通过completion tlp中的状态位向requestor返回错误信息
2,Poisoned Packet:告知接收端当前TLP的Data Payload已经被破坏
3,Errors Message:向主机报告错误消息

错误消息机制

消息请求头信息如下:
在这里插入图片描述
message code如下表,此时type的[2:0]为000b:
在这里插入图片描述

错误信息列表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述错误类型可以通过Device Control Register中的相应位来使能和禁止,也可以通过Device Status Register查询响应状态:

在这里插入图片描述
在这里插入图片描述

链路错误处理机制

一般发生在物理层与数据链路层通信的过程中。对于downstream设备,如果链路上发生了fatal错误,此时设备不能像root报告。需要upstream设备向root报告错误,为了消除错误,一般需要对链路进行重新训练(retrain),即操作Link Control register相应位写1,同时可以查看Link status register的对应位来确认是否训练成功。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

From ChatGPT:
PCIe链路错误处理机制主要涉及错误检测、错误报告和错误恢复。下面是PCIe链路错误处理机制的一般流程:
错误检测:PCIe链路上的错误可以通过各种机制进行检测,包括物理层错误检测、数据链路层错误检测和传输层错误检测。这些错误可以包括数据传输错误、CRC错误、重传超时等。
错误报告:当检测到链路错误时,错误信息需要被报告给相关的组件或系统。PCIe使用Advanced Error Reporting (AER)机制来报告错误。错误报告可以通过特定的寄存器或消息传递机制来完成,以便通知系统和相关设备。
错误处理:根据错误的性质和严重程度,采取不同的错误处理措施。处理错误的方法可能包括重新传输数据、重新配置设备、发起复位操作等。错误处理的具体步骤和措施取决于错误类型和系统的要求。
错误记录和分析:在错误发生后,系统通常会记录错误信息以便后续分析和故障排除。记录的信息可以包括错误类型、时间戳、错误位置等,以帮助确定错误的原因和解决方案。
需要注意的是,具体的PCIe链路错误处理机制可能会因实现和配置而有所不同。PCIe规范提供了基本的错误处理框架和要求,但具体的实现可能会有所差异。因此,在开发和设计PCIe系统时,需要仔细阅读相关的规范和文档,并根据系统需求和设计目标进行适当的错误处理策略。
在PCIe中,Retrain(重新训练)是一种机制,用于在链路出现错误或不稳定情况时重新建立和稳定链路连接。下面是一些可能需要进行Retrain的情况:
链路错误:当PCIe链路上发生严重的错误或不可恢复的错误时,可能需要进行Retrain。这些错误包括CRC错误、数据传输错误、重传超时等。Retrain可以帮助重新建立正确的链路连接并纠正错误。
环境变化:如果PCIe链路所处的环境发生变化,例如电源供应不稳定、电磁干扰、温度变化等,可能会导致链路的不稳定性。在这种情况下,进行Retrain可以重新建立稳定的链路连接。
重新配置:当PCIe设备或系统进行重新配置时,可能需要进行Retrain。例如,添加或删除PCIe设备、更改PCIe设备的参数或配置等。Retrain可以确保新配置的设备能够正确地与其他设备建立连接。
错误恢复:在某些错误恢复场景中,进行Retrain可以帮助恢复正常的链路通信。例如,在发生重传超时或链路错误后,通过Retrain重新建立链路连接可以恢复正常的数据传输。
需要注意的是,Retrain是一种消耗资源和时间的操作,可能会导致链路中断或延迟。因此,在决定是否进行Retrain时,需要综合考虑系统的要求、错误的严重程度以及Retrain的影响。具体的Retrain触发和操作方式可能因PCIe设备和实现而有所不同,需要参考相关设备和系统的文档和规范。

PCIE的AER

From ChatGPT:
PCIe的AER(Advanced Error Reporting)机制是一种用于检测、报告和处理PCIe设备中发生的错误的高级错误报告机制。它提供了一种标准化的方法来报告和管理PCIe链路和设备的错误,以提高系统的可靠性和可维护性。下面是AER机制的主要特点和功能:
错误检测:AER机制通过监测PCIe链路和设备上的错误条件来进行错误检测。它可以检测到包括数据传输错误、CRC错误、重传超时、链路层错误等各种类型的错误。
错误报告:一旦检测到错误,AER机制会生成错误报告,其中包含了错误的详细信息,如错误类型、错误位置、错误状态等。错误报告通常以特定的格式被写入AER寄存器,供系统软件读取和处理。
错误通知:AER机制可以通过中断或其他机制向系统软件通知错误的发生。这使得系统能够及时获知错误并采取相应的处理措施。
错误处理:AER机制允许系统软件对错误进行处理和响应。根据错误的性质和严重程度,处理措施可以包括重传数据、重新配置设备、发起复位操作等。
层次结构支持:AER机制可以在PCIe设备和系统的层次结构中进行错误报告和处理。错误可以从下层设备向上报告,直到达到RC。
可选性:AER机制是可选的,根据具体的实现和需求可以选择是否支持。如果支持AER,相关的设备和软件需要满足AER规范的要求。
总体而言,AER机制为PCIe系统提供了一种统一和可扩展的错误管理机制,可以及时检测、报告和处理PCIe设备中发生的错误,提高系统的可靠性和可维护性。

AER在已有错误报告基础上,还只支持如下特性:

  • 在登记实际发生错误类型时,粒度、区分度或者叫精确度更好
  • 可以区分各种不可校正错误的严重程度
  • 支持登记包头中的错误
  • 为root通过中断报告接收到的错误消息提供了标准化的控制机制
  • 可以定位错误源在PCIE体系结构中的位置
  • 能够独立地屏蔽某种或多种错误类型的报告
    在这里插入图片描述
    AER capability 结构体如上图所示,AER Capa的ID是0001h。
    在这里插入图片描述
    这里first error pointer为当前错误指针,当相关错误状态更新时,该指针由硬件自动更新。一般情况下,当前错误指针指向的错误优先级最高,需要最先被处理,往往也是其他错误的根源。
    1,Correctable Error
    在这里插入图片描述
    在这里插入图片描述
    相关错误发生时,硬件会将响应bit置1,软件可以写1清除。可以通过写mask相应位为1来屏蔽错误消息上报。
    2,Uncorrectable Error
    在这里插入图片描述
    在这里插入图片描述
    无论这些错误是否会被上报root,相关bit都会被置1。通过修改severity来修改对应错误是否作为fatal(致命)错误处理:0,non-fatal;1,fatal。
    3,TLP包头缓存寄存器
    在这里插入图片描述
    这个4DW的寄存器,用于缓存接收到的,发生uncorrectable error的TLP的包头。包头包含了TLP的类型,地址,传输大小,标记等字段,以及错误的原因和描述。主要作用是方便系统获取错误的详细信息,并进行错误诊断和处理,由于这些错误发生位置、类型和特征等关键信息的提供,对于调试和故障排除非常有用。
    4,Root error command/status register
    在这里插入图片描述
    当root接收到错误报告后,会将响应的状态位置位,并通知os处理。root本身出现故障时也会置对应位。
    在这里插入图片描述
    通过修改上面寄存器相应位使能或者禁止相关错误类型上报os。

5,Error Source Identification Register
在这里插入图片描述
记录错误源的设备id信息(BDF),根据此信息,确定错误源的位置

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值