您好,欢迎访问三七文档
PCIESS提供了14种中断,能处理MSI和legacy中断。当作为EP端时,PCIESS能够产生MSI或者legacy中断,但是一个PCIe设备不能同时产生这两种中断。EP端能产生的中断类型在配置的时候配置好的。RC端能处理MSI和legacy中断。2.14.1中断分配2.14.2EP模式产生的中断当PCIESS作为EP端的时候,会产生legacy中断或者MSI中断,最终在RC设备端产生一个中断。每个PCIe功能只能产生一种类型的中断,这种类型由配置的时候决定的。2.14.2.1EP模式产生的legacy中断EP设备能够通过in-bandAssert_INTx/Deassert_INTx消息在RC端产生一个PCIlegacy中断。在RC端口产生的中断类型实际是根据EP产生中断的配置信息决定的,可能是INTA,INTB,INTC,或者INTD。在配置空间寄存器中可以查看相关中断寄存器。为了产生一个中断,需要以下几步:1.设置LEGACY_X_IRQ_ENABLE_SET是能够产生legacy中断。2.向EP_IRQ_SET寄存器写1来使能legacy中断。3.AnassertINTA/B/C/Dmessageisautomaticallysent4.向EP_IRQ_CLR寄存器写1来disablethelegacyinterruptbysendingadeassertINTA/B/C/Dmessage一旦产生一个assertmessage,知道产生一个deassertmessage才会产生下一个assertmessage。因此,每次只会有一个中断被挂起。这个挂起状态可以通过EP_IRQ_STATUS寄存器来查看。2.14.2.2EP模式产生的MSI中断一个PCIE32位内存的写事务会产生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数据寄存器一样。Inthedata,theLSBscanbemodifiedtoreflecttheappropriateMSIeventthatneedstobenotifiedtorootcomplex。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.3RC端产生的中断按照PCIE基本标准,RC端口只能够接收中断。没有机制能够产生从RC到EP的中断。但是,PCIESS的确支持从RC向EP产生中断。这个过程和RC端产生和接受MSI中断类似,除了这个功能在EP端同样可以使用。RC端可以通过PCIE链路写MSI_IRQ寄存器来产生一个32位的EP中断。PCIESS遵循PCIEMSI规定,不需要对同一个MSI向量计算多次写。只有一个写才会被处理,在清中断之前其余的写可能会丢失。2.14.4EP端接受中断PCIE规定并没有说EP可以接受legacy中断。因此,只会用事件来映射中断。在EP设备上不支持MSI中断,但是PCIESS确实支持这些中断。在EP端向MSI_IRQ寄存器写入MSI向量值的时候会产生32种事件中的一种。通过写寄存器由链路传送的这些中断也可能来自另一个EP设备,该设备在EPBAR0空间的合适中断寄存器操作。这由软件设计者来决定中断来源的一种方式。在32个MSI中断事件中,每4个MSI中断共享一个中断事件号,能够向CPU产生中断。通过设置MSIn_IRQ_EN_SET寄存器来使能MSI中断。设置MSIn_IRQ_EN_CLR寄存器来清楚使能。
本文标题:PCIE中断支持
链接地址:https://www.777doc.com/doc-4696761 .html