PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)

Posted yijingjing17

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)相关的知识,希望对你有一定的参考价值。

1.1.1    PF MSI-X Capability RegisterDetails

MSI-XCapability作为是一种可选的capability,与MSIcapability一样都是中断控制的capability,但是MSI-X要比MSI复杂,对于某个具体的PCIe设备,仅支持一种报文,虽然两种capability可以存在同一个链表中,但是两者仅有一个可以使能。MSI-XCapability中断机制与MSI Capability的中断机制类似。PCIe总线引出MSI-X机制的主要目的是为了扩展PCIe设备使用中断向量的个数,同时解决MSI中断机制要求使用中断向量号连续所带来的问题。MSI中断机制最多只能使用32个中断向量,而MSI-X可以使用更多的中断向量。

Byte Offset

Byte 3

Byte 2

Byte 1

Byte 0

 

MSI-X Control Register

Next Capability

Pointer

Capability ID (0x11)

+0x4

MSI-X Table Offset (31:3) and BIR (2:0)

+0x8

MSI-X PBA Offset (31:3) and BIR (2:0)


一下内容来自王齐老师的博客:

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机制时,MessageData[2:0]字段可以为0b000~0b111,因此可以发送8种中断请求,但是这8种中断请求的Message Data字段必须连续。在许多中断控制器中,Message Data字段连续也意味着中断控制器需要为这个PCIe设备分配8个连续的中断向量号。

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

而使用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位的定义与MSICapability寄存器的Pending位类似。MSI-X TablePending Table存放在PCIe设备的BAR空间中。MSI-X机制必须支持这个Pending Table,而MSI机制的Pending Bits字段是可选的。

1 MSI-XCapability结构

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


上图中各字段的含义如下所示。

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

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

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


·        Table BIR(BAR Indicator Register)。该字段存放MSI-XTable所在的位置,PCIe总线规范规定MSI-XTable存放在设备的BAR空间中。该字段表示设备使用BAR0~5寄存器中的哪个空间存放MSI-X table。该字段由三位组成,其中0b000~0b101BAR0~5空间一一对应。

·        Table Offset字段。该字段存放MSI-X Table在相应BAR空间中的偏移。

·        PBA(Pending Bit Array) BIR字段。该字段存放Pending TablePCIe设备的哪个BAR空间中。在通常情况下,Pending TableMSI-X Table存放在PCIe设备的同一个BAR空间中。

·        PBA Offset字段。该字段存放Pending Table在相应BAR空间中的偏移。

2 MSI-X Table

MSI-X Table的组成结构如图6‑3所示。


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

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

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

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

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

3 PendingTable

Pending Table的组成结构如图6‑4所示。


如上图所示,在Pending Table中,一个Entry64位组成,其中每一位与MSI-X Table中的一个Entry对应,即PendingTable中的每一个EntryMSI-XTable64Entry对应。与MSI机制类似,Pending位需要与Per Vector Mask位配置使用。

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





以上是关于PCIE协议解析 synopsys IP MSI-X Capability 读书笔记(12)的主要内容,如果未能解决你的问题,请参考以下文章

PCIE协议解析 synopsys IP 基本配置空间总结 读书笔记(14)

PCIE协议解析 synopsys IP loopback 读书笔记

PCIE协议解析 synopsys IP PCI Express Capability 读书笔记(13)

PCIE协议解析 synopsys IP Register配置空间 读书笔记

PCIE协议解析 synopsys IP Configuration Space Header 读书笔记

PCIE协议解析 synopsys IP Power Management Capability 读书笔记(10)