2.9 链路状态依赖性
2.9.1 在DL_Down状态下的事务层行为
DL_Down状态表示链路上没有与另一个组件的连接,或者与另一个组件的连接已经丢失,并且不能通过物理层或数据链路层恢复。如果数据链路层报告DL_Down状态给事务层,并且DPC(数据包处理完成)尚未触发,本节规定了事务层的行为;如果DPC已经触发,2.9.3节规定了行为。
- 对于具有DL_Down状态的端口,事务层不需要接受来自数据链路层的接收TLPs,前提是这些TLPs尚未被数据链路层确认。这样的TLPs不会修改接收流量控制信用。
对于下游端口,DL_Down状态由以下方式处理:
- 将与下游传输的未完成请求相关的任何缓冲区或内部状态初始化回其默认状态
- 注意:端口配置寄存器不应受影响,除非需要更新与DL_Down转换相关的状态。
- 对于非转发请求,为设备核心提交的任何请求形成完成,返回“不支持请求完成状态”,然后丢弃请求
- 这是与端口(虚拟)桥接功能相关的报告错误(见第6.2节)。对于根端口,报告此错误是可选的。
- 事务层正在处理的非转发请求,对于这些请求可能不实际返回完成,将被丢弃。
- 注意:这相当于请求在链路状态变为DL_Down之前已被传输但尚未完成的情况。
- 这些情况由请求者使用完成超时机制处理。
- 注意:非转发请求变得不可完成的点是硬件实现的。
- 端口必须以一种方式终止任何针对端口的PME_Turn_Off(电源管理事件关闭)握手请求,使得端口被认为已经确认了PME_Turn_Off请求(见第5.3.3.2.1节的实现说明)。
- 端口必须按照第2.2.8.6节所述处理供应商定义的消息请求(例如,默默丢弃它不打算接收的供应商定义type1消息请求),因为DL_Down阻止了请求到达其目标功能。
- 对于所有其他转发的请求,丢弃请求
- 这是与端口(虚拟)桥接功能相关的报告错误(见第6.2节),并且必须作为“不支持请求”报告。对于根端口,报告此错误是可选的。
- 对于事务层正在处理的转发请求,端口允许不报告错误。 注意:这相当于请求在链路状态变为DL_Down之前已被传输的情况。
-
注:转发请求变成“不报告”的点是硬件实现的。
- 丢弃设备核心提交的所有待传输的完成(Completions)。
对于上游端口,DL_Down状态被视为复位,通过以下方式处理:
- 将所有PCI Express特定的寄存器、状态机和可外部观察的状态恢复到指定的默认或初始条件(粘滞寄存器除外,见第7.4节)。
- 丢弃所有正在处理的事务层包(TLPs)。
- 对于交换机和桥接器,将热复位传播到所有关联的下游端口。在支持超过5.0 GT/s链路速度的交换机中,上游端口必须将每个下游端口的链路训练状态机(LTSSM)导向热复位状态,但不要将LTSSM保持在该状态。这允许每个下游端口在其热复位完成后立即开始链路训练。这种行为对所有交换机都是推荐的。
2.9.2 在DL_Up状态下的事务层行为
DL_Up状态表示已与链路上的相关组件建立连接。本节规定了当数据链路层向事务层报告进入DL_Up状态时,事务层的行为,表明链路是可操作的。具有DL_Up状态的端口的事务层必须接受符合本规范其他规则的接收TLPs。 对于根复合体或交换机上的下游端口:
- 当从非DL_Up状态转换到DL_Up状态,并且插槽控制寄存器中的自动插槽功率限制禁用位被清除时,端口必须启动向链路上的另一个组件传输“设置插槽功率限制”消息,以传达在插槽能力寄存器的插槽功率限制范围和值字段中编程的值。如果插槽能力寄存器尚未初始化,则此传输是可选的。
2.9.3 在下游端口包含期间的事务层行为
在下游端口包含(Downstream Port Containment DPC)期间,与下游端口关联的LTSSM被导向到禁用状态。一旦达到禁用状态,只要DPC状态寄存器中的DPC触发状态位被设置,它就会保持在那里。见第6.2.10节,了解软件必须将下游端口保留在DPC中多长时间的要求。本节规定了一旦DPC被触发,并且只要下游端口保持在DPC中时事务层的行为。
- 一旦DPC被触发,就不再从数据链路层接受额外的(上游)TLPs。
- 如果触发DPC的条件与上游TLP相关联,那么已经从数据链路层接受的任何后续上游TLPs必须被静默丢弃。
下游端口以以下方式处理由设备核心提交的(下游)TLPs。
- 如果触发DPC的条件与下游TLP相关联,允许在链路下降之前静默丢弃或传输任何先前的下游TLPs。否则,以下规则适用。
- 对于每个非转发请求,端口必须返回完成并静默丢弃请求。 完成者ID字段必须包含与下游端口关联的值。
- 如果DPC控制寄存器中的DPC完成控制位被设置,那么完成将生成具有不支持请求(UR)完成状态。
- 如果DPC完成控制位被清除,完成(Completions)应生成完成者中止(Completer Abort, CA)完成状态。
- 端口必须以一种方式终止任何针对端口的PME_Turn_Off(电源管理事件关闭)握手请求,使得端口被认为已经确认了PME_Turn_Off请求(见第5.3.3.2.1节的实现说明)。
- 端口必须按照第2.2.8.6节所述处理供应商定义的消息请求。例如,对于它不打算接收的供应商定义type1消息请求,应默默丢弃,因为DL_Down状态阻止了请求到达其目标功能
- 对于所有其他转发的请求和完成,端口必须静默丢弃事务层包(TLP)。
- 对于每个非转发请求,端口必须返回完成并静默丢弃请求。 完成者ID字段必须包含与下游端口关联的值。
对于任何未完成的非转发请求,如果DPC被触发阻止了它们的相关完成被返回,以下情况适用:
- 对于支持DPC的根端口扩展,根端口可以跟踪某些非转发请求,以及在DPC被触发时作为副作用可能发生的超时。当DPC被触发时,每个合成的完成应为每个被跟踪的请求合成一个完成。这有助于避免完成超时。合成的完成必须具有由DPC完成控制位决定的不支持请求(UR)或完成者中止(CA)完成状态。被跟踪的非转发请求集合是硬件的,但强烈建议跟踪所有由主机处理器指令生成的非转发请求(例如,“读”、“写”、“加载”、“存储”或与原子操作对应的请求)。其他跟踪候选包括来自其他根端口的点对点请求和来自RCiEPs的请求。
- 否则,相关的请求者可能会遇到完成超时。软件解决方案栈应该理解并考虑这种可能性。