PCIe RAS

2023-05-16

对于Linux系统针对RAS的AER错误处理机制完成

PCIe RAS简单来讲就是PCIe的错误检测、纠正以及汇报的机制。它可以方便我们准确的定位,纠正和分析错误增强系统的健壮性和可靠性。

PCIe错误的分类

PCIe错误分为可校正的错误(Correctable)和不可校正的错误(Uncorrectable error), Uncorrectable又分为致命的(Fatal)和非致命的(Nonfatal)。

可校正的错误 :可校正错误可以自动地被硬件识别并被自动的校正或恢复。 致命错误:这类错误导致链路和硬件异常只有通过系统软件进行复位操作实现恢复。 非致命错误:这类错误可能会导致特定的传输变得不可靠,但是链路和硬件的其他功能不受影响。设备驱动软件提供恢复机制,并不会影响到链路和其他设备的运行。

PCIe错误范围

PCIe总线是分层实现的,它包含多个层次,从上到下分别是应用层,事务层, 数据链路层,物理层。其中应用层并不是PCIe Spec所规定的内容,另外三层都是PCIe Spec明确规范的。按照层来划分,每个层都有相应的错误。大部分的错误集中在事务层。

事务层错误主要有:ERCR校检失败,数据损坏,异常的TLP,不支持的请求,Completer Abort,不对应的返回包,返回包超时。

1. ERCR:主要用于含有Switch的PCIe系统中,这个feature是可选的,只有支持AER的设备才具有这一功能。软件可以通过AER的控制寄存器enable。TLP包头中的TD位用来表示该TLP是否使用ECRC,1表示使用,0表示没有使用。在TLP包头中有两位不参与到ECRC的计算,TYPE中的bit0和EP,它们也被称为可变位,计算ECRC时时钟认为这两位为1.

a. 当接收端收到的TLP中存在ECRC错误时,它不会返回TLP Completion,并且会将配置空间的ECRC错误状态位设置起来。发送端由于长时间接收不到Completion会产生超时错误,软件有可能会选择重发。

b. 当发送端发送完请求后收到了来自接收端返回的TLP Completion,如果该TLP中存在ECRC错误,发送端会将配置空间中的状态寄存器的ECRC错误状态置位。除了标准的错误汇报机制,发送端也可以选择通过Function-specific interrupt汇报错误给设备驱动程序。发送端也可以重发之前的request。 以上两种情况如果使能了错误汇报功能,系统就会收到不可修复的非致命的消息。

2. 数据损坏:也被称为错误传递,指的是TLP Data Payload被破坏的情况下,该TLP仍然被发送给其它的PCIe设备。

为什么Data payload已经被破坏了还需要发送给其它的设备呢?原因如下:

a. 用于发送端和系统分析错误。

b. 用于发现Switch或者是其它桥设备中的错误。

c. 有些应用允许接收存在错误的数据。

d. 数据可以通过应用层恢复。

3. 异常的TLP 主要包含以下几种可能得错误:

a. Data Payload超过了最大值

b. 数据长度与包头中的长度值不一致

c. 存储地址起始位置跨越了4KB边界

d. TLP Digest的值与ECRC是否使用不一致

e. 字节使能冲突

f. 未定义的类型值

g. Completion违反了Read Completion Boundary值

h. 针对非配置请求返回的Completion中的状态为配置请求重试状态

i. TC域包含了一个未被分配到当前使能的VC的值

j. IO或者配置请求冲突)

k. 中断Emulation消息向下发送

l. TLP前缀错误

4. 不支持的请求主要包括:

a. 请求类型不被当前PCIe设备支持

b. 消息中使用了不支持或者未定义的消息编码

c. 请求的地址空间超出或者不在设备的地址空间中

d. 针对Completer的IO或者存储映射控制空间进行的Poisoned写操作

e. Root或者Switch的Downstream端口接收到针对其二级总线上的不存在的设备的配置请求

f. Endpoint接收到Type1型的配置请求

g. Completion中使用了保留的Completion状态编码

h. 设备处于D1、D2或者D3hot电源管理状态时,却接收到了除了配置请求和消息之外的内容

5. Completer Abort主要包括:

a. Completer接收的特殊请求,只有在违背其规则的情况下才能对该请求进行响应

b. 因为某些的永久性的错误状态,导致Completer无法响应接收到的请求

c. Completer接收到存在访问控制服务错误的请求

d. PCIe-to-PCI桥接收到针对其连接的PCI设备的请求,但是该PCI设备无法处理该请求

6. 非预期的Completion主要有:Requester接收到的Completion和其发出的Request不一致。

7. 返回包超时:PCIe设备都支持Completion超时定时器,有一个设备控制寄存器2用于查看和设置超时时间。

数据链路层错误主要有:LCRC校检失败,序列号,DLLP中的16-bit CRC校检失败,链路层协议错误。

物理层错误主要有:8b/10b编解码异常,Framing异常,Elastic Buffer错误,起始字符失锁。

不同层的错误对应的错误种类如下表所示:

PCIe错误的汇报

PCIe总线有三种错误报告方式:

  1. 通过Completion中的状态位向Requestor返回错误信息。事务错误主要包括不支持的请求(Unsupported Request)、Completer Abort、非预期的Completion和Completion超时。该错误类型主要通过返回的Completion TLP包头中的Compl. Status通知请求者。

2. Poisoned Packet也被称为错误传递(Error Forwarding),指的是在已知TLP Data Payload被破坏 (Corrupted)的情况下,该TLP仍然被发送至其他的PCIe设备。此时,该TLP包头的EP位(Error Poisoned)被置位为1,表明该TLP已经被破坏。

3. Error Message(错误消息),用于向主机端报告错误信息。

PCIe错误处理机制

  1. 基本的错误处理机制。
    1. 兼容PCI总线寄存器的错误处理机制。PCI的错误处理机制是通过SERR#和PERR#信号实现的,其中PERR#主要对应的是普通数据奇偶校检错误(Parity Error),而SERR#主要指的是系统错误。PCIe为了兼容PCI的PERR# SERR#, PCIe会自动将CA、UR和Poisoned TLP转换为对应的错误信息将它的错误映射到了原来的PCI的配置空间寄存器上。寄存器描述如下图所示:
    1. 基于PCIe新增的寄存器的错误处理机制。PCIe通过Capability结构提供了一些新增加的寄存器,PCIe 的错误类型可以通过设备控制寄存器去enable/disable。出错之后可以通过设备状态寄存器查询出错原因。
  1. 高级错误报告机制(Advanced Error Reporting ) 该功能是可选的。高级错误报告机制使用了一组专用的配置寄存器。借助AER可以获得更多的错误信息,有助于软件定位错误源和分析错误原因。在已有的PCIe错误报告机制的基础上,它提供下述的特性:
    1. 在登记实际发生的错误类型时,有更好的粒度
    2. 区分Uncorrectable error的严重程度
    3. 支持登记包头中的错误
    4. 为Root通过中断报告接收到的错误消息提供了标准化的控制机制
    5. 可以定位错误源在PCIe体系结构中的位置
    6. 能够独立地屏蔽错误类型


ECRC需要AER的支持,可以通过AER的控制寄存器enable。


First Error Pointer 是由硬件更新,我们可以通过该指针在Error Status寄存器中方便的找到对应的错误。
AER包含高级可纠正错误处理以及高级不可纠正错误处理两个部分。可纠正和不可纠正分别有一组Status 和Mask寄存器用于读取状态和控制使能。只要当相关错误发生后,不管有没有被使能,硬件会自动地将Status寄存器对应bit置1。


另外软件可以通过高级不可修正错误严重度寄存器(Advanced Uncorrectable Error Severity Register)来修改不可校正错误是否被作为致命的(Fatal)错误处理。


AER结构中定义了一个4DW的Header Log Register,用于缓存收到的不可修正错误的TLP的包头方便进一步的分析,它支持如下的错误类型:


在PCIe总线中,所有的设备发生错误后都会讲错误报给给RC,RC收到错误消息以后根据设定选择是否以及如何向系统报告错误。软件可以通过设置根命令寄存器来使能或者禁止相关的错误是否被报告给系统。


这些错误消息会反应在根错误状态寄存器中。


另外高级错误源ID寄存器中记录了产生错误的设备的BDF信息,通过该信息我们可以准确的定位到具体的设备。


PCIe错误处理的流程如下图所示:


下图是软件处理AER错误的一个例子,如图所示,RC是0:28:0,它被配置成当收到Correct/Uncorrect 错误消息时会生成中断通知系统。假设这时我们收到了一个中断,这时错误处理程序被调用。

    1. MSI/MSIX中断,每个设备是惟一的,所以错误处理程序知道这时从RC 0:28:0产生的中断。
    2. 错误处理程序读取0:28:0 AER结构中根错误状态寄存器获得错误的类型,读到的是0800_007Ch,它表示收到了ERR_FATAL 和 ERR_NONFATAL的错误,而且第一个收到的error是 ERR_FATAL。
    3. 读取Source ID寄存器得到0500_0000h,这表示第一个产生ERR_FATAL错误消息的是BDF 5:0:0。
    4. 读取BDF 5:0:0 Uncorrectable Error Status得到0004_1000h表示该设备至少收到了一个Malformed TLP和一个Poisoned TLP。
    5. 读取BDF 5:0:0的Advanced Error Capability and Control 寄存器的First Error Pointer栏位得到12h表示第一个收到的错误是Malformed TLP (bit 18d)读取Header Log寄存器

参考:

《PCI Express Technology》

《PCI Express 体系结构导读》

PCIe扫盲——高级错误报告AER: http://blog.chinaaet.com/justlxy/p/5100057839

PCIe error logging and handling on a typical SoC: https://www.design-reuse.com/articl

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCIe RAS 的相关文章

  • pcie标准_PCIe 5.0 标准

    PCIe规范由PCISIG组织进行发布的 xff0c PCISIG其英文全称为 xff1a Peripheral Component Interconnect Special Interest Group 外围部件互连专业组 xff0c 简
  • windows PCIe 工具: TeleScan

    TeleScan PE for Windows 用户可以通过TeleScan PE来扫描系统中的PCI PCIe设备 xff0c 并提供了读写其配置空间中的寄存器的功能 download Teledyne LeCroy PCI Expres
  • pcie的rc模式和ep模式有什么区别?

    pcie的rc模式和ep模式有什么区别 xff1f RC PCI Express root complex 在RC模式时 xff0c 使用PCIE类型1配置头 xff1b EP endpoint device 工作方式 在EP模式时 xff
  • PCIe扫盲系列博文连载目录篇

    PCIe扫盲系列博文连载目录篇 xff08 第一阶段 xff09 Felix 电子技术应用 AET 中国科技核心期刊 最丰富的电子设计资源平台 chinaaet com 1 前言篇 xff1a PCIe扫盲 PCIe简介 xff1a htt
  • PCIe MSI-X 中断 设置 过程

    主机侧初始化 msi span class token operator span map span class token operator 61 span span class token operator lt span span c
  • PCIe总线引脚定义

    然后看一下PCI E的接口定义 这就是显卡插口前面的那段短的金手指 xff0c 就是这段 xff1a 这一段负责供电 SMBus和感知设备是否插上 xff0c 对于数据的传输作用不大 xff0c 所以不用深究 用浅绿色标出来的是检测插槽上设
  • [PCIe] SR-IOV (单根虚拟化) 及linux驱动浅析(device的PF和VF及其驱动)

    网上从服务器和虚拟化层面介绍SR IOV应用的文章很多了 本文重点从支持SR IOV的设备 EP 及其驱动来讨论 对于SR IOV的设备 EP 来说 无非就是一个device通过物理功能 PF 虚拟出关联的若干个虚拟功能 VF host的驱
  • 【PCIe】Linux下PCIe驱动开发与学习

    目录 1 PCIe概述 2 pcie总线的拓扑结构 3 PCIe配置空间 3 1 PCI标准配置空间头 0 64 bytes 3 2 PCI capbility结构 64
  • PCIE专题学习——1.0

    PCIE基础概念 一 1 PCIe的概念 PCIe是一种全双工 差分 端对端 串行告诉接口协议 PCI是并行处理的机制 差分可以提高传输的稳定性 全双工意味着发送端在发送的同时 也可以接收 问题在于串行会比并行处理快吗 当然不一定 这和系统
  • Nvidia Xavier Nx平台PCIE速率调整调试记录

    1 前言 如何增加最大速度的pcie上的jetson xavier 因为被限制在2 5 GT s Xavier似乎可以增加到8 GT s 使用Jetpack 4 5 0004 00 00 0 PCI bridge NVIDIA Corpor
  • M.2/sata2.0/3.0接口,PCI-E1.0/2.0/3.0/4.0x2x4x8x16速率汇总

    B站 硬件科普 PCIe到底是个什么东西 他在电脑里是干什么的 PCIE2 0 PCIE3 0 PCIE4 0 PCIE5 0接口的带宽 速率计算 sata2和sata3接口区别 https diy pconline com cn grap
  • PCIe热插拔:通知试热插拔&暴力热插拔

    PCIE热插拔 某些特殊的应用场合可能要求PCIe设备能够以高可靠性持续不间断运行 为此 PCIe总线采用热插拔 Hot Plug 和热切换 Hot Swap 技术 来实现不关闭系统电源的情况下更换PCIe卡设备 热切换和热插拔的主要区别是
  • PCIe专题学习——2.4

    之前我们讲了对PCIe的一些基础概念做了一个宏观的介绍 了解了PCIe是一种封装分层协议 packet based layered protocol 主要包括事务层 Transaction layer 数据链路层 Data link lay
  • 【WiFi】wifi芯片架构与原理说明

    目录 1 概述 2 芯片架构 3 工作原理 4 总结 1 概述 WiFi芯片是一种用于无线网络通信的集成电路 它负责将数据转换为无线信号并进行传输 下面是关于WiFi芯片架构和原理的简要说明 2 芯片架构 芯片架构 WiFi芯片通常由以下几
  • 说一说PCIe5.0的速率和带宽

    最近 有一个并不肤浅的同事问了我一个问题 U 2的带宽是多少 为什么有人说U 2最大是32GB s 首先 从PCIe5 0 CEM规范里我们查到 对于一条lane来说 PCIe5 0 的Basic bandwidth为32 0 GT s 这
  • STM32 基础系列教程 50 – MbedTls

    前言 mbed TLS 以前称为PolarSSL 是TLS和SSL协议的实现 并且需要相应的加密算法和支持代码 这是双重许可与Apache许可证 2 0版 与GPLv2许可也可 网站上指出 mbed TLS的目标是 易于理解 使用 集成和扩
  • SATA M.2 NGFF PCIE AHCI NVME SSD固态硬盘的接口、总线和协议区分

    总线 协议 说接口之前先说总线 民用产品的硬盘总线多为 SATA 和 PCIe SATA 总线只能使用 AHCI 协议 NVME 对比 AHCI 的优势在于 低延时 低功耗 更适合固态硬盘 PCIe总线 可以使用 AHCI 也可以使用更高效
  • 【电子技术】什么是LFSR?

    目录 0 前言 1 数学基础 1 1 逻辑异或 1 2 模2乘法 和 模2除法 2 线性反馈移位寄存器LFSR 3 抽头和特征多项式 4 阶线性反馈移位寄存器实例 0 前言 线性反馈移位寄存器 Linear Feedback Shift R
  • 从 x86 CPU 生成 64 字节读取 PCIe TLP

    将数据写入 PCIe 设备时 可以使用写入组合映射来提示 CPU 应生成针对该设备的 64 字节 TLP 是否可以对读取做类似的事情 以某种方式提示 CPU 读取整个缓存行或更大的缓冲区 而不是一次读取一个字 英特尔有关于从视频 RAM 复
  • 在用户空间中启用写组合 IO 访问

    我有一个带有用户空间驱动程序的 PCIe 设备 我通过 BAR 向设备写入命令 这些命令对延迟敏感并且数据量很小 64 字节 因此我不想使用 DMA 如果我使用以下命令重新映射内核中 BAR 的物理地址ioremap wc然后将64字节写入

随机推荐

  • 怎么在keil官网上下载芯片固件包(*.pack)

    第一步 xff1a 登录keil官网 www keil com 第二步 xff1a 点击 Product 第三步 xff1a 点击 ARM development tools 第四步 xff1a Public software Packs
  • UCOS开发手册中关于OSQPend()函数讲

    转自 xff1a http www openedv com thread 44168 1 1 html UCOS开发手册中 第十章 UCOSIII消息传递 章节中关于等待消息队列的函数OSQPend 讲解有误 xff0c OSQPend 函
  • ucos-ii学习笔记——信号量集(事件标志组)的原理及使用

    xfeff xfeff ucos ii学习笔记 信号量集 事件标志组 的原理及使用 Created on 2012 10 8 Author zhang bin 学习笔记 for ucos ii PC redesigned by zhang
  • 低速容错CAN:ISO 11898-3 与ISO 11519-2标准两者关系

    xfeff xfeff 有关 低速容错CAN xff1a ISO 11898 3 与ISO 11519 2标准两者关系 最近有几个客户问到这个问题 xff0c 对应的产品是否兼容 于是上ISO官网查看发现并无两者的关系 xff0c 不过在网
  • CAN总线仲裁机制--对于多个节点同时发送相同ID的报文

    最近在学习CAN总线 xff0c 原先一直不太明白 xff0c 若有A xff0c B 2个节点同一时刻一起向总线上发送数据 xff0c CAN总线是怎么仲裁的 xff0c 来让A xff0c B其中一个节点退出 xff0c 保证高优先级的
  • roslaunch mavros px4.launch fcu_url=xxxx到底做了什么

    roslaunch mavros px4 launch fcu url 61 xxxx到底做了什么 一言以蔽之 xff0c roslaunch mavros px4 launch fcu url span class token opera
  • PX4,ROS,gazebo仿真

    https gitee com bingobinlw some tree master Overview Simulation Px4 command Slam map image process planning P200 AmovCar
  • 飞行控制PID算法——无人机飞控

    PID控制应该算是应用非常广泛的控制算法了 小到控制一个元件的温度 xff0c 大到控制无人机的飞行姿态和飞行速度等等 xff0c 都可以使用PID控制 这里我们从原理上来理解PID控制 PID proportion integration
  • Ubuntu20.04桌面版图文安装(超详细)

    Ubuntu20 04桌面版图文安装 xff08 超详细 xff09 一 准备工具 VMWare Workstation15 Pro xff1b ubuntu 20 04 desktop amd64 iso xff1b 二 虚拟机初始配置
  • 嵌入式芯片概念梳理 - CPU、MCU、MP、DSP、FPGA、ASIC

    CPU中央处理单元包含基本的运算单元AUL xff0c 存储单元cache等基本资源 xff0c 实现硬件设备的基本控制功能 中央处理器作为一个普世概念 xff0c 实际根据具体数据处理功能方向不同 xff0c 细分位DSP MCU和MP
  • UART、I2C、USB、SPI、CAN、Jtag、PCI/PCIE协议汇总

    协议通信方式UART串行全双工I2C SPI是串行外设接口 xff08 Serial Peripheral Interface xff09 的缩写 SPI是一种高速的 全双工 同步的通信总线 xff0c 并且在芯片的管脚上只占用四根线 xf
  • busybox概述

    busybox是什么 xff1f xff08 1 xff09 busybox是Linux上的一个应用程序 application xff0c 即只有一个ELF文件头 xff08 2 xff09 它整合了许多Linux上常用的工具和命令 xf
  • SR-IOV

    SSR IOV是Single Root I O Virtualization的缩写 在虚拟机中 xff0c 一切皆虚拟 比如网卡 xff0c 虚拟机看来好像有一个真实网卡 xff0c 但是这个网卡是宿主机虚拟出来的硬件 xff0c 也就是一
  • 希尔排序算法

    本章介绍排序算法中的希尔排序 内容包括 xff1a 1 希尔排序介绍 2 希尔排序图文说明 3 希尔排序的时间复杂度和稳定性 4 希尔排序实现 4 1 希尔排序C实现 4 2 希尔排序C 43 43 实现 4 3 希尔排序Java实现 转载
  • 归并排序算法

    概要 本章介绍排序算法中的归并排序 内容包括 xff1a 1 归并排序介绍 2 归并排序图文说明 3 归并排序的时间复杂度和稳定性 4 归并排序实现 4 1 归并排序C实现 4 2 归并排序C 43 43 实现 4 3 归并排序Java实现
  • 拓扑排序算法

    拓扑排序介绍 拓扑排序 Topological Order 是指 xff0c 将一个有向无环图 Directed Acyclic Graph简称DAG 进行排序进而得到一个有序的线性序列 这样说 xff0c 可能理解起来比较抽象 下面通过简
  • 线性时不变系统输出调节问题

    线性时不变系统输出调节问题 最近在学习 Nonlinear output regulation 中的linear output regulation时 xff0c 对于linear robust output regulation的问题时
  • MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

    MinGW w64安装教程 著名C C 43 43 编译器GCC的Windows版本 MinGW w64安装教程 著名C C 43 43 编译器GCC的Windows版本 本文主要讲述如何安装 C语言 编译器 MinGW w64 xff0c
  • RT-Thread实时操作系统简介

    目录 一 概述 二 架构 三 版本选择 四 内核启动流程 五 自动初始化机制 六 内核对象模型 七 I O设备模型 1 框架 2 设备驱动使用序列图 3 设备类型 八 FinSH控制台 九 ENV工具 1 menuconfig 2 Scon
  • PCIe RAS

    对于Linux系统针对RAS的AER错误处理机制完成 PCIe RAS简单来讲就是PCIe的错误检测 纠正以及汇报的机制 它可以方便我们准确的定位 xff0c 纠正和分析错误增强系统的健壮性和可靠性 PCIe错误的分类 PCIe错误分为可校