Bootstrap

PCIe协议之-TLP Header详解(四)

✨前言

PCIe中的Message主要是为了替代PCI中采用边带信号,这些边带信号的主要功能是中断,错误报告和电源管理等。所有的Message请求采用的都是4DW的TLP Header,但是并不是所有的空间都被利用上了,例如有的Message就没有使用Byte8到Byte15的空间。
Message请求的TLP Header格式如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的表格中提到了,Message主要有九个类型:

  1. INTx Interrupt Signaling
  2. Power Management
  3. Error Signaling
  4. Locked Transaction Support
  5. Slot Power Limit Support
  6. Vendor‐Defined Messages
  7. Ignored Messages (related to Hot‐Plug support in spec revision 1.1)
  8. Latency Tolerance Reporting (LTR)
  9. Optimized Buffer Flush and Fill (OBFF)

下面将分别进行介绍一下,

🌟INTx Interrupt Messages(中断消息)

PCI 2.3提出了MSI(Message Signaled Interrupt),但是早期的PCI并不支持这一功能,PCIe为此定义了一种Virtual Wire来模拟PCI的中断引脚(INTA-INTD)。如下图所示:
在这里插入图片描述

👉INTx Message的使用规则如下:

它们没有数据有效负载,因此保留长度字段。
· 它们仅由上游端口发行。检查收到的数据包的此规则是可选的,但如果检查,违规行为将作为格式错误的 TLP 进行处理。
· 他们需要使用默认流量类别TC0。接收方必须对此进行检查,违规行为将作为格式错误的 TLP 进行处理。
· 链路两端的组件必须跟踪四个虚拟中断的当前状态。如果一个中断的逻辑状态在上游端口发生变化,则必须发送适当的 INTx 消息。
· 当命令寄存器的中断禁用位设置为 = 1 时,INTx 信号被禁用(物理中断线的情况)。
· 如果在器件中设置中断禁用位时任何虚拟 INTx 信号处于活动状态,则上行端口必须发送相应的 Deassert_INTx 消息。
· 交换机必须独立跟踪每个下游端口的四个 INTx 信号的状态,并组合上游端口的状态。
· 根联合体必须独立跟踪四个 INTx 线的状态,并以特定于实现的方式将它们转换为系统中断。
· 他们使用路由类型“本地终止接收器”来允许交换机重新映射指定的中断引脚。因此,INTx消息中的请求者ID可以由最后的发送器分配。

🌟Power Management Messages(电源管理消息)

在这里插入图片描述

👉电源管理消息使用规则如下:

· 电源管理消息没有数据有效负载,因此保留长度字段。
· 他们需要使用默认流量类别TC0。接收方必须检查这一点并将违规行为作为格式错误的 TLP 进行处理。
· PM_Active_State_Nak 在观察到来自链路邻居的将链路电源状态更改为 L1 的请求后从下游端口发送,但它选择不这样做(本地 - 终止于接收器路由)。
· PM_PME 由请求电源管理事件的组件向上游发送(隐式路由到根联合体)。
· PM_Turn_Off 向下游发送到所有端点(从根联合体路由隐式广播)。
· PME_TO_Ack 由端点向上游发送。对于具有多个下游端口的交换机,在所有下游端口都收到该消息之前,该消息不会被转发到上游(收集并路由到根联合体路由)。

🌟Error Messages(错误消息)

在这里插入图片描述

👉错误信息使用规则如下:

· 他们需要使用默认流量类别TC0。接收方必须检查这一点并将违规行为作为格式错误的 TLP 进行处理。
· 它们没有数据有效负载,因此保留长度字段。
· 根联合体将错误消息转换为系统特定的事件。

🌟Locked Transaction Support

在这里插入图片描述

👉Unlock Message使用规则:

· 他们需要使用默认流量类别TC0。接收方必须检查这一点并将违规行为作为格式错误的 TLP 进行处理。
· 它们没有数据有效负载,并且长度字段被保留。

🌟Set Slot Power Limit Message

在这里插入图片描述

👉Set_Slot_Power_Limit消息使用规则:

· 他们需要使用默认流量类别 TC0。接收方必须检查这一点并将违规行为作为格式错误的 TLP 进行处理。
· 数据有效负载为1 DW,因此长度字段设置为1。仅 32 位数据有效负载的低 10 位用于时隙功率缩放;高有效负载位必须设置为零。
· 只要数据链路层转换到 DL_Up 状态,或者在数据链路层已经报告 DL_Up 状态时发生对时隙功能寄存器的配置写入,就会自动发送此消息。
· 如果插槽中的卡消耗的电量已经低于指定的电量限制,则可以忽略该消息。

🌟Vendor‐Defined Message 0 and 1

在这里插入图片描述
在这里插入图片描述

👉厂商自定义Message使用规则:

· 数据有效负载可能包含也可能不包含在任一类型中。
· 2. 消息通过Vendor ID 字段进行区分。
· 3. 属性位[2]和[1:0]不保留。
· 4. 如果接收者无法识别该消息:
• 类型 1 消息被默默丢弃
• 类型 0 消息被视为不支持的请求错误条件

🌟Ignored Messages

在这里插入图片描述

👉热插拔Message使用规则:

· 它们由下游端口驱动至插槽中的卡。
· 注意按钮消息由插槽设备向上游驱动。

🌟Latency Tolerance Reporting Message

在这里插入图片描述
在这里插入图片描述

👉LTR Message使用规则:

· 他们需要使用默认流量类别TC0。接收方必须检查这一点并将违规行为作为格式错误的 TLP 进行处理。
· 它们没有数据有效负载,并且长度字段被保留。

🌟Optimized Buffer Flush and Fill Messages

在这里插入图片描述
在这里插入图片描述

👉OBFF Message使用规则:

· 他们需要使用默认流量类别TC0。接收方必须检查这一点并将违规行为作为格式错误的 TLP 进行处理。
· 它们没有数据有效负载,并且长度字段被保留。
· 请求者ID必须设置为发送端口的ID。

✨小结:

消息请求TLP在PCIe架构中扮演着重要角色,它允许硬件设备以非常高效的方式与系统其他部分进行通信。这种通信方式减少了对传统IRQ(中断请求)线路的依赖,并允许实现更加复杂和灵活的硬件控制逻辑。通过这种方式,系统可以更快地响应硬件事件,优化功耗管理,并提高系统的整体稳定性和性能

;