PCIe – LTSSM Detect

Detect 状态

  • 目的 : 检查对端什么时候存在
  • 存在的子状态 : Detect.Quiet 和 Detect.Active

Detect.Quiet

该子状态是任何复位(功能级别复位除外)或上电事件后的初始状态,必须在复位后 20 毫秒内进入。

Detect.Quiet时行为

  • 发射机电压处于 EI (Electrical Idle) 状态
  • 2.5 GT/s 为该状态的操作速度,如果从其它状态跳到该状态时(如从 Recovery 跳转到 Detect),速度不是 2.5 GT/s,则必须等待 1ms,在此期间,速度要切回到 2.5 GT/s
    • 这不会影响 TS1/2 中建议的速度
  • 物理层状态位 (LinkUp = 0,内部的状态位) 会通知数据链路层,链接不可用。当 Link Training 完成时,LinkUp = 1,从而通知数据链路层和流控制初始化开始其链路初始化部分。
  • 以下寄存器清0
  • Link Status 2 寄存器中的下列 field 清 0
    • bit[1] : Equalization 8.0 GT/s Complete
    • bit[2] : Equalization 8.0 GT/s Phase 1 Successful
    • bit[3] : Equalization 8.0 GT/s Phase 2 Successful
    • bit[4] : Equalization 8.0 GT/s Phase 3 Successful
  • 16.0 GT/s Status 寄存器中的下列 field 清 0
    • bit[0] : Equalization 16.0 GT/s Complete
    • bit[1] : Equalization 16.0 GT/s Phase1 Successful
    • bit[2] : Equalization 16.0 GT/s Phase2 Successful
    • bit[3] : Equalization 16.0 GT/s Phase3 Successful
  • 32.0 GT/s Status 寄存器中的下列 field 清 0
    • bit[0] : Equalization 32.0 GT/s Complete
    • bit[1] : Equalization 32.0 GT/s Phase1 Successful
    • bit[2] : Equalization 32.0 GT/s Phase2 Successful
    • bit[3] : Equalization 32.0 GT/s Phase3 Successful
  • 以下变量清零
    • LinkUp (物理层链路是否已经就绪)
    • use_modified_TS1_TS2_Ordered_Set
    • 下列变量在 PCIe 2.0以下不会存在
    • directed_speed_change
      • 1 : 设备希望更改数据传输速度
      • 0 : 设备不希望更改数据传输速度
    • upconfigure_capable
      • 跟 Link Upconfigure Capability 有关,当设备发送 TS2 (Symbol 4 bit[6] : Link Upconfigure Capability 为1) 且收到 8 个连续的 TS2 (Link Upconfigure Capability 为1)后,会把 upconfigure_capable 置为1
      • Link Upconfigure Capability 表示当一个较宽的链路在减少链路宽度后,是否有能力重新恢复到原先较宽的链路宽度。1 为有能力,0 为无能力
    • idle_to_rlock_transitioned
      • idle 向 Recovery.RcvrLock 跳转了多少次
      • idle 包括 Recovery.Idle 或者 Configuration.Idle
    • select_deemphasis
      • 对 Downstream port 来讲,由硬件决定
      • 对 Upstream port 来讲,变量使用 Link Control 2 寄存器中保存的 Selectable Preset/De-emphasis (bit[6])值
    • equalization_done_8GT_data_rate
    • equalization_done_16GT_data_rate
    • equalization_done_32GT_data_rate
    • perform_equalization_for_loopback

Detect.Quiet状态跳转

  • Detect.Quiet可以实现的跳转
    • Detect.Quiet -> Detect.Active

Detect.Quiet -> Detect.Active

Detect.Quiet跳转到Detect.Active条件
条件 跳转原因
条件1 12 ms 超时或者任意一条 lane 没有处于 EI 状态。
– note : 任意一条 lane 没有处于 EI 状态,可能是对端的 LTSSM 已经进入了其它状态

Detect.Active

Detect.Active时行为

  • 发射机在所有未配置过 (可能就是 link,lane 这些还没有配置) 的 lane (这些 lane 必须可以形成一条或者多条) 上执行 Receiver Detection Sequence (接收机检测序列)
  • 如果不是所有 lane 都检测到 Receiver, 那么会等待 12 ms 后,再次发送接收机检测序列,如果连续两次检测到的 Receiver 都一样,则会跳转到下一个状态 (除非两次检测到的 Receiver 都是0)

Detect.Active状态跳转

  • Detect.Active可以实现的跳转
    • Detect.Active -> Polling
    • Detect.Active -> Detect.Quiet

Detect.Active -> Polling

Detect.Quiet跳转到Detect.Active条件
条件 跳转原因
条件1 在所有未配置过的 lane 都检测到接收机 (Receiver)
条件2 至少一条未配置过的lane(但是不能是所有未配置过的lane)检测到接收机,12ms超时后,第二次检测到的接收机与第一次相同
– note : 有的 lane 检测到 Receiver, 有的 lane 没有检测到 Receiver, 可能有的 lane 很快就检测到了,有的 lane 检测 Receiver 就比较慢,所以需要 12 ms 后在检测一次,确保就是这些 lane 连上了东西 (不一定是接收机,也有可能是 50 欧姆电阻等等) – 没有检测到 Receiver 的 lane 必须:
+ 如果可以跟新的 LTSSM 关联 (可选的特性),则要与新的 LTSSM 关键。
+ 所有 lane 都不能够与新的 LTSSM 关联的话,则这些 lane 必须要处于 ei 状态
+ 在 LTSSM 重新回到 Detect 状态时,这些 lane 必须从新跟 LTSSM 关联
+ 在向 ei 状态转变时不需要发送 EIOS,此时就算发了对方也收不到

Detect.Active -> Detect.Quiet

Detect.Quiet跳转到Detect.Active条件
条件 跳转原因
条件1 任意一条 lane 都没有检测到 Receiver
note : 即所有 lane 都没有检测到 Receiver,没有检测到 Receiver, 发东西也没用,就不会往下一个状态跳转
条件2 12 ms后, 再次检测到 Receiver 的 lane 同上次不一样
note : 如果再次检测到的 Receiver 还是不一样,则还需要等待 12 ms后,发送接收机检测序列,确保 lane 上连了东西的都正确的找出来了

例子

  • 正常训练 (x4接x4)
    1. 刚开始RC跟EP是连接上的,通电,RC和EP的LTSSM都是处于Detect.Quiet
    2. 由于所有lane都是正常的,不存在哪条lane会先退出EI,所以在12ms超时后,RC和EP进入Detect.Active,但是RC和EP谁先进入,这个不能保证,如果RC和EP的LTSSM同时开始工作,进入Detect.Active的时间点比较接近。
    3. Detect.Active状态,执行接收机检测序列,检测对端是否等效为50欧姆负载。所有没有配置的lane都检测到了接收机,进入Polling.Active,准备发送TS1

正常训练

guest
0 评论
内联反馈
查看所有评论