文章目录
- PCIe Message 与 MSI
- PCIe Message 和 MSI 的作用与关系
- MSI 的配置与寄存器
- MSI 和 ARM GIC 的关系
- 示例:MSI 在 ARM GIC 的实际应用
- 总结
PCIe Message 与 MSI
本文将介绍 PCIe message 的作用以及message 与 MSI 的关系,再介绍 MSI 如何配置以及MSI有哪些寄存器,及MSI 与 ARM 中的GIC的关系。
PCIe Message 和 MSI 的作用与关系
- PCIe Message 的作用
PCI Express(PCIe)是一种高速串行总线,其中使用消息传递(Message)机制代替了传统并行总线中的引脚信号。例如,传统 PCI 总线使用专门的引脚传递中断请求(IRQ 信号),而 PCIe 则通过发送消息完成中断、错误报告等功能。
- 主要用途:
-
中断通知 :用来代替传统中断引脚方式,比如
MSI (Message Signaled Interrupt)
。 -
系统错误报告 :例如热插拔事件、数据链路错误等,PCIe 协议定义了诸如
ERR_COR
,ERR_FATAL
等错误消息。 -
电源管理 :通知设备的电源状态变化(例如进入低功耗模式)。
-
配置和控制 :例如在 Root Complex 和 Endpoint 之间交换消息。
-
- Message 和 MSI 的关系
MSI(Message Signaled Interrupt)是 PCIe 中实现中断的一种机制,其作用是通过消息代替传统硬件信号(中断引脚)来通知 CPU 发生了中断。
-
传统中断的劣势 :
-
中断引脚数量有限,不适合扩展。
-
在共享引脚的情况下,中断源需要额外的软件逻辑确定具体来源。
-
-
MSI 的优势 :
-
消除了中断引脚的物理限制,可以通过消息的形式支持更多中断源。
-
支持多个中断向量(MSI-X 可以支持多达 2048 个中断)。
-
提高了效率,特别是在多核系统中,可以将中断直接路由到特定的核。
-
MSI 的配置与寄存器
-
MSI 配置步骤
MSI 的配置是在设备的配置空间完成的,包括如下步骤: -
启用 MSI 功能 :
- 设置设备的配置空间中的
MSI Control
字段以启用 MSI。
- 设置中断向量 :
- 为设备分配一个或多个中断向量,这些中断向量会映射到 CPU 的中断控制器。
- 设置消息地址与消息数据 :
-
Message Address
:CPU 或中断控制器的地址,用于接收中断消息。 -
Message Data
:与中断向量相关联的数据。
- 启用中断:
- 配置完成后,设备可以生成 MSI 消息通知中断。
- 相关寄存器
MSI 的相关寄存器位于 PCI 配置空间(Capability Structure)中,主要包括:
-
MSI Control 寄存器 :
-
是否启用 MSI。
-
是否支持多向量 MSI。
-
-
Message Address 寄存器 :
- 存储中断消息的目的地址,通常为 CPU 或中断控制器的地址。
-
Message Data 寄存器 :
- 包含中断向量值或其它与中断相关的信息。
-
MSI-X 表 (针对 MSI-X):
- 用于存储多个向量地址和数据。
MSI 和 ARM GIC 的关系
在 ARM 架构中,常用的中断控制器是 GIC (Generic Interrupt Controller),其主要作用是管理和分发中断。在 PCIe 系统中,MSI 由 PCIe 设备发送,最终需要被 GIC 处理。1. GIC 的作用
-
GIC 接收 PCIe 发出的 MSI。
-
将 MSI 转换为对应的中断 ID,分发到对应的 CPU。
-
GIC 负责中断优先级管理、中断屏蔽、中断分发等功能。
- 工作流程
- PCIe 设备生成 MSI 消息 :
-
包括
Message Address
和Message Data
。 -
Message Address
配置为 GICD 中对应的中断管理地址。
- GIC 解析 MSI 消息 :
- GIC 使用 MSI 的
Message Data
解析出具体的中断 ID。
- 中断分发 :
-
GIC 将解析的中断分发到特定的 CPU。
-
多核系统下,可以基于中断 ID 将中断发送到指定核。
- GIC 配置 MSI 示例
以典型系统为例:
-
Message Address :PCIe MSI 地址配置为 GICD 的物理地址。
-
Message Data :设置为 GIC 的中断 ID。
-
配置完成后,PCIe 中断通过 MSI 触发,最终由 GIC 接收并处理。
示例:MSI 在 ARM GIC 的实际应用
场景 :网络设备触发中断通知 CPU 处理数据包。
- PCIe 网络设备 :
- 分配 MSI,中断向量为 32,对应 ARM GIC 的中断号。
- MSI 消息内容 :
-
Message Address
:0xF400_0000(假设为 GIC 中 MSI 接收地址)。 -
Message Data
:32。
- 系统行为 :
-
网络设备检测到数据包到达,通过 PCIe 总线发送 MSI 消息。
-
GIC 收到
Message Address
和Message Data
,将其映射为中断 ID。 -
中断 ID 32 被分发到指定的 CPU 核处理。
通过上述流程,中断从 PCIe 设备传递到 CPU,实现了高效的中断通知。
总结
-
PCIe 消息 在 PCIe 中取代了传统硬件引脚信号,MSI 是其典型应用。
-
MSI 配置 涉及 Message Address 和 Message Data,存储在设备配置空间中。
-
MSI 与 GIC 的结合 使得 PCIe 设备与 ARM 架构协同工作,为高效的中断处理提供了支持。
推荐阅读:
https://aijishu.com/a/1060000000289702