0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简述MSI和MSI-X中断机制

TLOc_gh_3394704 来源:OpenFPGA 作者:碎碎思 2021-08-10 17:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

MSI和MSI-X中断机制

在PCI总线中,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而MSI机制是一个可选机制。而在PCIe总线中,PCIe设备必须支持MSI或者MSI-X中断请求机制,而可以不支持INTx中断消息。

在PCIe总线中,MSI和MSI-X中断机制使用存储器写请求TLP向处理器提交中断请求,下文为简便起见将传递MSI/MSI-X中断消息的存储器写报文简称为MSI/MSI-X报文。

不同的处理器使用了不同的机制处理这些MSI/MSI-X中断请求,如PowerPC处理器使用MPIC中断控制器处理MSI/MSI-X中断请求,本章将在第6.2节中介绍这种处理情况;而x86处理器使用FSB Interrupt Message方式处理MSI/MSI-X中断请求。

不同的处理器对PCIe设备发出的MSI报文的解释并不相同。但是PCIe设备在提交MSI中断请求时,都是向MSI/MSI-X Capability结构中的Message Address的地址写Message Data数据,从而组成一个存储器写TLP,向处理器提交中断请求。

有些PCIe设备还可以支持Legacy中断方式[1]。但是PCIe总线并不鼓励其设备使用Legacy中断方式,在绝大多数情况下,PCIe设备使用MSI或者MSI/X方式进行中断请求。

PCIe总线提供Legacy中断方式的主要原因是,在PCIe体系结构中,存在许多PCI设备,而这些设备通过PCIe桥连接到PCIe总线中。这些PCI设备可能并不支持MSI/MSI-X中断机制,因此必须使用INTx信号进行中断请求。

当PCIe桥收到PCI设备的INTx信号后,并不能将其直接转换为MSI/MSI-X中断报文,因为PCI设备使用INTx信号进行中断请求的机制与电平触发方式类似,而MSI/MSI-X中断机制与边沿触发方式类似。

这两种中断触发方式不能直接进行转换。因此当PCI设备的INTx信号有效时,PCIe桥将该信号转换为Assert_INTx报文,当这些INTx信号无效时,PCIe桥将该信号转换为Deassert_INTx报文。

与Legacy中断方式相比,PCIe设备使用MSI或者MSI-X中断机制,可以消除INTx这个边带信号,而且可以更加合理地处理PCIe总线的“序”。目前绝大多数PCIe设备使用MSI或者MSI-X中断机制提交中断请求。

MSI和MSI-X机制的基本原理相同,其中MSI中断机制最多只能支持32个中断请求,而且要求中断向量连续,而MSI-X中断机制可以支持更多的中断请求,而并不要求中断向量连续。

与MSI中断机制相比,MSI-X中断机制更为合理。本章将首先介绍MSI/MSI-X Capability结构,之后分别以PowerPC处理器和x86处理器为例介绍MSI和MSI-X中断机制。

[1] 通过发送Assert_INTx和Deassert_INTx消息报文进行中断请求,即虚拟中断线方式。

MSI/MSI-X Capability结构

PCIe设备可以使用MSI或者MSI-X报文向处理器提交中断请求,但是对于某个具体的PCIe设备,可能仅支持一种报文。在PCIe设备中含有两个Capability结构,一个是MSI Capability结构,另一个是MSI-X Capability结构。通常情况下一个PCIe设备仅包含一种结构,或者为MSI Capability结构,或者为MSI-X Capability结构。

MSI Capability结构

MSI Capability结构共有四种组成方式,分别是32和64位的Message结构,32位和64位带中断Masking的结构。MSI报文可以使用32位地址或者64位地址,而且可以使用Masking机制使能或者禁止某个中断源。

•Capability ID字段记载MSI Capability结构的ID号,其值为0x05。在PCIe设备中,每一个Capability结构都有唯一的ID号。

•Next Pointer字段存放下一个Capability结构的地址。

•Message Control字段。该字段存放当前PCIe设备使用MSI机制进行中断请求的状态与控制信息,如表6 1所示。

表6 1 MSI Cabalibities结构的Message Control字段

Bits 定义 描述
15:9 Reserved 保留位。系统软件读取该字段时将返回全零,对此字段写无意义。
8 Per-vector Masking Capable 该位为1时,表示支持带中断Masking的结构;如果为0,表示不支持带中断Masking的结构。该位对系统软件只读,该位在PCIe设备初始化时设置。
7 64 bit Address Capable 该位为1时,表示支持64位地址结构;如果为0,表示只能支持带32位地址结构。该位对系统软件只读,该位在PCIe设备初始化时设置。
6:4 Multiple Message Enable 该字段可读写,表示软件分配给当前PCIe设备的中断向量数目。系统软件根据Multiple Message Capable字段的大小确定该字段的值。在系统的中断向量资源并不紧张时,Multiple Message Capable字段和该字段的值相等;而资源紧张时,该字段的值可能小于Multiple Message Capable字段的值。
3:1 Multiple Message Capable 该字段对系统软件只读,表示当前PCIe设备可以使用几个中断向量号,在不同的PCIe设备中该字段的值并不不同。当该字段为0b000时,表示PCIe设备可以使用1个中断向量;为0b001、0b010、0b011、0b100和0b101时,表示使用4、8、16和32个中断向量;而0b110和0b111为保留位。该字段与Multiple Message Enable字段的含义不同,该字段表示,当前PCIe设备支持的中断向量个数,而Multiple Message Enable字段是系统软件分配给PCIe设备实际使用的中断向量个数。
0 MSI Enable 该位可读写,是MSI中断机制的使能位。该位为1而且MSI-X Enable位为0时,当前PCIe设备可以使用MSI中断机制,此时Legacy中断机制被禁止。一个PCIe设备的MSI Enble和MSI-X Enable位都被禁止时,将使用INTx中断消息报文发出/结束中断请求[1]。

Message Address字段。当MSI Enable位有效时,该字段存放MSI存储器写事务的目的地址的低32位。该字段的31:2字段有效,系统软件可以对该字段进行读写操作;该字段的第1~0位为0。Message Upper Address字段。如果64 bit Address Capable位有效,该字段存放MSI存储器写事务的目的地址的高32位。

Message Data字段,该字段可读写。当MSI Enable位有效时,该字段存放MSI报文使用的数据。该字段保存的数值与处理器系统相关,在PCIe设备进行初始化时,处理器将初始化该字段,而且不同的处理器填写该字段的规则并不相同。

如果Multiple Message Enable字段不为0b000时(即该设备支持多个中断请求时),PCIe设备可以通过改变Message Data字段的低位数据发送不同的中断请求。Mask Bits字段。PCIe总线规定当一个设备使用MSI中断机制时,最多可以使用32个中断向量,从而一个设备最多可以发送32种中断请求。

Mask Bits字段由32位组成,其中每一位对应一种中断请求。当相应位为1时表示对应的中断请求被屏蔽,为0时表示允许该中断请求。系统软件可读写该字段,系统初始化时该字段为全0,表示允许所有中断请求。该字段和Pending Bits字段对于MSI中断机制是可选字段,但是PCIe总线规范强烈建议所有PCIe设备支持这两个字段。

Pending Bits字段。该字段对于系统软件是只读位,PCIe设备内部逻辑可以改变该字段的值。该字段由32位组成,并与PCIe设备使用的MSI中断一一对应。该字段需要与Mask Bits字段联合使用。

当Mask Bits字段的相应位为1时,如果PCIe设备需要发送对应的中断请求时,Pending Bits字段的对应位将被PCIe设备的内部逻辑置1,此时PCIe设备并不会使用MSI报文向中断控制器提交中断请求;

当系统软件将Mask Bits字段的相应位从1改写为0时,PCIe设备将发送MSI报文向处理器提交中断请求,同时将Pending Bit字段的对应位清零。在设备驱动程序的开发中,有时需要联合使用Mask Bits和Pending Bits字段防止处理器丢弃中断请求[2]。

MSI-X Capability结构

MSI-X Capability中断机制与MSI Capability的中断机制类似。PCIe总线引出MSI-X机制的主要目的是为了扩展PCIe设备使用中断向量的个数,同时解决MSI中断机制要求使用中断向量号连续所带来的问题。

MSI中断机制最多只能使用32个中断向量,而MSI-X可以使用更多的中断向量。目前Intel的许多PCIe设备支持MSI-X中断机制。与MSI中断机制相比,MSI-X机制更为合理。

首先MSI-X可以支持更多的中断请求,但是这并不是引入MSI-X中断机制最重要的原因。因为对于多数PCIe设备,32种中断请求已经足够了。而引入MSI-X中断机制的主要原因是,使用该机制不需要中断控制器分配给该设备的中断向量号连续。

如果一个PCIe设备需要使用8个中断请求时,如果使用MSI机制时,Message Data的[2:0]字段可以为0b000~0b111,因此可以发送8种中断请求,但是这8种中断请求的Message Data字段必须连续。在许多中断控制器中,Message Data字段连续也意味着中断控制器需要为这个PCIe设备分配8个连续的中断向量号。

有时在一个中断控制器中,虽然具有8个以上的中断向量号,但是很难保证这些中断向量号是连续的。因此中断控制器将无法为这些PCIe设备分配足够的中断请求,此时该设备的“Multiple Message Enable”字段将小于“Multiple Message Capable”。

而使用MSI-X机制可以合理解决该问题。在MSI-X Capability结构中,每一个中断请求都使用独立的Message Address字段和Message Data字段,从而中断控制器可以更加合理地为该设备分配中断资源。

与MSI Capability寄存器相比,MSI-X Capability寄存器使用一个数组存放Message Address字段和Message Data字段,而不是将这两个字段放入Capability寄存器中,本篇将这个数组称为MSI-X Table。从而当PCIe设备使用MSI-X机制时,每一个中断请求可以使用独立的Message Address字段和Message Data字段。

除此之外MSI-X中断机制还使用了独立的Pending Table表,该表用来存放与每一个中断向量对应的Pending位。这个Pending位的定义与MSI Capability寄存器的Pending位类似。MSI-X Table和Pending Table存放在PCIe设备的BAR空间中。MSI-X机制必须支持这个Pending Table,而MSI机制的Pending Bits字段是可选的。

1 MSI-X Capability结构

MSI-X Capability结构比MSI Capability结构略微复杂一些。在该结构中,使用MSI-X Table存放该设备使用的所有Message Address和Message Data字段,这个表格存放在该设备的BAR空间中,从而PCIe设备可以使用MSI-X机制时,中断向量号可以并不连续,也可以申请更多的中断向量号。

•Capability ID字段记载MSI-X Capability结构的ID号,其值为0x11。在PCIe设备中,每一个Capability都有唯一的一个ID号。

•Next Pointer字段存放下一个Capability结构的地址。

•Message Control字段,该字段存放当前PCIe设备使用MSI-X机制进行中断请求的状态与控制信息,如表6 2所示。

表6 2 MSI-X Capability结构的Message Control字段

Bits 定义 描述
15 MSI-X Enable 该位可读写,是MSI-X中断机制的使能位,复位值为0,表示不使能MSI-X中断机制。该位为1且MSI Enable位为0时,当前PCIe设备使用MSI-X中断机制,此时INTx和MSI中断机制被禁止。当PCIe设备的MSI Enble和MSI-X Enable位为0时,将使用INTx中断消息报文发出/结束中断请求。
14 Function Mask 该位可读写,是中断请求的全局Mask位,复位值为0。如果该位为1,该设备所有的中断请求都将被屏蔽;如果该位为0,则由Per Vector Mask位,决定是否屏蔽相应的中断请求。Per Vector Mask位在MSI-X Table中定义,详见下文。
10:0 Table Size MSI-X中断机制使用MSI-X Table存放Message Address字段和Message Data字段。该字段用来存放MSI-X Table的大小,该字段对系统软件只读。

Table BIR(BAR Indicator Register)。该字段存放MSI-X Table所在的位置,PCIe总线规范规定MSI-X Table存放在设备的BAR空间中。该字段表示设备使用BAR0~5寄存器中的哪个空间存放MSI-X table。

该字段由三位组成,其中0b000~0b101与BAR0~5空间一一对应。Table Offset字段。该字段存放MSI-X Table在相应BAR空间中的偏移。PBA(Pending Bit Array) BIR字段。

该字段存放Pending Table在PCIe设备的哪个BAR空间中。在通常情况下,Pending Table和MSI-X Table存放在PCIe设备的同一个BAR空间中。PBA Offset字段。该字段存放Pending Table在相应BAR空间中的偏移。

2 MSI-X Table

由上图可见,MSI-X Table由多个Entry组成,其中每个Entry与一个中断请求对应。其中每一个Entry中有四个参数,其含义如下所示。

•Msg Addr。当MSI-X Enable位有效时,该字段存放MSI-X存储器写事务的目的地址的低32位。该双字的31:2字段有效,系统软件可读写;1:0字段复位时为0,PCIe设备可以根据需要将这个字段设为只读,或者可读写。不同的处理器填入该寄存器的数据并不相同。

•Msg Upper Addr,该字段可读写,存放MSI-X存储器写事务的目的地址的高32位。

•Msg Data,该字段可读写,存放MSI-X报文使用的数据。其定义与处理器系统使用的中断控制器和PCIe设备相关。

•Vector Control,该字段可读写。该字段只有第0位(即Per Vector Mask位)有效,其他位保留。当该位为1时,PCIe设备不能使用该Entry提交中断请求;为0时可以提交中断请求。该位在复位时为0。Per Vector Mask位的使用方法与MSI机制的Mask位类似。

3 Pending Table

在Pending Table中,一个Entry由64位组成,其中每一位与MSI-X Table中的一个Entry对应,即Pending Table中的每一个Entry与MSI-X Table的64个Entry对应。与MSI机制类似,Pending位需要与Per Vector Mask位配置使用。

当Per Vector Mask位为1时,PCIe设备不能立即发送MSI-X中断请求,而是将对应的Pending位置1;当系统软件将Per Vector Mask位清零时,PCIe设备需要提交MSI-X中断请求,同时将Pending位清零。

[1] 此时PCI设备配置空间Command寄存器的“Interrupt Disable”位为1。[2] MSI机制提交中断请求的方式类似与边界触发方式,而使用边界触发方式时,处理器可能会丢失某些中断请求,因此在设备驱动程序的开发过程中,可能需要使用这两个字段。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PCI
    PCI
    +关注

    关注

    5

    文章

    689

    浏览量

    134505
  • PCIe
    +关注

    关注

    16

    文章

    1479

    浏览量

    88931
  • 中断控制器
    +关注

    关注

    0

    文章

    64

    浏览量

    9852

原文标题:PCIe中MSI和MSI-X中断机制

文章出处:【微信号:gh_339470469b7d,微信公众号:FPGA与数据通信】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    一文看懂PCIe中断机制

    PCIe 中断机制主要分为两类:一类是继承自传统 PCI 的 物理中断线(INTx)中断,通过硬件引脚触发;另一类是 MSI(Message
    的头像 发表于 03-11 09:35 504次阅读
    一文看懂PCIe<b class='flag-5'>中断</b><b class='flag-5'>机制</b>

    NVMe SSD WD Black 不起作用是怎么回事?如何解决?

    2b000000.pcie: msi#0 address_hi 0x0 address_lo 0x190[ 3.142278] pcie_plda 2c000000.pcie: host bridge /soc
    发表于 03-06 07:49

    对 M7 内核上的 memcpy 速度的一个疑问求解

    MB 的数据复制到不可缓存的内存区域,然后触发 MSI 中断,让 Linux 端(在 A53 上运行)读取数据。数据大小是固定的,没有像“托管/非托管”缓冲区那样的管理结构——M7 只是写入一个固定
    发表于 03-02 06:14

    RK806中断处理流程深度解析:从架构到调试实战

    RK806 作为瑞芯微主流 PMIC(电源管理芯片),其中断机制是实现“电源键响应、电压异常保护、休眠唤醒、 watchdog 超时处理” 等核心功能的基础。Linux 驱动基于regmap_irq框架设计,屏蔽了底层寄存器操作细节,但调试时若不理解
    的头像 发表于 02-05 13:46 2390次阅读
    RK806<b class='flag-5'>中断</b>处理流程深度解析:从架构到调试实战

    MSI100组合导航,实时出航向、速度、姿态!

    测量模块
    利科夫惯性导航
    发布于 :2026年01月14日 13:26:20

    STM32H5开发陀螺仪LSM6DSV16X(4)----中断获取SFLP四元数

    本文将介绍如何通过中断机制获取 LSM6DSV16X 传感器的 SFLP(Sensor Fusion Low Power)四元数数据。LSM6DSV16X 是一款高性能的 6 轴惯性传
    的头像 发表于 12-30 17:05 2882次阅读
    STM32H5开发陀螺仪LSM6DSV16<b class='flag-5'>X</b>(4)----<b class='flag-5'>中断</b>获取SFLP四元数

    RISC-V异常中断机制全解析

    RISC-V 作为开源、模块化的精简指令集架构,其异常中断机制是保障系统可靠运行、响应外部事件与处理内部错误的核心支撑。
    的头像 发表于 12-28 14:41 1990次阅读
    RISC-V异常<b class='flag-5'>中断</b><b class='flag-5'>机制</b>全解析

    搭载罗姆EcoGaN™ Power Stage IC的小型高效AC适配器被全球电竞品牌MSI采用

    2025年11月6日,全球知名半导体制造商 罗姆 (总部位于日本京都市)宣布,其EcoGaN™ Power Stage IC已应用于包括游戏笔记本电脑在内的MSI(微星)产品的AC适配器。 这款AC
    的头像 发表于 12-24 11:10 459次阅读

    MCU时钟管理对功耗优化方向

    低功耗时钟源 高频时钟源(如外部晶振HSE): 精度高,但功耗大(例如8MHz晶振可能消耗500μA)。 低频时钟源(如内部RC振荡器LSI/MSI): 功耗极低(如STM32的MSI时钟在100kHz
    发表于 11-24 06:16

    搭载罗姆GaN器件的小型高效AC适配器被微星科技采用

    全球知名半导体制造商罗姆(总部位于日本京都市)宣布,其EcoGaN Power Stage IC已应用于包括游戏笔记本电脑在内的MSI(微星)产品的AC适配器。
    的头像 发表于 11-14 17:23 1543次阅读

    中断机制在计算机系统中的作用,如何在e203处理器中利用外部中断来处理用户输入输出

    )设计中,中断是一种机制,用于处理外部事件并暂停CPU的正常执行流程。当外部事件发生时,如输入/输出操作或定时器/计数器到达其计数限制等,硬件会发出中断请求信号,通知CPU停止当前正在执行的任务,保存当前
    发表于 10-21 12:47

    舵机原理简述!

    舵机原理简述 舵机是一种高精度的位置伺服执行机构,广泛应用于机器人关节、无人机舵面控制、航模操控等场景,其核心功能是通过接收控制信号,精确驱动输出轴旋转到指定角度并保持稳定。以下从结构组成、控制
    的头像 发表于 08-22 10:57 2298次阅读

    IM 系列设备过载保护触发界面初始化中断机制解析与阈值建模

    一、过载保护触发界面初始化中断机制解析 (一)硬件监测与保护执行逻辑 IM 系列设备通过集成的电流传感器、温度传感器等硬件组件,实时采集设备运行参数。当设备机械负载异常增加,如传送带卡死,电机
    的头像 发表于 07-07 09:42 675次阅读
    IM 系列设备过载保护触发界面初始化<b class='flag-5'>中断</b>的<b class='flag-5'>机制</b>解析与阈值建模

    IM 系列设备过载保护机制下界面初始化中断的底层逻辑与解决方案

    ,系统立即启动保护策略。而界面初始化过程依赖于设备稳定的供电环境和充足的系统资源,当过载保护机制触发时,二者的关联被打破,导致界面初始化中断。从硬件层面看,供电模块可能因过载切断非必要电路;从软件层面讲,系统会优先
    的头像 发表于 06-27 09:58 691次阅读

    AS32X601驱动系列教程 PLIC_中断应用详解

    平台中断控制器(Platform Level Interrupt Controller,PLIC)是国科安芯AS32系列MCU芯片的中断控制器,主要对中断源进行采样,优先级仲裁和分发。各外设
    的头像 发表于 05-23 17:10 827次阅读
    AS32<b class='flag-5'>X</b>601驱动系列教程 PLIC_<b class='flag-5'>中断</b>应用详解