🔥点击查看精选 PCIe 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥
📢 声明:
- 🥭 作者主页:【MangoPapa的CSDN主页】。
- ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/129302969】。
- ⚠️ 本文目的为 个人学习记录 及 知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
- ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
- 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
- 📧 邮箱:mangopapa@yeah.net
- 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)
定义
PCIe 设备发出的请求中有些请求需要 Completer 反馈 Completion,此时 Requester 会等待 Completion 再进行下一步操作。在某些异常情况下,比如配置不当、系统故障等,Requeser 无法收到或收齐 Completion。为了不影响进一步使用,需要一种超时退出机制让 Requester 从这种等待状态恢复过来,这就是 Completion Timeout 机制(完成超时退出机制)。
软件配置
PCIe 通过 Device Capabilities 2 Register
和 Device Control 2 Register
两个寄存器中的相关字段来对 Completion Timeout 进行指示及控制。对于支持 Completion Timeout 机制的 Function,软件随时可以更改 Device Control 2 Register 中 Completion Timeout 相关配置。
Device Capabilities 2 Register 如图 1 所示,Completion Timeout 用到的字段释义如下:
Completion Timeout Ranges Supported
,用以指示当前 Function 支持的 Completion Timeout 范围,仅用于 RP 及 EP。共有 4 个范围,Range A~D,每 1 bit 对应一个范围。Completion Timeout Disable Supported
,用以指示是否能够关闭 Completion Timeout 机制。该字段对 RP 是可选的,对于需要发送 NP 请求的 EP 是必选的。各 VF 该字段的值必须与 PF 该字段的值相同。
Device Control 2 Register 如图 2 所示,Completion Timeout 用到的字段释义如下:
Completion Timeout Value
,通过配置该字段来选择 Completion Timeout 的范围。若开启了 Completion Timeout,用户可以通过配置 Device Control 2 寄存器的 Completion Timeout Value 来选择 Timeout Limit。Completion Timeout Disable
,通过配置该字段来决定打开或关闭 CompletionTimeout。Completion Timeout 机制默认打开,用户可以将该字段置一来关闭该机制。
Completion Timeout Value 共有五个范围,Default Range 及 Range A~D,每个 Range 包含两个子范围。如果为 Default Range 或设备不支持可变的 Timeout Value 配置,那么在设计的时候,Flit Mode 下应把 Timeout Value 设置为 40 ms ~ 50 ms,Non-Flit Mode 下应设置为 50 us ~ 50 ms(建议最少 10 ms)。其他几个范围编码及范围具体值如下表所示。
Completion Timeout Value Code | Range Name | Time Range |
---|---|---|
0000b | Default Range | 40ms~50ms@FM 50us~50ms@NFM |
0001b | A | 50us~100us |
0010b | A | 1ms~10ms |
0101b | B | 16ms~55ms; 40ms~55ms MUST@FM |
0110b | B | 65ms~210ms |
1001b | C | 260ms~900ms |
1010b | C | 1s~3.5s |
1101b | D | 4s~13s |
1110b | D | 17s~64s |
Others | Reserved | Reserved |
使用限制
对于 RC 发出的 Configuration 读写请求,由于 PCIe-PCI/PCI-X Bridge 不支持请求重传(RRS),可能会导致 Completion 时间较长,RC 的 Completion Timeout 应考虑到这一点。
除了上述提到的 Configuration 请求,对于能够发出 NP 类型请求的 PCIe Function,必须实现 Completion Timeout 机制。每一笔 NP 请求发出后自动触发针对该请求的 Completion Timeout Timer。由于 Switch 仅用于交换请求不自发生成请求,Completion Timeout 机制仅限于用在 RC、EP 及 Bridge 上,不适用与 Switch。
处置方式
发生Completion Timeout 时,Requester 上报错误。对于 Memory Read 请求,若 Completer 响应多笔 CplD 但 CplD 被中断,Requester 可以保留此前收到的 CplD 中的 Data,也可以丢弃。
AER 提供了相关机制来指示 Memory / IO / Configuration 相关 Completion Timeout 的状态指示、Error Mask,并提供了 Completion Timeout Prefix/Header Log 寄存器来存放相关请求的 TLP Prefix/Header,便于后期 Debug。
参考
- PCI Express Base Spec 6.0.1
- RootPort的 completion timeout 为什么不能防止 MCE
|
🔥 精选往期 PCIe 协议系列文章,请查看【 PCIe 专栏】🔥
⬆️ 返回顶部 ⬆️