PCIe RN (Readiness Notification)介绍_pcie readiness notification(1)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


— 背景介绍 —

✨ 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

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值