|

pcie receiver error

目录

    Link Error 是链路错误,不是一种特定的错,而是一些错误的统称。

    在 pcie Correctable Error Status 寄存器中,只有 Receiver Error Status,没有 Framing Error,Symbol Lock 丢失等其它错误的状态标识。因此软件没法精确是发生了哪一种错误。Receiver Error 和 Framing Error 对比

    类型 Receiver Error Framing Error
    来源 接收机检查出来的错误,可能在组帧前就发现了 组帧完成后,检查出来的一些错误
    是否需要置位 Receiver Error status 在特定 LTSSM 状态需要 不一定

    ltssm 和错误是否需要置位 Receiver Error Status 之间的关系

    ltssm 状态 置为 Receiver Error Status In-Band Presence
    Detect 0
    Polling 1
    Configuration 8b/10b 相关错误置位(如果实现需要置位)
    128b/130b 置位 (可选)
    1
    Recovery 可选 1
    L0 置位 1
    L0s/L1/L2 1
    Disabled/Hot Reset 8b/10b相关错误置位(可选) 1
    Loopback 1

    Link Error 在 8b/10b下包括:

    类型 是否需要检查 是否触发 Reciever Error
    8b/10b decode Errors 需要 特定 LTSSM 状态触发
    Non-Flit Mode Framing 相关的错误 可选 可选
    loss of Symbol Lock 数据可能不对 可选
    Elasticity Buffer Overflow/Underflow 数据可能不对 可选
    Lane-to-Lane de-skew 失败 数据可能不对 可选

    note :

    1. 8b/10 decode Error 不一定需要触发 Reciver Error,比如在 Polling 状态,刚开始数据还没稳定,不用触发 Receiver Error
    2. 数据不对后,就没法直接检查,可能是由内部信号指示发生了改错误,内部信号指示后也可将 Reciver Error Status 置为 1

    Link Error 在 128b/130b 编码下包括:

    类型 是否需要检查 是否触发 Reciever Error
    Framing Error 需要 特定 LTSSM 状态触发
    loss of Block Alignment 数据可能不对 可选
    Elasticity Buffer Overflow/Underflow 数据可能不对 可选
    Lane-to-Lane de-skew 失败 数据可能不对 可选
    note:
    1. Framing Error 在 non flit 128b/130b 编码下,基本都是可选检查,在 128b/130b flit 模式下,是必须检查

    Link Error 在 1b/1b 编码下包括:

    类型 是否需要检查 是否触发 Reciever Error
    Framing Error 需要 特定 LTSSM 状态触发
    Elasticity Buffer Overflow/Underflow 数据可能不对 可选
    Lane-to-Lane de-skew 失败 数据可能不对 可选

    Receiver Error 触发行为

    8b/10b 触发 Receiver Error 的行为

    模式 是否需要检查 错误类型 触发 Receiver Error 的行为
    Non-Flit 需要 decode error 接受到的 symbol 不在 8b/10b 编码表中
    Non-Flit 需要 decode error 接受到的 symbol 在 8b/10b 编码表中,但是 running disparity 跟编码表中的不一致
    Non-Flit 可以不检查 framing error STP 和 END 或者 STP 和 EDB 之间的 symbol 个数小于 18 (gen1/2 TLP 的最小长度为 18 个 Symbol
    Non-Flit 可以不检查 framing error 大于 x1 的链路,当准备从 Logical Idle 状态过渡到传输 TLP 时,STP Symbol 没有在 lane0 上
    Non-Flit 可以不检查 framing error 大于 x1 的链路,当准备从 Logical Idle 状态过渡到传输 DLLP 时,SDP Symbol 没有在 lane0 上
    Non-Flit 可以不检查 framing error 一个 Symbol Time (Symbol Timed的解释) 之内出现了 2 个或更多个 STP Symbol
    Non-Flit 可以不检查 framing error 一个 Symbol Time 之内出现了 2 个或者更多个 SDP Symbol
    Non-Flit 可以不检查 framing error 如果链路宽度大于 x4,STP 或者 SDP Symbol 不在 4N (N为正整数)上。例如,x8的链路,STP 和 SDP 不在 lane 0 和 lane 4 上
    Non-Flit 可以不检查 framing error 对于 xN 的链路,END 或者EDB Symbol 在 K ( K 不等于N-1 )上且 Lane K+1 不是 STP 或者 SDP Symbol 时且lanes K+1到lane N-1不为PAD
    Non-Flit/Flit 数据错误 loss of Symbol Lockl 自定义实现是否置位 Receiver Error Status
    Non-Flit/Flit 数据可能不对 Elasticity Buffer Overflow/Underflow 自定义实现是否置位 Receiver Error Status
    Non-Flit/Flit 数据可能不对 Lane-to-Lane de-skew 失败 自定义实现是否置位 Receiver Error Status
    • note
      1. 8b/10b 编解码错误可以在 Flit 模式下可以通过 FEC 逻辑纠正回来
      2. decode error 在 pipe rxstatus 有明确的编码
      3. 在 pcie 2.0 的协议中没有明确指明哪些是 framing error,但是对 symbol 的一些要求是在 Frame 相关的章节,在 “Link Error Recovery” 这一章节也有提到 “Non-Flit Mode framing related errors” 就是上述 Framing Error相关的内容
      4. 数据错误后没法直接检查

    128b/130b 编解码触发 Framing Error 的行为

    模式 是否需要检查 触发 Receiver Error 的行为
    Non-Flit 可选 处理期望是一个 Faming Token 的 Symbols 时,接受到的 Symbol 或者 Symbol 序列跟 Framing Token 定义不一致
    Non-Flit 可选 收到 STP Token 后,接收机根据收到的 TLP 计算Frame CRC 和 Frame Parity,计算出来的和接收到的Frame CRC 或者 Frame Parity 不一致
    Non-Flit 可选 收到 STP Token 后,接收机可以检查 TLP Length 字段是否为 0,如果检查且为 0
    Non-Flit 可选 收到 STP Token 后,接收机可以检查 TLP Length 字段是否为 2/3/4,如果检查且为2,3,4 (TLP 最短为 5 个 DW)
    Non-Flit 可选 收到 STP Token 后,接受机可以检查 TLP Length 字段是否在 1152 到 1535 (包括1535) 之间,如果检查且TLP Length 字段在1152到1535之间
    Non-Flit 可选 收到 STP Token 后,不支持协议复用的 port 可以检查 TLP Length 字段是否大于 1535,如果检查且 TLP Length 字段大于1535
    Non-Flit 可选 收到 STP Token 后,接收机可以检查一个 Symbol Time 内是否收到了超过 1 个 STP Token,如果检查且一个 Symbol Time 收到不止 1个 STP Token
    Non-Flit 可选 接收机检查 EDB Token 中的所有 Symbol,如果某个 Symbol 不符合 EDB Token 的定义
    Non-Flit 可选 EDB 后面紧接着跟 TLP
    Non-Flit 可选 收到EDS Token之后,在链路上,数据块的最后四个 symbol 收到 EDS Token 之后,在下一个 Block 开始时,如果不是 SKPOS,EIOS 或者 EIEOS (EDS Token出现在最后,其它 lane 没有发送 idle data 的机会)
    Non-Flit 可选 收到 SDP Token 之后,接收机可以检查一个 symbol time 之内是否收到了超过 1 个 SDP Token,如果检查且一个 Symbol Time 之内收到的 SDP Token 大于1
    Non-Flit 可选 收到 IDL Token 之后,对于 x2 的链路,接收机允许检查 lane 1 上的 Symbol,如果 lane 0 上收到了 IDL Token (或者IDL),lane 1上收到的不是 IDL (IDL Token为8’h00,跟IDL是一样的)
    Non-Flit 可选 收到 IDL Token 之后,对于 x4 的链路,接收机允许检查 lane1-3 上的 Symbol,如果 lane 0 上收到了 IDL Token (也是IDL),lane 1-3 上收到的不是 IDL
    Non-Flit 可选 对于 x8 或者 x16 的链路,下一个要处理的 symbol 没有跟收到 IDL Token 后的下一个 DW ( 4 个 symbol 对齐),比如,x16的链路,lane 4 收到了 IDL Token,下一个 Token 的起始位置为这个 Symbol Time 的 lane 8,如果 IDL Token 出现在 x8 链路的 lane 4,则下一个Token的起点在下一个 Symbol Time 的 lane 0。如果检查且 IDL Token 和下一个 Token 之间的 Symbol 不是IDL
    Non-Flit 可选 任意一条 lane 上接收到 OS 块后跟着 SDSOS
    Non-Flit 可选 接收到未定义的数据块类型 (如 sync header 为 11b 或者 00b )
    Non-Flit 可选 任意一条 lane 上接受到 OS block,但是前一个 Block 没有收到 EDS Token

    比如收到了 SKPOS 但是前面没有 EDS Token ,所以需要发送完 TLP 后才可以插入 SKPOS。

    Non-Flit 可选 在数据流中,SKPOS 后面跟着跟着其它 os (包括 SKPOS )
    Non-Flit 可选 任意一条 lane 上收到 Data Block,但是前面一个 Block 包含 EDS Token
    Non-Flit 可选 接收机允许检查不同 lane 上是否有不同的 os,如果检查且不同 lane 上的Ordered Sets不一样

    如 lane 0 收到 SKPOS,lane 1 收到 EIOS

    Flit 需要 处理数据流时,任意一条 lane 上收到了 SDSOS,如果 SDSOS 后面紧跟着的不是 SKPOS 而是数据块
    Flit 需要 处理数据流时,接收到的块是未定义的块类型 (如 Sync header 为 11b 或者 00b )
    Flit 需要 处理数据流时,针对 L0p 过程中不需要退出或者进入 EI 状态的 lane,- 任意一条 lane 在不是计划的 block 边界收到 OS – Flit长度固定,所以 block 边界不是随意
    Flit 需要 处理数据流时,针对 L0p 过程中不需要退出或者进入 EI 状态的 lane,在固定 block 边界没有收到 EIEOS,SKPOS 和 EIOS 中的任意一个
    Flit 需要 处理数据流时,针对 L0p 过程中不需要退出或者进入 EI 状态的 lane,接收机允许不同 lane 上是否出现不同的Ordered Sets,如果检查且不同 lane 上收到的 Ordered Set 不同 (但是在通过 L0p 改变链路宽度时允许不同的 lane 上出现不同的 Ordered Sets)

    ig. 如果 lane 0 收到 SKPOS,lane 1 收到 EIOS,此时不是通过L0p改变链路宽度,那么就是 Framing Error

    1b/1b 编解码触发 Framing Error的行为

    模式 是否需要检查 触发 Framing Error 的行为
    Flit 检查 处理数据流后的 OS 时,在第一个对齐的 8 byte 对齐的快中,跟 SKPOS, EIOS 或者 EIEOS 能匹配的 byte 少于 5
    Flit 检查 处理数据流后的 OS 时,如果从第一个 8 bytes 中已经推出来是 SKPOS,而 SKPOS 没收到 5 个字节对应的 SKP_
    Flit 检查 在两条有效的 lanes 上,同时收到 EIEOS 和 EIOS 或者 EIEOS 和 S
    Flit 检查 所有 lane 上收到的 SKPOS
    Flit 检查 Framing E 收到 EIOS 和 SKPOS 的组合,且满足下面其一 :
    1. 链路没有设置 L0p
    2. 收到 EIOS 的 lane 不是连续的 (ie. lane 1/3 收到,2,4没收到)
    3. 收到 SKPOS 的 lane 不是连续的
    4. 收到 SKPOS 的lane 不是有效的宽度(1,2,4,8)
    5. 有些 lane 中既没收到 SKPOS 也没收到 EIOS

    发生 Receiver Error 的行为

    • Receiver Error 需要跟 port 关联
    • Receiver Error 是一种可纠正的错误,会发送 ERR_COR Message 给 RC
    • ltssm 需要进入 Recovery

    相关的寄存器

    Lane Error Status

    bit 描述 属性
    [31:0] Lane Error Status Bits :每一个比特代表对应的 lane 是否有基于 lane 的错误
    1 : 表明在对应 lane 上出现了基于 lane 的错误
    0 : 默认值,对应 lane 上没有出现基于 lane 的错误
    如果 port 支持的最大宽度小于 32 条 lane,[31:Maximum Link Width] 是无用的,且属性为 RsvdZ
    如果 port 不支持 8.0 GT/s,并且 8b/10b 相关错误不设置这些比特,允许固定为 0
    RW1CS
    如果在这个过程中遇到了其它问题,欢迎在评论区留言,如果你已解决,也欢迎把具体的解决方法留在评论区,以供后来者参考
    ×

    感谢您的支持,请扫码打赏

    微信打赏 支付宝打赏
    guest

    这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

    4 评论
    内联反馈
    查看所有评论
    znn

    求receiver error总结

    Gordon Wu

    不知楼主在哪个城市?有空可以线下约着见见?我也在做物理层这块