注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

路雷米的博客

人生最难的就是在热爱和生计之间做选择, 愿每个人这一生 既对得起梦想又担得责任

 
 
 

日志

 
 

PCIE中断支持  

2015-06-07 14:58:45|  分类: PCI-PCIE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

PCIESS能处理MSI和legacy中断。当作为EP端时,PCIESS能够产生MSI或者legacy中断,但是一个PCIe设备不能同时产生这两种中断。EP端能产生的中断类型在配置的时候配置好的。RC端能处理MSI和legacy中断

2.14.1 中断分配

2.14.2 EP模式产生的中断

当PCIESS作为EP端的时候,会产生legacy中断或者MSI中断,最终在RC设备端产生一个中断。每个PCIe功能只能产生一种类型的中断,这种类型由配置的时候决定的。

2.14.2.1 EP模式产生的legacy中断

EP设备能够通过in-band Assert_INTx / Deassert_INTx消息在RC端产生一个PCI legacy中断。在RC端口产生的中断类型实际是根据EP产生中断的配置信息决定的,可能是INTA,INTB,INTC,或者INTD。配置空间寄存器中可以查看相关中断寄存器

为了产生一个Legacy中断,需要以下几步:

1. 设置LEGACY_X_IRQ_ENABLE_SET是能够产生legacy中断。

2. 向EP_IRQ_SET寄存器写1来使能legacy中断。

3. Anassert INTA/B/C/D message is automatically sent

4. 向EP_IRQ_CLR寄存器写1来disable the legacy interrupt by sending a deassert INTA/B/C/D message

一旦产生一个assert message,直到产生一个deassert message才会产生下一个assert message。

因此,每次只会有一个中断被挂起。这个挂起状态可以通过EP_IRQ_STATUS寄存器来查看。

2.14.2.2 EP模式产生的MSI中断

一个PCIE 32位内存的写事务会产生MSI中断。PCIE系统软件在初始化EP设备的时候会配置在写事务中用到的地址和数据。MSI机制支持多个中断,每个设备能够请求最多32个中断向量,尽管分配的中断可能没有请求的数目多

产生一个MSI中断,需要下面几步:

1. 在设备中确保支持MSI(设置MSI_CAP的MSI_EN位,关闭legacy中断)。

2. 在本地PCIe配置空间中读取MSI地址寄存器的值(32位地址读取MSI_LOW32寄存器的值,64位地址读取MSI_UP32和MSI_LOW32(在MSI_CAP寄存器中使能64BIT_EN位))

3. 在本地PCIe配置空间中读取MSI数据寄存器的值(读取MSI_DATA寄存器的值)

4. 确定分配给设备的MSI向量数目(和请求数目)。

5. 根据分配的MSI中断数目,发送一个内存写请求,地址和MSI地址寄存器一样,数据和MSI数据寄存器一样。In the data, the LSBs can be modified to reflect the appropriateMSI event that needs to be notified to root complex。

6. 如果目的PCIE地址不可以直接到达的时候,内存写请求也可以通过outbound地址转换接口进行路由。

在RC端产生MSI中断,实际上有MSI_IRQ寄存器决定。MSI中断由RC端向MSI_IRQ寄存器写入MSI向量值而激发的32个事件中的一种产生的。在EP端能够发送MSI中断之前,系统软件必须配置好MSI数据寄存器和地址寄存器,这样确保用合适的MSI向量值来使用MSI_IRQ寄存器。

如果没有软件支持,用户程序需要确保EP端能够用合适的MSI向量值发送内存写事务到RC端的MSI_IRQ寄存器中。

对每个PCIE设备来说,一个EP端设备只能向RC产生MSI中断。但是PCIESS规定允许从EP端向另一个EP端产生MSI中断。为了能够向另一个EP端产生中断,一个EP端能够将内存的写映射到另一个EP设备的类似寄存器。这个内存写应该在BAR0内存空间。

2.14.3 RC端产生的中断

按照PCIE基本标准,RC端口只能够接收中断。没有机制能够产生从RC到EP的中断。但是,PCIESS的确支持从RC向EP产生中断。这个过程和RC端产生和接受MSI中断类似,除了这个功能在EP端同样可以使用。

RC端可以通过PCIE链路写MSI_IRQ寄存器来产生一个32位的EP中断。PCIESS遵循PCIE MSI规定,不需要对同一个MSI向量计算多次写。只有一个写才会被处理,在清中断之前其余的写可能会丢失。

2.14.4 EP端接受中断

PCIE规定并没有说EP可以接受legacy中断。因此,只会用事件来映射中断。在EP设备上不支持MSI中断,但是PCIESS确实支持这些中断。在EP端向MSI_IRQ寄存器写入MSI向量值的时候会产生32种事件中的一种。

通过写寄存器由链路传送的这些中断也可能来自另一个EP设备,该设备在EP BAR0空间的合适中断寄存器操作。这由软件设计者来决定中断来源的一种方式。

在32个MSI中断事件中,每4个MSI中断共享一个中断事件号,能够向CPU产生中断。通过设置MSIn_IRQ_EN_SET寄存器来使能MSI中断。设置MSIn_IRQ_EN_CLR寄存器来清除使能

  评论这张
 
阅读(508)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018