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




上面的表格中提到了,Message主要有九个类型:
- INTx Interrupt Signaling
- Power Management
- Error Signaling
- Locked Transaction Support
- Slot Power Limit Support
- Vendor‐Defined Messages
- Ignored Messages (related to Hot‐Plug support in spec revision 1.1)
- Latency Tolerance Reporting (LTR)
- 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的使用规则如下:
-
此类消息不携带数据载荷,因此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(错误消息)

Error Message使用规则如下:
-
必须使用默认流量类 TC0。接收方必须检查这一点,并将违反此规定的消息视为格式错误的 TLP(事务层包)。
-
它们没有数据负载,因此长度字段是保留的。
-
Root Complex将错误消息转换为系统特定的事件。
Locked Transaction Support

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

Set_Slot_Power_Limit Message使用规则:
-
必须使用默认流量类 TC0。接收方必须检查这一点,并将违反此规定的消息视为格式错误的 TLP(事务层包)。
-
数据负载为 1 DW,因此长度字段设置为 1。32 位数据负载的低 10 位用于槽电源调节;高位负载位必须设置为零。
-
每当数据链路层过渡到 DL_Up 状态,或者在数据链路层已经报告 DL_Up 状态时发生对槽功能寄存器的配置写操作时,都会自动发送此消息。
-
如果槽中的卡已经消耗的功率低于指定的功率限制,则可以忽略此消息。
Vendor‐Defined Message 0 and 1


厂商自定义Message使用规则:
-
数据负载可能包含,也可能不包含,取决于类型。
-
消息通过厂商 ID 字段进行区分。
-
属性位 [2] 和 [1:0] 不是保留位。
-
如果接收方无法识别消息:
• 类型 1 消息会被默默丢弃
• 类型 0 消息会被视为不支持的请求错误条件
Ignored Messages

Hot Plug Message使用规则:
- 它们由下游端口驱动,发送到槽中的卡。
- 注意触发消息由槽设备上行驱动。
Latency Tolerance Reporting Message


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


OBFF Message使用规则:
-
必须使用默认流量类 TC0。接收方必须检查这一点,并将违反此规定的消息视为格式错误的 TLP(事务层包)。
-
它们没有数据负载,且长度字段是保留的。
-
请求者 ID 必须设置为发送端口的 ID。


浙公网安备 33010602011771号