Fork me on GitHub
侧边栏

PCIe扫盲——TLP Header详解(四)

PCIe中的Message主要是为了替代PCI中采用边带信号,这些边带信号的主要功能是中断,错误报告和电源管理等。所有的Message请求采用的都是4DW的TLP Header,但是并不是所有的空间都被利用上了,例如有的Message就没有使用Byte8到Byte15的空间。

Message请求的TLP Header格式如下图所示:

image
image
image
image

上面的表格中提到了,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)。如下图所示:

image

INTx Message的使用规则如下:

  • 此类消息不携带数据载荷,因此Length字段被保留。

  • 它们仅由Upstream Port 发出。对接收数据包执行此规则检查是可选的,但如果进行检查,违规情况将按畸形TLP处理。

  • 必须使用默认流量类别TC0。接收方必须检查此规则,违规将按Malformed TLP处理。

  • 链路两端的组件必须跟踪四个虚拟中断的当前状态。当上游端口的某个逻辑中断状态发生变化时,必须发送对应的INTx消息。

  • 当命令寄存器的Interrupt Disable位设为1时(与物理中断线情况相同),INTx信令将被禁用。

  • 如果设备在设置中断禁用位时存在激活的虚拟INTx信号,上游端口必须发送对应的Deassert_INTx消息。

  • 交换机必须为每个下游端口独立维护四个INTx信号状态,并将状态汇总至上游端口。

  • Root Complex必须独立跟踪四个INTx线的状态,并按实现特定的方式将其转换为系统中断。

  • 使用"Local-Terminate at Receiver"路由类型允许交换机重新映射指定中断引脚。因此,INTx消息中的Requester ID可由最后发送端分配。

Power Management Messages(电源管理消息)

Power Management Messages使用规则如下:

  • 电源管理消息没有数据负载,因此长度字段是保留的。

  • 必须使用默认流量类 TC0。接收方必须检查这一点,并将违反此规定的消息视为格式错误的 TLP(事务层包)。

  • PM_Active_State_Nak 是从下游端口发送的,当它观察到来自链路邻居的请求,要将链路电源状态更改为 L1,但决定不这样做时(本地终止在接收方路由)。

  • PM_PME 是由请求电源管理事件的组件上行发送的(隐式路由到根复合体)。

  • PM_Turn_Off 是向所有端点下行发送的(从根复合体隐式广播路由)。

  • PME_TO_Ack 是由端点上行发送的。对于具有多个下游端口的交换机,在所有下游端口接收到此消息之前,它不会向上传递(收集并路由到Root Complex路由)。

Error Messages(错误消息)

image

Error Message使用规则如下:

  • 必须使用默认流量类 TC0。接收方必须检查这一点,并将违反此规定的消息视为格式错误的 TLP(事务层包)。

  • 它们没有数据负载,因此长度字段是保留的。

  • Root Complex将错误消息转换为系统特定的事件。

Locked Transaction Support

image

Unlock Message使用规则:

  • 必须使用默认流量类 TC0。接收方必须检查这一点,并将违反此规定的消息视为格式错误的 TLP(事务层包)。
  • 它们没有数据负载,且长度字段是保留的。

Set Slot Power Limit Message

image

Set_Slot_Power_Limit Message使用规则:

  • 必须使用默认流量类 TC0。接收方必须检查这一点,并将违反此规定的消息视为格式错误的 TLP(事务层包)。

  • 数据负载为 1 DW,因此长度字段设置为 1。32 位数据负载的低 10 位用于槽电源调节;高位负载位必须设置为零。

  • 每当数据链路层过渡到 DL_Up 状态,或者在数据链路层已经报告 DL_Up 状态时发生对槽功能寄存器的配置写操作时,都会自动发送此消息。

  • 如果槽中的卡已经消耗的功率低于指定的功率限制,则可以忽略此消息。

Vendor‐Defined Message 0 and 1

image
image

厂商自定义Message使用规则:

  1. 数据负载可能包含,也可能不包含,取决于类型。

  2. 消息通过厂商 ID 字段进行区分。

  3. 属性位 [2] 和 [1:0] 不是保留位。

  4. 如果接收方无法识别消息:

• 类型 1 消息会被默默丢弃

• 类型 0 消息会被视为不支持的请求错误条件

Ignored Messages

image

Hot Plug Message使用规则:

  • 它们由下游端口驱动,发送到槽中的卡。
  • 注意触发消息由槽设备上行驱动。

Latency Tolerance Reporting Message

image
image

LTR Message使用规则:

  • 必须使用默认流量类 TC0。接收方必须检查这一点,并将违反此规定的消息视为格式错误的 TLP(事务层包)。
  • 它们没有数据负载,且长度字段是保留的。

Optimized Buffer Flush and Fill Messages

image
image

OBFF Message使用规则:

  • 必须使用默认流量类 TC0。接收方必须检查这一点,并将违反此规定的消息视为格式错误的 TLP(事务层包)。

  • 它们没有数据负载,且长度字段是保留的。

  • 请求者 ID 必须设置为发送端口的 ID。

posted @ 2025-02-05 11:05  yooooooo  阅读(1097)  评论(0)    收藏  举报