LTSSM – Configuration
Configuration.Linkwidth.Start
一些简写:
- link# : link number
- lane# : lane number
- DSP : Downstream Port
- USP : Upstream Port
DSP Configuration.Linkwidth.Start时的行为
- 如果 LinkUp 等于 0b 或者 LTSSM 没有初始化链路宽度的 upconfiguration, 发射机在所有 active Downstream lane 发送 TS1 (link# 和 lane# 都为 PAD)
- 如果 upconfigure_capable 设置为 1b, 并且 LTSSM 没有初始化链路宽度的 upconfiguration, 从进入 Recovery 以来, 在检测到从 Electrical Idle 退出后, 则发射机在每条 inactive lane 发送 TS1 (link# 特定, lane# 为 PAD), 在此状态,随后收到两个连续的 TS1OS,其中 link# 和 Lane# 都为 PAD。
- 如果此状态是从 Polling 跳转过来, 则在 Detect 状态检测到 Receiver 的 lane 都认为是 active lane
- 如果此状态时从 Recovery 跳转过来, 前一次 Configuration 状态配置过的 link 上的任意一条 lane 都认为是 active lane
- TS1 中数据标识符必须是所有 port 支持的速度, 包括不打算适用的
- 如果 LinkUp 是 1b, 并且 LTSSM 初始化了链路宽度的 upconfiguration, 在当前 active lanes,最初传输 TS1, 并且 link# 和 lane# 都为 PAD, inactive lanes 也倾向于激活, 从进入 Recovery 以来, 这些 lane 检测到从 Electrical Idle 退出, 并且收到 2 个连续的 TS1, 其中 link# 为特定值, lane# 为 PAD。
- 当每条传输 TS1OS 的 lane 收到 2 个连续的 TS1OS (其中 link# 和 lane# 都是 PAD) 或者进入此状态 1 ms 超时后, LTSSM 发送 TS1OS, 其中 link# 为选定的值, lane# 为 PAD。
- note : 没收到 2 个连续 link# 和 lane# 都是 PAD 的 TS1OS 前, Downstream Port LTSSM 发送的 TS1OS 中 link# 和 lane# 都是 PAD
- 在激活 inactive lane 后, 发射机必须等到 TX 共模电压稳定才可以退出 Electrical Idle, 然后在传输 TS1OS
- 如果一组 lane 可以形成唯一的 link, 那么每条 link 的 link# 必须不同。比如 : 比如 Downstream Port 支持 x8, 接了 2 个 x4 的设备, Downstream Port 在其中 4 条 lane 发送 link# 为 N, lane# 为 PAD 的 TS1, 在另外 4 条 lane 发送 link# 为 N+1, lane# 为 PAD 的 TS1
- 如果知道接了几个设备呢, Downstream Port 可以在所有 lane 上都发送 link# 相同的 TS1OS, 看接收到的 TS1OS 中 link# 是否都与发出去的一致, 或者 Downstream 在不同 lane 上发送不同 link# 不同的 TS1OS(如 lane0 上 link# 为 0, lane1 上 link# 为 1…), 看接收到的 TS1OS 中 link# 来决定有几组 link, 如果每条 lane 上收到的 link# 都一样, 则只接了一个设备, 如果 link# 有 2 中, 则接了 2 个设备, 以此类推.
DSP Configuration.Linkwidth.Start状态跳转
- DSP Configuration.Linkwidth.Start可以实现的状态跳转
- Configuration.Linkwidth.Start -> Disabled
- Configuration.Linkwidth.Start -> Loopback
- Configuration.Linkwidth.Start -> Configuration.Linkwidth.Accept
- Configuration.Linkwidth.Start -> Detect
DSP Configuration.Linkwidth.Start -> Disabled
条件 | 跳转原因 |
---|---|
条件1 | 上层直接指示Downstream port进入Disabled(如设置相关的寄存器),并在Detect状态检测到接受机的所有lane上发送TS1/2(Disable Link比特置1) |
条件2 | 如果支持可选的crosslink,所有发送TS1的lane收到2个连续的TS1(其中Disable Link比特要为1) |
DSP Configuration.Linkwidth.Start -> Loopback
条件 | 跳转原因 |
---|---|
条件1 | 基于特定的方法指示让Downstream port进入Loopback,并且发射机成为oopback lead,并在Detect状态检测到接收机的所有lane上发送TS1/2 (Lopback比特置1) |
条件2 | 所有发送TS1的lane,收到了2个连续的TS1,其中Loopback位为1 |
条件3 | 任意一条发送TS1的lane收到了2个连续的TS1,其中Loopback位为1,enhanced link behavior control为01b |
DSP Configuration.Linkwidth.Start -> Configuration.Linkwidth.Accept
条件 | 跳转原因 |
---|---|
条件1 | 任意一条收到TS1(link number和lane number都为PAD)的lane收到了2个连续的TS1(link number与发出去的一致,lane numberi为PAD) |
DSP Configuration.Linkwidth.Start -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 24ms超时 |
USP Configuration.Linkwidth.Start时的行为
- 在所有 active Upstream lanes, 发射机发送 TS1OS, 其中 link# 和 lane# 为 PAD
- 发射机会启动 inactive lane 以提高链路宽度, 如果 upconfigure_capable 设置为 1b, 从进入 Recovery 以来, 每条 inactive lane 都检测到退出 EI, 随后接受到 2 个连续的 TS1OS, 其中 link# 和 lane# 为 PAD
- 如果此状态是从 Polling 状态跳转而来, 在 Detect 状态检测到 Receiver 的任意一条 lane 都会被认为 active lane
- 如果此状态是从 Recovery 状态跳转而来, 在前一次 Configuration.Complete 状态配置过的 lane 都认为是 active lane
- 如果任何一条 lane 接收到 2 个连续的 TS1OS, 其中每条 lane 上 link# 不同且不为 PAD, lane# 为 PAD, 则选择一个 link#, 在所有检测到接收机和接收到 2 个连续 TS1OS 的所有 lane 上发射 TS1OS, 其中 link# 为选定的一个, lane# 为 PAD, 剩下在 Detect 状态检测到接收机的 lane (可能不能接收到 2 个连续的 TS)发送 link# 和 lane# 都是 PAD 的 TS1OS
- 如果此状态是从 Recovery 状态跳转而来, 并且不是由于 LTSSM 超时跳转, 如果发射机打算自动改变链路宽度, 在 Configuration 状态, 发射机必须设置 TS1OS 中的 Autonomous Change(Symbol 4 bit[6]) 为 1b
- TS1OS 中的速度标识符(Symbol 4)是 port 支持的所有速度, 包括它不打算适用的
- note : spec 建议当 link 中的某些 lane 接受了错误的 TS1OS 或者 128b/130b 编码下丢失块锁定 (Block Alignment), 对跳转到 Configuration.Linkwidth.Accept 的条件做更多评估, 以免过早的配置了链路宽度造成可能比实际的小. 当使用 8b/10b 编码时, 多检查 2 个或者更多的 TS1OS, 当 使用 128b/130b 编码时, 多检查 34 个或者更多的 TS1OS, 但是不能超过 1 ms.
- 激活任何 inactive lane 之后, 发射机在退出 Electrical Idle 后, 必须等到 TX 共模电压稳定后才可以发送 TS1OS
- 可选, 如果 LinkUp 为 0 并且支持可选的 crosslinks 模式, 所有在 Detect 状态检测到接收机的 Upstream lane 首先要发送 16 – 32个 TS1OS, 其中 link# 和 lane# 都是 PAD. 在发送完之后, 如果任意一条 Upstream lane 首先收到 2 个连续的 TS1OS, 且 link# 和 lane# 为 PAD, 那么:
- 发射机会持续发送 link# 和 lane# 都是 PAD 的 TS1OS
- 如果任何 lane 收到 2 个连续的 TS1OS, 其中 link# 不同与 PAD, lane# 为 PAD, 在检测到接收机并且也接收到 2 个连续的 TS1OS 的所有 lane 发送特定 link# 和 lane# 为 PAD 的 TS1OS. 剩下在 Detect 状态检测到接收机的 lane 发送 link# 和 lane# 都是 PAD 的 TS1OS
USP Configuration.Linkwidth.Start状态跳转
- USP Configuration.Linkwidth.Start可以实现的跳转
- USP Configuration.Linkwidth.Start -> Disabled
- USP Configuration.Linkwidth.Start -> Loopback
- USP Configuration.Linkwidth.Start -> Configuration.Linkwidth.Accept
- USP Configuration.Linkwidth.Start -> Detect
USP Configuration.Linkwidth.Start -> Disabled
条件 | 跳转原因 |
---|---|
条件1 | 在支持可选的crosslink情况下,上层直接指示可选的crosslink port 进入Disabled(如设置相关的寄存器),并在Detect状态检测到接受机的所有lane上发送TS1/2OS(其中Disable Link比特置1) |
条件2 | 任意一条发送TS1OS的lane收到2个连续的TS1OS(其中Disable Link必须需要为1) |
USP Configuration.Linkwidth.Start -> Loopback
条件 | 跳转原因 |
---|---|
条件1 | 基于特定的方法指示让Upstream port进入Loopback,并在Detect状态检测到接收机的所有lane上发送TS1/2 (Lopback比特置1) |
条件2 | 所有发送TS1的lane,收到了2个连续的TS1,其中Loopback位为1 |
条件3 | 任意一条发送TS1的lane收到了2个连续的TS1,其中Loopback位为1,enhanced link behavior control为01b |
USP Configuration.Linkwidth.Start -> Configuration.Linkwidth.Accept
条件 | 跳转原因 |
---|---|
条件1 | 任意一条lane收到2个连续的TS1OS(link number不为PAD,lane number为PAD),并在这些lane上发送link number为某个特定值,lane number为PAD的TS1OS,在Detect状态检测到接收机的其它lane上仍然发送link number和lane number都是PAD的TS1OS.如果LTSSM发起了升lane操作,还必须等到其它lane也受到link number为非PAD,lane number为PAD的TS1OS(直到1ms超时)后才能发送特定link number和lane number为PAD的TS1OS |
USP Configuration.Linkwidth.Start -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 24ms超时 |
Configuration.Linkwidth.Accept
DSP Configuration.Linkwidth.Accept时的动作
- 非 PAD 的 lane# 必须从 0 到 n-1 连续编号, 分配给接收到相同 link# 的 lane, 没有接收到 TS1OS 的 Downstream lanes 不得打断可以形成最宽 link 的序列, 剩下的 lane 必须传输 link# 和 lane# 都是 PAD 的 TS1OS.
- note : spec 建议当 link 中的某些 lane 接受了错误的 TS1OS 或者 128b/130b 编码下丢失块锁定 (Block Alignment), 对跳转到 Configuration.Linkwidth.Accept 的条件做更多评估, 以免过早的配置了链路宽度造成可能比实际的小. 当使用 8b/10b 编码时, 多检查 2 个或者更多的 TS1OS, 当 使用 128b/130b 编码时, 多检查 34 个或者更多的 TS1OS, 但是不能超过 1 ms
- 如果下列所有条件都满足, 则将变量 use_modified_TS1_TS2_Ordered_Set 设为 1
- LinkUp = 0b
- 从进入 Polling 状态以来, 在 Polling 和 Configuration 状态传输的 TS1OS 和 TS2OS 中, Symbol 5 bit[7:6] (Enhanced Link Behavior Control ) 为 11b (支持 Modified TS1/TS2 Ordered Set)
- 从 Polling.Configuration 状态跳转到 Configuration 状态时, 目前配置的 link 上所有 lane 都收到 8 个连续的 TS2OS, 其中 Symbol 5 bit[7:6] (Enhanced Link Behavior Configuration) 为 11b (支持 Modified TS1/TS2 Ordered Set), 且 Symbol 4 bit[5] (支持 32.0 GT/s)要为 1b
DSP Configuration.Linkwidth.Accept状态跳转
- DSP Configuration.Linkwidth.Accept可以实现的跳转
- DSP Configuration.Linkwidth.Accept -> Configuration.Lanenum.Wait
- DSP Configuration.Linkwidth.Accept -> Detect
DSP Configuration.Linkwidth.Accept -> Configuration.Lanenum.Wait
条件 | 跳转原因 |
---|---|
条件1 | 接受到TS1(其中link numer发出去的一致且不为PAD)的lane可以形成一组link,接受到的TS1OS中link number与Downstream port发出去的一致且不为PAD,然后在可以形成link的所有lane上发送link number一致,lane number不为PAD(0到n-1)且唯一的TS1OS |
DSP Configuration.Linkwidth.Accept -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 2ms超时 |
条件2 | 不能配置成link (eg. port支持x8,但是lane0/7都没有收到符号要求的TSOS) |
条件3 | 所有lane都收到2个连续的TS1OS(link number和lane number都是PAD) |
USP Configuration.Linkwidth.Accept时的行为
USP Configuration.Linkwidth.Accept 状态跳转
- USP Configuration.Linkwidth.Accept可以实现的跳转
- USP Configuration.Linkwidth.Accept -> Configuration.Lanenum.Wait
- USP Configuration.Linkwidth.Accept -> Detect
USP Configuration.Linkwidth.Accept -> Configuration.Lanenum.Wait
条件 | 跳转原因 |
---|---|
条件1 | 发送TS1(其中link number为non-PAD)的lane如果可以形成link,且当这些lane收到2个连续的TS1OS(link number不为PAD,lane number不为PAD),然后在可以形成link的lane上发送相同非PAD link number和非PAD lane number(也可以不同,如lane reversal, x4 的port,lane 0 发送lane number为3的TS) 的 TS1OS |
USP Configuration.Linkwidth.Accept -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 2ms超时 |
条件2 | 不能配置成link (eg. port支持x8,但是lane0/7都没有收到符号要求的TSOS) |
条件3 | 所有lane都收到2个连续的TS1OS(link number和lane number都是PAD) |
Configuration.Lanenum.Wait
DSP Configuration.Lanenum.Wait时的行为
DSP Configuration.Lanenum.Wait状态跳转
- DSP Configuration.Lanenum.Wait可以实现的跳转
- DSP Configuration.Lanenum.Wait -> Configuration.Lanenum.Accept
- DSP Configuration.Lanenum.Wait -> Detect
DSP Configuration.Lanenum.Wait -> Configuration.Lanenum.Accept
条件 | 跳转原因 |
---|---|
条件1 | 在Detect状态检测到接收机的任意一条lane收到2个连续的TS1OS,其中lane number与第一次进Configuration.Lanenum.Wait不同并且不是所有lane的link number为PAD, |
条件2 | 所有lane上收到2个连续的TS1OS,并且link number和lane number与所有lane上传输的一致 |
DSP Configuration.Lanenum.Wait -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 2ms超时 |
条件2 | 所有lane都收到2个连续的TS1OS(link number和lane number都是PAD) |
USP Configuration.Lanenum.Wait时的行为
USP Configuration.Lanenum.Wait状态跳转
- USP Configuration.Lanenum.Wait可以实现的状态跳转
- USP Configuration.Lanenum.Wait -> Configuration.Lanenum.Accept
- USP Configuration.Lanenum.Wait -> Detect
USP Configuration.Lanenum.Wait -> Configuration.Lanenum.Accept
条件 | 跳转原因 |
---|---|
条件1 | 任意一条lane收到2个连续的TS1OS,其中lane number与第一次进Configuration.Lanenum.Wait不同并且不是所有lane的link number为PAD |
条件2 | 任意一条lane收到2个连续的TS2OS(USP延迟1ms进,DSP可能已经进入Configuration.Complete) |
USP Configuration.Lanenum.Wait -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 2ms超时 |
条件2 | 所有lane都收到2个连续的TS1OS(link number和lane number都是PAD) |
Configuration.Lanenum.Accept
DSP Configuration.Lanenum.Accept时的行为
- Retimers 允许延迟跳转到 Configuration.Complete
DSP Configuration.Lanenum.Accept状态跳转
- DSP Configuration.Lanenum.Accept允许的状态跳转
- DSP Configuration.Lanenum.Accept -> Configuration.Complete
- DSP Configuration.Lanenum.Accept -> Configuration.Lanenum.Wait
- DSP Configuration.Lanenum.Accept -> Detect
DSP Configuration.Lanenum.Accept -> Configuration.Complete
条件 | 跳转原因 |
---|---|
条件1 | 所有lane收到2个连续的TS1OS,其中link number和lane number为non-PAD,并且与link number与发出去的一致,lane number与发出去的一致或是reversal. 如果use_modified_TS1_TS2_Ordered_Set为1且正在执行备用协议协商,则必须延迟10us进入或者直到DSP收到USP对该协议的响应 |
DSP Configuration.Lanenum.Accept -> Configuration.Lanenum.Wait
条件 | 跳转原因 |
---|---|
条件1 | 收到2个连续TS1OS(link number和lane number都是non-PAD)的lane,link可以配置成这些lane的任何子集. (eg. x8的port不能配置成x8的链路,但是可以配置成x4的链路),发送的TS1OS有相同的non-PAD link number和新的lane number(新的lane number取值范围0到m-1,m<n)。对收到non-PAD lane number的lane进行顺序编码,没有收到TS1OS的lane会打断持续编码,新的lane number 必须包含lane 0 或者n-1,其它剩下的lane发送的TS1OS中link number 和 lane number 都是PAD |
DSP Configuration.Lanenum.Accept -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 不能形成link |
条件2 | 所有lane收到2个连续link number和lane number都是PAD的TS1OS |
USP Configuration.Lanenum.Accept时的行为
USP Configuration.Lanenum.Accept状态跳转
- USP Configuration.Lanenum.Accept允许实现的跳转
- USP Configuration.Lanenum.Accept -> Configuration.Complete
- USP Configuration.Lanenum.Accept -> Configuration.Lanenum.Wait
- USP Configuration.Lanenum.Accept -> Detect
USP Configuration.Lanenum.Accept -> Configuration.Complete
条件 | 跳转原因 |
---|---|
条件1 | 所有发送TS1OS(link number,lane number非PAD)的Upstream lane收到2个连续的TS2OS,其中link number和lane number非PAD,lane number且与对应lane发出去的一致如果use_modified_TS1_TS2_Ordered_Set为1且正在执行备用协议协商,Downstream port决定不在使用任何替换协议,则接受到的TS2OS中Modified TS Usage应该为000b |
USP Configuration.Lanenum.Accept -> Configuration.Lanenum.Wait
条件 | 跳转原因 |
---|---|
条件1 | 收到2个连续TS1OS(link number和lane number都是non-PAD)的lane,link可以配置成这些lane的任何子集. (eg. x8的port不能配置成x8的链路,但是可以配置成x4的链路) |
USP Configuration.Lanenum.Accept -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 不能形成link |
条件2 | 所有lane收到2个连续link number和lane number都是PAD的TS1OS |
Configuration.Complete
- 通用的行为:
- NOTE:如没有特殊说明,这些是对发射方向的要求,即发射机在进入时可以改变其TS2中的某些symbol,但是此后不允许在改变
- port可以在进入该状态时允许改变支持的速度,但是在此状态不允许这些值(位于TS2中的symbol 4)
- 如果Flit_Mode_Enabled为0且LinkUp为1,在进入此状态时,port可以改变它建议的Upconfigure(通过TS2),但是在此状态不允许在改变这些值
- 如果Flit_Mode_Enabled为1且LinkUp为0,在进入此状态时,port可以改变它建议的L0p Capability(通过TS2),但是在此状态不允许改变这些值
- 在此状态,如果变量use_modified_TS1_TS2_Ordered_sets为1:
- 发射机必须发送Modified TS2有序集而不是TS2有序集
- 接收机必须检查接收到的TS2类型,必须为Modified TS2而不是TS2
DSP Configuration.Complete时的行为
DSP Configuration.Complete状态跳转
- DSP Configuration.Complete可以实现的状态跳转
- DSP Configuration.Complete -> Configuration.Idle
- DSP Configuration.Complete -> Detect
DSP Configuration.Complete -> Configuration.Idle
条件 | 跳转原因 |
---|---|
条件1 | 所有发送TS2OS的lane收到了8个连续的TS2OS(link number和lane number都匹配,non-PAD,相同的速度标识包括Link Upconfigure/L0p Capability),在接收到1个TS2OS后,必须发送16个TS2OS |
条件2 | 2ms超时后,当前速度在8.0GT/s及更高时且变量idle_to_rlock_transitioned小于FFh. 然后会把变量changed_speed_recovery复位为0b 不能组成link的lane不在与当前的LTSSM关联 |
DSP Configuration.Complete -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 2ms超时且当前速度位2.5GT/s或者5.0GT/s |
条件2 | 不满足进入Configuration.Idle的条件 (eg. 8.0GT/s及更高速度下idle_to_rlock_transitioned为FF) |
USP Configuration.Complete时的行为
USP Configuration.Complete状态跳转
- USP Configuration.Complete可以实现的跳转
- USP Configuration.Complete -> Configuration.Idle
- USP Configuration.Complete -> Detect
USP Configuration.Complete -> Configuration.Idle
条件 | 跳转原因 |
---|---|
条件1 | 所有发送TS2OS的lane收到了8个连续的TS2OS(link number和lane number都匹配,non-PAD, 相同的速度标识包括Link Upconfigure/L0p Capability),在接收到1个TS2OS后,必须发送16个TS2OS |
条件2 | 2ms超时后,当前速度在8.0GT/s及更高时且变量idle_to_rlock_transitioned小于FFh. 然后会把变量changed_speed_recovery复位为0b 不能组成link的lane不在与当前的LTSSM关联 |
USP Configuration.Complete -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 2ms超时且当前速度位2.5GT/s或者5.0GT/s |
条件2 | 不满足进入Configuration.Idle的条件 (eg. 8.0GT/s及更高速度下idle_to_rlock_transitioned为FF) |
Configuration.Idle
Configuration.Idle时的行为
Configuration.Idle状态跳转
- DSP和USP具有相同的跳转条件
- Configuration.Idle可以实现的状态跳转
- Configuration.Idle -> L0
- Configuration.Idle -> Recovery.RcvrLock
- Configuration.Idle -> Detect
Configuration.Idle -> L0
条件 | 跳转原因 |
---|---|
条件1 | non-Flit模式下,8b/10b编码,所有配置过的lane收到8个连续符号时间的Idle data,在收到一个idle data后需要发送16个Idle data. |
条件2 | non-Flit模式,128b/130bb编码,所有配置过的lane收到8个连续符号时间的idle data,在收到一个idle data后需要发送16个Idle data.并且该状态不是由Configuration.Complete超时而来 |
条件3 | Flit模式下,所有配置过的lane最少收到了2个IDLE Flit,在收到一个IDLE Flit后,至少发送了4个(8b/10b,128b/130b)或者8个IDLE Flit(1b/1b)且该状态不是有Configuration.Complete超时而来 |
Configuration.Idle -> Recovery.RcvrLock
条件 | 跳转原因 |
---|---|
条件1 | 2ms超时后,idle_to_rlock_transitioned小于FF 如果速度大于等于8.0GT/s,idle_to_rlock_transitioned加1如果速度是2.5GT/s或者5.0GT/s,idle_to_rlock_transitoned变为FF且复位use_modified_TS1_TS2_Ordered_Set |
Configuration.Idle -> Detect
条件 | 跳转原因 |
---|---|
条件1 | 2ms超时后,不满足进入Recovery.RcvrLock的条件(eg. idle_to_rlock_transitioned为ff) |