PCIe AER(一)

2023-12-26 21:40
文章标签 pcie aer

本文主要是介绍PCIe AER(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、AER status register

 1.1  correct error每个bit的介绍(spec 6.2.7) 

        1.1.1 Receiver Error Status

表格后面的reference;

4.2.1.1.3

        If a received Symbol is found in the column corresponding to the incorrect running disparity or if the Symbol does not correspond to either column, the Physical Layer must notify the Data Link Layer that the received Symbol is invalid. This is a Receiver Error, and is a reported error associated with the Port (see Section 6.2 )

4.2.1.2

4.2.4.8

4.2.6

 

         总结:4.2.1.1.3指出如果8b/10b编码中出现symbol的disparity错误或者symbol本身错误,这是一种receiver error;

        4.2.1.2指出,一条规则,一个正确的TLP 在STP symbol和 END/EBD中间至少有18个symbol(1DW = 4symbol,18symbol,如果TLP header是3DW,LCRC 4symbol,还剩下2symbol=1DW 的data; 如果header 是4DW,LCRC是2symbol,就没有data?3DW header 主要是32bit的memory/IO request,Config Request,这些都要携带data,completion呢??? ) 

        4.2.4.8 指出了8b/10b 中receiver error,128b/130b 中的receiver error(8b/10b decode errors, Framing Errors, loss of Symbol lock, Elasticity Buffer Overflow/Underflow, or loss of Lane-to-Lane de-skew. 128b/130b:Framing Errors, loss of Block Alignment, Elasticity Buffer Overflow/Underflow, or loss of Lane-to-Lane de-skew)

        4.2.6 的重点是table 4-20,在LTSSM的哪个阶段会检查receiver error;

        其中有一些概念:symbol,可以理解为固定格式的8bit数据,参考spec table 4-1,附录B,8b/10b编码后会有RD-/RD+(CRD: Current Running Disparity)两种10bit格式,为了保持均衡性,RD后面要跟相反的RD,学习链接:

(2条消息) #PCIe# 为什么引入编码机制?_pcie disparity_那么菜的博客-CSDN博客

        还有receiver error中的其他概念也需要学习(Elasticity Buffer Overflow/Underflow, or loss of Lane-to-Lane de-skew),暂时还没找到具体资料

        其中对于TLP在lane上的传输格式,要区分gen1/gen2和gen3/gen4,因为编码方式不一样,导致了差异性,其中gen1/gen2

         TLP之前的STP&PSN 占3symbol, STP,PSN都是symbol,但是gen3/gen4DLLP或者TLP的开始不再是一个symbol,而是一个token(具体格式,spec fig 4-13),但是为什么gen3/gen4要这样呢,为了block更好对齐吗???

          1.1.2 Bad TLP

        

         总结:LCRC出错

        实际系统测试中,如果链路有问题(phy),但是没有引起其他不可修复错误,这个时候也可能引起其他correctable error置位,比如出现Bad TLP(如果引起replay错误,除非逻辑有问题,不然链路就很差了)

          1.1.3 Bad DLLP

         总结:CRC错误

        1.1.4 REPLAY_NUM Rollover

 

         总结:发送一个TLP,对端回复了nak,这个时候buffer中的TLP会重传一次,acknak机制中有一个2bit的REPLAY_NUM,初始为00b,一般希望是重传后能够被对方接收并回复ack,如果重传4次还没收到ack,那么就链路层进入recovery重新训练一下到L0。重传一次REPLAY_NUM+1,当REPLAY_NUM从11b rolls over 到00b时说明传了第四次了,这个时候就会触发REPLAY_NUM Rollover置位

        1.1.5 Replay Timer Timeout 

        总结:REPLAY_TIMER是传输的时候开始计时,收到ack/nak的时候reset,超时是因为对方没有回应,或者回应晚了(总之就是回应超时了)

         1.1.6 Correctable-Advisory Non-Fatal Error

         这个不具体介绍了,因为涉及到uncorrectable error,简单来讲,就是uncor error可以设置为fatal 或者non-fatal,某几个uncor error发生这种错误时候不想引起host 宕机,默认初始设置为non-fatal error,这时候发生错误引起Advisory Non-fatal error置位;错误置位流程看spec fig 6-2(v、5.0r1.0)

        具体由哪些case,可以具体看spec 6.2.3.2.4 Advisory Non-Fatal Error Cases

1.2、trace分析

       

         分析一个简单的bad TLP ,根据流程图,需要检查的是框图触发error后需要set的寄存器,需要测试的是条件里面能够RW的寄存器; 

 如上图所示,发生Bad TLP错误后(LCRC出错),检测到错误的设备会向rc 发送message(看spec Figure 6-3),后续device status 中相关bit会置位,检查AER status也会置位;对于uncorrectable error,也要检查一下header log(后续再学)

撒花,

这篇关于PCIe AER(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/540869

相关文章

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

FPGA PCIE驱动,windriver驱动 wdf驱动 windows linux PCIE DMA驱动 支持win10 server2016

一:相关介绍         本人一直从事fpga pcie dma驱动开发,可以开发windwos Linux 原生驱动 wdf 或者基于第三方库的windriver。支持win10 win server。提供稳定的驱动库,或者源码,开发者可以不关心底层驱动直接使用封装的库。 二:PCIE 驱动开发的稳定性和高效性: 本驱动库均已经进行了实际交付使用,通过了严格的jun

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(7)

接前一篇文章:《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(6) 7.1 数据链路层的组成结构 7.1.1 数据链路层的状态 3. DL_Active状态 当数据链路层处于DL_Active状态时,PCIe链路可以正常工作。此时数据链路层可以从事务层和物理层正常接收和发送TLP、并处理DLLP,此时数据链路

【精讲】PCIe基础篇——Non-Prefetchable Prefetchable MMIO

MMIO 有两种, Non-Prefetchable MMIO:非预取内存空间 Prefetchable MMIO :可预取内存空间 Prefetchable MMIO:将MMIO的一个区域设置为可预取的,允许CPU提前获取该区域中的数据,以预测请求者在不久的将来可能需要比实际请求更多的数据。对数据进行这种小规模缓存是安全的,因为读取数据不会改变目标设备上的任何状态信息。也就是说,

【精讲】PCIe基础篇——Memory IO 地址空间

在早期的PC中,IO设备中的内部寄存器/存储是通过IO地址空间(由Intel定义)来访问的。然而,由于与IO地址空间相关的一些限制和不良影响(我们在这里不讨论),IO地址空间很快就失去了软件和硬件供应商的青睐。这导致IO设备的内部寄存器/存储被映射到内存地址空间(通常称为Memory mapped IO,或MMIO)。然而,由于早期的软件是使用IC地址空间来访问IO设备上的内部寄存

【精讲】PCIe基础篇——BAR(Base Address Register)详解

一、为什么需要BAR         系统中的每个设备中,对地址空间的大小和访问方式可能有不同的需求,例如,一个设备可能有256字节的内部寄存器/存储,应该可以通过IO地址空间访问,而另一个设备可能有16KB的内部寄存器/存储,应该可以通过基于MMIO的设备访问。哪些地址应该使用哪种方式(IO或Memory)来访问它们的内部位置,这是系统软件(即BIOS和OS内核)的工作。因此设备必须为系统软件

PCIe物理层LTSSM状态机解析

目录 1、Detect 2、Polling 3、Configuration 4、L0 5、Recovery 6、L0s/L1/L2 7、Hot Reset 8、Disabled 9、Loopback 在PCIe链路可以正常工作之前,需要对PCIe链路进行链路训练,在这个过程中,就会用LTSSM状态机。LTSSM全称是Link Training and Status St

PCIe 复位:必须了解的PERST#

1.什么是PERST#    PERST#作为 Fundamental Reset,是直接通过边带信号PERST#(PCI Express Reset)产生的。Fundamental Reset会复位整个PCIe设备,初始化所有与状态机相关的硬件逻辑,端口状态以及配置空间中的配置寄存器等(every state machine and all the hardware logic, port s

PCIe Gen4 ltssm协商过程

本章节我们以gen4 Endpoint为例介绍PCIe ltssm(链路状态机)协商过程。 正常PCIe设备链路状态跳变为   detect-->polling-->configuration-->L0(gen1)-->recovery-->L0(gen3)-->recovery-->L0(gen4)。 需要注意的是在进入configuration状态之前,因为物理层还未收到有效数据(例如在P

BIOS工程师标准作业书 之 PCIE 问题如何处理

bios 工程师作为最基层的岗位,做事情一定要按部就班,肯定不能随意发挥。PCI 作为服务器中最主要的总线,也是最容易出bug 的地方。所以我整理了这篇文章。 当前x86系统PCIe架构中面临的挑战以及问题 系统设计中使用了不同供应商的硬件模块,不同的硬件模块都有各自的错误处理和报错机制。 在这么复杂的系统中,如何快速定位故障的模块,并使系统重新健康的上线工作 如何在复杂的系统中,找到问题