PCIe RN (Readiness Notification)介绍

2023-10-07 23:30

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




文章目录

  • ✨ 1. 背景介绍
  • ✨ 2. DRS消息
    • 2.1 DRS触发事件
    • 2.2 DRS消息格式
    • 2.3 DRS协议规则
  • ✨ 3. FRS消息
    • 3.1 FRS触发事件
    • 3.2 FRS消息格式
    • 3.3 FRS协议规则
  • ✨ 4. FRS消息队列
    • 4.1 FRS消息规则
    • 4.2 FRS队列扩展能力结构
  • 📚 参考



— 背景介绍 —

✨ 1. 背景介绍

  Readiness Notification,缩写为RN,PCIe 3.1提出并在PCIe 4.0时正式引入。在未使用CRS(Configuration Request Retry Status)时,PCIe设备启动或复位后要等1s左右的时间软件才能发送配置请求,启动CRS后将这个时间缩减到了100ms左右。但CRS使用起来比较繁琐,RN机制在CRS基础上更进一步,是一种更为简便的通知机制,同样能够减少PCIe Device/Function 启动或复位到软件发送配置请求间的等待时间。

  RN机制包括两种通知机制:DRS消息(Device Readiness Status) 和 FRS消息(Function Readiness Status)。该机制是Device/Function进入Configuration-Ready状态的直接标志。

  ✔️ 在PCIe系统实现过程中,强烈建议firmware/software减少一切不必要的延时 ❗️❗️❗️
  ✔️ 强烈建议硬件设计能够舍弃或尽可能减少时延需求,充分利用RN机制提供的便利,依据RN通知来决定所需的时延 ❗️❗️❗️


💡 注:
Configuration-Ready,Function能够对其收到的配置请求回复以带有Success状态的有效Completion,则该Function为Configuration-Ready状态。


— DRS消息 —

✨ 2. DRS消息

2.1 DRS触发事件

  DRS用以指示Device进入了Configuration-Ready状态。以下Device-Level的事件用以触发DRS,称为为DRS事件:

  • 设备退出冷复位
  • 设备退出暖复位、热复位、回环,或设备被关闭
  • 设备退出L2、L3完毕
  • 其他场景,例如端口由DL_Down变为DL_Up状态

💡 注:
DL_Down:DL层通知Transaction层当前端口对端未检测到其他设备;
DL_Up:DL层通知Transaction层当前PCIe链路已连接其他设备。


2.2 DRS消息格式

  DRS协议采用PCI-SIG定义的VDM(Vender-Defined-Mechanism)机制,DRS消息是一种没有数据载荷的Type 1类型的VDM消息,其帧格式如图1所示。

图1 DRS消息帧格式

图1 DRS消息帧格式

  DRS消息的TLP Type为Msg,Fmt为001b,Type为10100b(目的为Local或Receiver),TC[2:0]为000b,Attr[2:0]及Tag字段预留,Message Code为01111111b,Vender ID为0001h,Subtype字段为08h。

  ⚠️ 注意:在未分配Bus Number时Function发出DRS消息是合法的,该DRS消息Requester ID中的Bus Number为0。若此时Switch下行端口开启了ACS来源验证,该消息有可能会触发ACS违例报错


2.3 DRS协议规则

  DRS消息协议遵循以下规则:

  • DRS没有开关机制。对于支持DRS的下行端口而言,其链路能力2寄存器的DRS Supported位必须为1(图2);对于上行端口而言,同样建议将其链路能力2寄存器的DRS Supported位置1,即便该位为0,上行端口也能够发送DRS消息 ✔️。
  • 端口由DL_Down变为DL_Up状态且当前Logical Bus上跟该上行端口相关的所有非VF Function都Ready之后,DRS消息必须由具备DRS能力的上行端口发出。对Type 0类型的 Function非Switch上行端口的Type 1类型Function而言,该Function进入Configuration-Ready后该Function即Ready;对Switch上行端口的Type 1类型Function而言,该Function及其所有二级bus的Function均为Configuration-Ready时,该Function才Ready。
  • Device发出DRS消息后,除非发生了DRS事件,否则跟该DRS对应的Configuration-Ready的非VF Function不应返回CRS Completion消息。
  • 实现了DRS的Switch,所有端口都应支持DRS机制。对Switch下行端口下游的Device而言,Switch发出的DRS消息并不意味着这些Device Ready了,这些Device是否Ready是独立于Switch的。
  • Switch下行端口及RP中需实现DRS Message Received位,以指示其接收到了DRS消息。

图2 Link Capabilities 2 Register

图2 Link Capabilities 2 Register


— FRS消息 —

✨ 3. FRS消息

3.1 FRS触发事件

  FRS用以指示Function进入了Configuration-Ready状态。以下Function-Level的事件用以触发FRS,称为FRS事件:

  • Function Level复位(FLR)
  • D3Hot到D0转换完成
  • SR-IOV系统中PF开启或关闭VF功能

3.2 FRS消息格式

  同DRS一样,FRS协议采用PCI-SIG定义的VDM机制,FRS消息是一种没有数据载荷的Type 1类型的VDM消息,其帧格式如图3所示。

图3 FRS消息格式

图3 FRS消息格式

  FRS消息的TLP Type为Msg,Fmt为001b,Type为10000b(路由到RC),TC[2:0]为000b,Attr[2:0]及Tag字段预留,Message Code为01111111b,Vender ID为0001h,Subtype字段为09h。FRS Reason字段用以指示产生FRS消息的原因,如
表1所示。

表1 FRS Reason
FRS Reason (b)Description
0001接收到DRS消息
0010D3Hot到D0转换完成
0011FLR完成
1000VF开启
1001VF关闭
其他预留

  DRS消息的接收者可有选择性地对消息各字段有效性进行检查确认,若检查不通过则当作畸形包处理。


3.3 FRS协议规则

  FRS消息协议遵循以下规则:

  • FRS消息的Requester ID需指示Readiness状态发生变化的Function。
  • FRS消息中的FRS reason字段需指示Function Readiness状态发生变化的原因。
  • Function发出FRS消息后,除非发生DRS或FRS事件,该Function不应返回CRS Completion消息。
  • 实现了FRS的Switch,所有端口都应支持FRS机制,且上行端口应能够发送FRS消息。
  • SR-IOV系统中PF开启或关闭VF功能时,PF应上行发送FRS消息。
  • RP及RC中应实现FRS排队扩展能力,以收集FRS消息。

— FRS消息队列 —

✨ 4. FRS消息队列

4.1 FRS消息规则

  支持FRS机制的RP及RC事件收集器中必须实现FRS队列扩展能力结构。对RP而言,器FRS消息队列中包含了该RP收到及发出的FRS消息。对RC而言,其FRS消息队列中包含了该RC事件收集器发出及其相关RCiEP发出的FRS消息。

  FRS队列满足以下需求:

  • Reset之后FRS消息队列需为空。
  • 链路比那位DL_Down后RP的FRS消息对应需为空。
  • 若收到FRS消息后或生成FRS消息过程中FRS消息队列非满,需将FRS消息压入队列并将FRS消息接收指示位置一。
  • 若收到FRS消息后或生成FRS消息过程中FRS消息队列已满,则丢弃该FRS消息并将FRS消息溢出位置一。
  • 最陈旧的FRS消息需体现在FRS消息队列寄存器中。
  • 写FRS消息队列寄存器时需移除队列中最陈旧的元素。
  • FRS消息接收指示或溢出位由0变1时,若支持中断应产生对应中断。

4.2 FRS队列扩展能力结构

  FRS队列扩展能力结构如图4所示,该结构中各寄存器释义如下:

  • FRS Queueing Extended Capability Header,FRS队列扩展能力头标(图5),用以指示该组件具备FRS队列能力、能力版本及下一能力的地址偏移。
  • FRS Queueing Capability Register,FRS队列能力寄存器(图6),用以指示FRS消息队列的最大深度及FRS中断的消息号。FRS深度最低为1,可配置的最大深度为4095。
  • FRS Queueing Status Register,FRS队列状态寄存器(图7),用以指示接收到了FRS消息或FRS消息队列溢出。
  • FRS Queueing Control Register,FRS队列控制寄存器(图8),用以开启FRS中断。
  • FRS Message Queue Register,FRS消息队列寄存器(图9),RC/RP事件收集器中既有的最陈旧的FRS消息的Requester ID记录在FRS Message Queue Function ID字段,FRS Reason记录在FRS Message Queue Reason字段。FRS Message Queue Depth用以指示当前队列中的FRS消息数目,0代表队列为空。

图4 FRS Queueing Extended Capability

图4 FRS Queueing Extended Capability

图5 FRS Queueing Extended Capability Header

图5 FRS Queueing Extended Capability Header

图6 FRS Queueing Capability Register

图6 FRS Queueing Capability Register

图7 FRS Queueing Status Register

图7 FRS Queueing Status Register

图8 FRS Queueing Control Register

图8 FRS Queueing Control Register

图9 FRS Message Queue Register

图9 FRS Message Queue Register


— 参考 —

📚 参考

  1. PCI Express Base Specification Revision 5.0 Version 1.0 (22 May 2019)
  2. PCI Express Technology - Comprehensive Guide to Generation1.x, 2.x and 3.0. Mike Jacson, Ravi Budruk, MindShare, Inc.
  3. PCIe® 3.1 & M-PCIe™ Protocol

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



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

相关文章

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

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

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