PCIE链路训练-状态机描述1

状态机描述

Config.linkwidth.start

1.

1Linkup = 0 + 状态机没有执行链路宽度的升级upconfiguration of the Link width):那么tx会在所有activedsp上发送TS1,其中link num为具体内容,lane num为pad;

(2)upconfigure_capable为1(这个变量为1一般表示上层逻辑执行链路宽度的减少),并且状态机没有执行upconfiguration of the Link width,那么自从进入到recovery状态之后,并且在当前子状态下收到了两个连续的TS1,其中link num和lane num均为pad,此后检测到退出Electrical Idle,那么tx会在inactive Lane上发送TS1,其中link num为具体内容,lane num为pad;

那么什么是activelane呢?-dsp/usp均满足

从Polling状态进入此子状态时,所有检测到接收端的通道会被视作Active Lane。从Recovery状态进入此子状态时,所有历经 Configuration.Complete 状态的链路上的通道,都会被视作Active Lane。

另外注意一点,DSP必须在发送的TS1中通告自身所有支持的速率,其中也需要包括端口不打算使用的速率。

此外针对usp,还需要注意,如果此时的状态跳转不是由 LTSSM 超时触发的,那么此时发送方应该在 Configuration 状态中发送的 TS1 中置位 Autonomous Change 比特 (Symbol 4, bit 6) ,表示发送方出于自身(Autonomous )原因想要改变链路宽度,从而进入 Configuration 状态。

2.

1dsp

Linkup = 1 + 状态机执行链路宽度的升级upconfiguration of the Link width):那么tx会在那么会在下列三类通道上发送link numlane num均为padTS1.

A:当前工作的通道上;

B:想要激活的非工作通道;

C:自从进入recovery状态之后已经收到两个连续的TS1接收到TS1的通道上,并且,在该通道上检测到退出Electrical Idle

  Usptx会在下列三类通道上发送link numlane num均为padTS1.

A:当前工作的通道上;

B:想要激活的非工作通道;

C如果upconfigure_capable为1,针对inactive的lane,并且这个lane自从进入recovery状态之后已经收到两个连续的TS1接收到TS1的通道上,并且,在该通道上检测到退出Electrical Idle的lane。

注意三点:

A:如果 USP 打算恢复链路宽度,LTSSM 首先等待下述两个条件任意满足一个:所有待激活的通道上都接收到两个连续的链路编号有效,通道编号为填充符号的TS1或者任意一个待激活通道进入本状态超过1ms

B:为了避免将链路的宽度配置小于正常宽度,协议建议如果在多通道链路上发现某些通道出现错误或者失去 Block Alignment 状态,那么延迟一段时间后再进行本过程。8b/10b 编码时等待至少2个TS1,128b/130b 编码时至少等待34个 TS1,但任何情况下不要等待超过1ms。

C:在激活不工作的通道后,发送端必须等待发送共模电压(Tx common mode voltage)稳定,才能退出电气空闲状态并开始发送TS1

2那么什么时候开始发送link num为具体数值但是lane numpadTS1在满足以下条件之一即可

Dsp

A在发送TS1的lane上收到了收到了两个连续的TS1,并且link num和lane num均为pad;

B:1ms超时;

另外注意两点,在激活不工作的通道时,发送端必须等待发送共模电压(Tx common mode voltage)稳定,才能退出电气空闲状态并开始发送TS1;对于组合为同一链路的通道,他们的链路编号必须相同。只能在支持多链路配置的不同链路之间才可以分配不同的链路编号。

Usp

如果一些通道接收到了两个连续的链路编号有效,通道编号为填充符号的TS1 usp选取其中一个接收到的链路编号作为这些通道的链路编号,并在所有收到链路编号非空的TS1的通道上,回复采用该链路编号的TS1,通道编号继续使用填充字符。对于剩下的通道,如果他们检测到了接收方,但是还没有收到链路编号,那么则发送链路编号和通道编号都采用填充符号的TS1

3.针对支持crosslinks特性:

Dsp

会在所有detect阶段检测为receiver的lane上先发送16~32个TS1,其中link num为具体数值,lane num为pad。在此之后,任意一个lane在收到两个连续的TS1,其中link num为具体数值,lane为pad,随后dsp转变为usp(为了根据timeout机制决定谁才是真正的dsp,如果 DSP 接收到的第一批 TS1 中,链路编号就已经不是填充符号了,那么 DSP 通过这种现象就意识到存在交叉链路(Crosslink),链路对端设备此时也是 DSP。针对这种情况,面向下游的通道将转换为面向上游通道,DSP 等待长度随机的超时时间后,重新进入 Configuration.Linkwidth.Start 状态,只不过此时该通道将变成面向上游的通道)。并且转变为Configuration.Linkwidth.Start的条件变为和usp一样。

注意两点,针对两端都想变为dsp的情况,可以让双方都先变为usp,随后双方都随机等一个时间,超时后usp转变为dsp。因为双方的超时时间长度是不同的,最终将有一个端口成为 DSP ,而另一个端口仍然是 USP,这样一来训练就可以继续进行。超时时间长度必须是随机,这样即使链路双方的端口实现完全相同,也不会出现死锁的情况;如果支持交叉链路特性,那么在接收的 TS1 的链路编号从PAD转换到非PAD符号的过程中,不允许出现TS2打断这个过程。

Usp:

对于支持交叉链路特性的 USP 来说,当 LinkUp = 0b 时,需要在所有检测到接收端的通道上至少发送 16-32 个 TS1,其中链路编号和通道编号采用填充符号。随后任何usp的一些通道上接收到了两个连续的链路编号有效,通道编号为填充符号的TS1,那么有如下操作和条件:

A:tx持续发送TS1,link num和lane num均为pad;

B:如果任意通道接收到了两个连续的链路编号有效,通道编号为填充符号的TS1 usp选取其中一个接收到的链路编号作为这些通道的链路编号,并在所有收到连续两个链路编号非空的TS1的通道上(lane编号为lane),回复采用该链路编号的TS1,通道编号继续使用填充字符。对于剩下的通道,如果他们检测到了接收方,但是还没有收到链路编号,那么则发送链路编号和通道编号都采用填充符号的TS1下一个状态是 Configuration.Linkwidth.Accept。

C:为了避免将链路的宽度配置小于正常宽度,协议建议如果在多通道链路上发现某些通道出现错误或者失去 Block Alignment 状态,那么延迟一段时间后再进行本过程。8b/10b 编码时等待至少 2 个 TS1,128b/130b 编码时至少等待 34 个 TS1,但任何情况下不要等待超过 1ms。

注意,如果不满足上述条件,经过Tcrosslink时间后,16-32个TS1,其中linknum和lane num均为pad,usp变为dsp,下个状态变为Configuration.Linkwidth.Start(相当于重新开始)。

Config.linkwidth.accept

Dsp

dsp提议通道编号值。如果一条链路可以由多个通道合并组成,这些通道都可以收到两个连续的,链路编号值相同的 TS1那么dsp会为他们发送链路编号一致,但是通道编号各不相同的TS1对于剩下的通道,如果他们没有接收到TS1,那么发送链路编号和通道编号都采用填充符号的TS1,不能打断原有发送过程。

为了避免将链路的宽度配置小于正常宽度,协议建议如果在多通道链路上发现某些通道出现错误或者失去 Block Alignment 状态,那么延迟一段时间后再进行本过程。8b/10b 编码时等待至少2个TS1,128b/130b 编码时至少等待34个TS1,但任何情况下不要等待超过1ms。-dsp/usp均满足

1.变量变化

A:在满足如下条件的时候use_modified_TS1_TS2_Ordered_Set变为1:

(1)LinkUp = 0b -dsp/usp均满足

2)自从进入polling状态以来,tx已经在polling/Configuration状态下发送Modified TS1/TS2,在TS1/TS2中设置symbol5中的Enhanced Link Behavior Control field为‘b11。针对up端,要求在所有的TS1/TS2中发送这样的序列

(3)导致从polling.configuration转变到configuration状态的那8个连续的TS2的data rate中设置了Enhanced Link Behavior Control field位为’b11(symbol5)+TS2中的32.0 GT/s data rate is supported设为1。注意这8个TS2要求是连续的,并且是在所有lane上都收到才能满足从polling.configuration转变到configuration状态。-dsp/usp均满足

B:在满足如下变化Flit_Mode_Enabled变量设为1:

(1)LinkUp = 0b-dsp/usp均满足

2)自从进入polling状态以来,tx已经在polling/Configuration状态下发送相关TS1/TS2,在其中TS1/TS2中设置symbol4中bit0,也就是Flit Mode Supported bit中的Data Rate Identifier为‘b1。-dsp/usp均满足

(3)导致从polling.configuration转变到configuration状态的那8个连续的TS2的data rate中设置了flit mode supported位(也就是symbol4的bit0)为1。注意这8个TS2要求是连续的,并且是在所有lane上都收到才能满足从polling.configuration转变到configuration状态。-dsp/usp均满足

usp

usp在从dsp提供的链路编号中选择其中一个,填充至所有通道的TS1中,反馈发送给dsp。这里所有通道指的是那些所有接收链路编号不为填充字符TS1的通道。在所有剩余的通道中,如果检测到对端接收方,但是没有接收到有效链路编号的通道,将继续发送链路编号和通道编号采用填充符号的TS1

如果一个link可以使用具体数值的link num号来实现configured link(注意,这个link num来自于收到的两个连续的TS1,并且这两个TS1中的link numlane num均不为pad,两个连续的TS1中的link numlane num前后一致),那么TS1会发送和收到的TS1link num/lane num一致或不一致的TS1(针对不一致的TS1往往是存在于lane reversed)。

另外注意三点:

1)收到的TS1既可以是标准的TS1,也可以是Modified的TS1(Modified的TS1只有在use_modified_TS1_TS2_Ordered_Set为1的情况下);

2)针对lane进行编号的时候,需要注意,lane num必须要针对连续的groupinglane进行连续的编号,针对没有收到TS1lane,相当于这个lane不属于一个groupinglane。剩下的lane必须要发送link numlane num均设为padTS1

3)比如说一个 x8 链路,将会把它的通道编号为 0-7。端口需要支持链路容纳其所拥有的最大通道数,也需要支持链路容纳最少至一个通道。通道总是从 0 开始编号,并且需要是连续编号不中断的。比如,如果一个 x8 链路上有些通道不工作,它可能可以转而配置成一个 x4 链路,这种情况下它必须使用通道 0-3。再举一个例子,如果是链路的通道 2 无法正常工作,无法使用通道 0134 组成一个 x4 链路,因为它们的编号是不连续的。链路上任何剩余的通道必须发送链路和通道编号都使用填充符号的 TS1

Configuration.Lanenum.Wait

如果use_modified_TS1_TS2_Ordered_Set1,需要注意:

1tx需要发送Modified TS1而不是正常的TS1;

2rx端必须检查是否收到Modified TS1(注意一开始进入这个状态的时候可能还是收到标准的TS1,需要检查的是收到连续的Modified TS1)

为了避免将链路的宽度配置小于正常宽度,协议建议如果在多通道链路上发现某些通道出现错误或者失去 Block Alignment 状态,那么延迟一段时间后再进行本过程。8b/10b 编码时等待至少 2 TS1128b/130b 编码时至少等待 34 TS1,但任何情况下不要等待超过 1ms

Dsp

Configuration.Lanenum.Wait 状态期间,DSP 会继续发送链路和通道编号为非填充值的 TS1,直至满足某个跳转到其他状态的条件。

Usp

Configuration.Lanenum.Wait 状态期间,USP 会继续发送链路和通道编号为非填充值的 TS1,直至满足某个跳转到其他状态的条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/208765.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看不惯AI版权作品被白嫖!Stability AI副总裁选择了辞职,曾领导开发Stable Audio

近日,OpenAI的各种大瓜真是让人吃麻了。 而就在Sam Altmam被开除前两天,可能没太多人注意到Stability AI副总裁Newton—Rex因看不惯StabilityAI在版权保护上的行为选择辞职一事。 大模型研究测试传送门 GPT-4传送门(免墙,可直接…

android11 申请所有文件访问权限

Android 11 引入了强制执行分区存储的限制,导致应用默认不能访问外部文件。 针对以前涉及较多文件的操作,可采用申请所有文件访问权限的方式来解决这一问题,实现方式如下。 (虽然这样做安全性低,官方并不推荐这样&…

druid keepAlive 导致数据库连接数飙升

一.背景 应用在执行完某个复杂业务,主要包含20几个查询SQL的操作后,会导致数据库连接池一直升高 druid版本:1.2.11 druid配置文件: spring.datasource.druid.maxActive100 spring.datasource.druid.initialSize20 spring.datas…

一条命令彻底卸载Linux自带多个版本jdk

一条命令彻底卸载Linux自带多个版本jdk 检查系统已经安装的jdk rpm -qa | grep java卸载所有已经安装的 jdk xargs 将参数逐个传递 将已安装的 java 程序逐个当做参数传递给 rpm -e --nodeps rpm -qa | grep java | xargs rpm -e --nodeps再次检查系统已经安装的jdk rpm -qa | …

机器视觉公司为什么宁愿高薪招新人,也不愿加薪留老员工?老员工特殊时间特殊照顾,新人必须常照顾

​职场常出现的“薪酬倒挂”现象。其实这是正常的职场规律,实际上是企业管理不得不面对的一种选择。 很多企业宁愿老员工离职也不加薪,却高薪请新员工?这就是职场上的鲶鱼效应,一些高层领导认为一个企业,老员工好比沙…

【docker】docker总结

一、Docker简介 Docker是开源应用容器引擎,轻量级容器技术。基于Go语言,并遵循Apache2.0协议开源Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux系统上,也可以实现虚拟化容…

【Linux】权限的理解和使用

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

Rust并发编程:理解线程与并发

大家好!我是lincyang。 今天我们来深入探讨Rust中的并发编程,特别是线程的使用和并发的基本概念。 Rust中的线程 Rust使用线程来实现并发。线程是操作系统可以同时运行的最小指令集。在Rust中,创建线程非常简单,但与此同时&…

SpringBoot:kaptcha生成验证码

GitHub项目地址:GitHub - penggle/kaptcha: kaptcha - A kaptcha generation engine. kaptcha介绍 kaptcha官网(Google Code Archive - Long-term storage for Google Code Project Hosting.)对其介绍如下, kaptcha十分易于安装…

陪玩圈子系统APP小程序H5,详细介绍,源码交付,支持二开!

陪玩圈子系统,页面展示,源码交付,支持二开! 陪玩后端下载地址:电竞开黑陪玩系统小程序,APP,H5: 本系统是集齐开黑,陪玩,陪聊于一体的专业APP,小程序&#xff…

hadoop在本地创建文件,然后将文件拷贝/上传到HDFS

1.要$cd {对应目录}进入到对应目录,一般为 cd /usr/local/hadoop/ 2.创建文件,$sudo gedit {文件名},例 sudo gedit test.txt 然后在弹出的txt文件输入内容,点击右上角的保存之后,关闭即可。 3.拷贝本地文件到HDF…

系列七、ThreadLocal为什么会导致内存泄漏

一、ThreadLocal为什么会导致内存泄露 1.1、ThreadLocalMap的基本结构 ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,其内部的Entry也是独立实现的。源码如下: 1.2、ThreadLocal引用示意图…