在PCIe总线中,存储器读写和I/O读写TLP使用基于地址的路由方式。TLP使用基于地址的路由时,一定要通过查询这组寄存器之后,再决定传送路径。下文以TLP1~TLP3的发送过程对地址路由过程进行说明。本小节中的例子将使用P-P2桥片接收TLP1,并将TLP1推至PCI Bus2,而PCI Bus2上的EP1将接收TLP1,完成整个地址路由。由以上叙述可以发现,PCIe总线中基于地址的路由方式与PCI总线上的基于地址的数据传递流程十分相近。......
2023-10-20
在多数x86处理器系统中,PCI设备的INTA~D#四个中断请求信号与LPC接口提供的外部引脚PIRQA~D#相连,之后PIRQA~D#与I/O APIC的中断请求信号IRQ_PIN16~19#相连。如果PCIe设备没有使用MSI中断请求机制,而是使用了Legacy INTx方式[24]模拟INTA~D#信号时,这些Assert INTx和Deassert INTx消息也由Chipset处理,并由Chipset将这些消息转换为一根硬件引脚,然后将这个硬件引脚与I/O APIC的中断输入引脚相连。其连接关系如图15-1所示。I/O APIC最终使用REDIR_TBL表,将来自输入引脚的中断请求发送至Local APIC,并由CPU进一步处理这个中断请求。
图15-1 I/O APIC如何处理PCI设备的中断请求
本书并不关心I/O APIC如何使用APIC Message将中断消息传递给Local APIC,而重点关注PCI和PCIe设备使用的中断信号与I/O APIC输入引脚IRQ_PIN16~19的连接关系。如图15-1所示,LPC的PIRQA~D#分别与IRQ_PIN16~19对应,但是PCI设备的INTA~D#与PIRQA~D#的连接关系并不是唯一的,图15-1所示的PCI设备与中断控制器连接方法只是其中一种连接方法。
而无论硬件采用何种连接结构,系统软件都需要能够正确识别是哪个PCI设备发出的中断请求,为此系统软件使用PCI中断路由表(PCI Interrupt Routing Table)记录PCI设备使用的INTA~D#与I/O APIC中断输入引脚IRQ16~19的对应关系。
如果在x86处理器系统中存在Switch,而这个Switch的每一个端口都相当于一个虚拟PCI桥,此时该Switch的下游端口连接的PCIe设备,在使用PCI Message INTx消息提交中断请求时,虚拟PCI桥可能将其转换为其他PCI Message INTx消息。在虚拟PCI桥中,Primary总线和Secondary总线PCI Message INTx消息的对应关系如表15-1所示。
表15-1 虚拟PCI桥Primary总线与Secondary总线间INTx消息间的映射关系
PCIe设备发送的PCI Message INTx消息首先到达虚拟PCI桥的Secondary总线,之后虚拟PCI桥根据PCIe设备的设备号将这些PCI Message INTx消息转换为Primary总线合适的虚拟中断信号。如设备号为1的PCIe设备使用PCI Message INTA消息进行中断请求时,该消息在通过虚拟PCI桥后,将被转换为PCI Message INTB消息,然后继续传递该消息报文,最终PCI Message INTx消息将到达RC,并由RC将该消息报文转换为虚拟中断信号INTx,并与I/O APIC的中断请求引脚IRQ_PIN16~19相连。(www.chuimin.cn)
然而直接使用PCIe总线提供的标准方法会带来一些问题。因为一条PCIe链路只能挂接一个EP,这个EP的设备号通常为0,而这些设备使用的虚拟中断信号多为INTA#,因此这些PCIe设备通过Switch的虚拟PCI-to-PCI桥进行中断路由后,将使用虚拟中断信号INTA#,并与I/O APIC的IRQ_PIN16引脚相连,并不会使用其他IRQ_PIN引脚,这造成了IRQ_PIN16的负载过重。其连接拓扑结构如图15-2所示。
图15-2 PCI Message中断路由
如上图所示,PCIe设备使用的INTx中断请求都最终使用I/O APIC的IRQ_PIN16引脚,从而造成了这个引脚所申请的中断过于密集,因此采用这种中断路由方法并不合理。为此Intel在5000系列的Chipset中使用了Interrupt Swizzling技术将这些来自PCIe设备的中断请求平均分配到I/O APIC的IRQ_PIN16~19引脚中。
在图15-2中,Chipset设置了一个INTSWZCTRL寄存器,通过这些寄存器可以将PCIe设备提交的中断请求均衡地发送至I/O APIC中。如果一个EP对应的INTSWZCTRL位为0,则该设备的INTA#将与IRQ_PIN16相连;如果为1,将与IRQ_PIN17相连,并以此类推,最终实现中断请求的负载均衡。
在一个x86处理器系统中,PCI设备或者PCIe设备使用的中断信号INTA~D#与I/O A-PIC的IRQ_PIN16~19之间的对应关系并不明确,各个厂商完全可以按照需要定制其映射关系。这为系统软件的设计制造了不小的困难。为此BIOS为系统软件提供了一个PCI中断路由表,存放这个映射关系,ACPI规范将这个中断路由表存放在DSDT中。
值得注意的是,每一个HOST主桥和每一条PCI总线都含有一个中断路由表。在讲述PCI中断路由表之前,我们简要回顾Linux系统如何为PCI设备分配中断向量。
有关PCI Express体系结构导读的文章
在PCIe总线中,存储器读写和I/O读写TLP使用基于地址的路由方式。TLP使用基于地址的路由时,一定要通过查询这组寄存器之后,再决定传送路径。下文以TLP1~TLP3的发送过程对地址路由过程进行说明。本小节中的例子将使用P-P2桥片接收TLP1,并将TLP1推至PCI Bus2,而PCI Bus2上的EP1将接收TLP1,完成整个地址路由。由以上叙述可以发现,PCIe总线中基于地址的路由方式与PCI总线上的基于地址的数据传递流程十分相近。......
2023-10-20
Capric卡一共需要处理三种中断请求,分别为DMA写完成、DMA读完成和错误中断请求。源代码12-9 Capric卡的中断服务例程在capric_probe函数中,capric_interrupt中断服务例程被request_irq函数注册到Linux系统的irq_desc中断描述符表中,并与Linux系统的外部中断处理函数do_IRQ挂接,当Capric卡通过MSI中断方式提交外部中断请求后,do_IRQ函数将最终调用capric_interrupt函数完成相应的中断处理。......
2023-10-20
但是PCI总线规范没有规定PCI设备的INTx信号如何与中断控制器的IRQ_PINx#信号相连,这为系统软件的设计带来了一定的困难,为此系统软件使用中断路由表存放PCI设备的INTx信号与中断控制器的连接关系。在一些简单的嵌入式处理器系统中,Firmware并没有提供中断路由表,系统软件开发者需要事先了解PCI设备的INTx信号与中断控制器的连接关系。此时外部设备与中断控制器的连接关系由硬件设计人员指定。......
2023-10-20
在PowerPC处理器系统中,MSI机制的实现过程是PCIe设备向MSIIR寄存器写入指定的数据。MPIC中断控制器发现该寄存器被写入后,将向处理器提交中断请求。处理器收到这个中断请求后,将通过读取MPIC中断控制器的ACK寄存器确定中断向量,并依此确定中断源。表10-3 MSIIR寄存器PCIe设备通过MSI机制,向此寄存器写入数据时,MSIR0~7寄存器的相应位SH0~31将有一位置1。......
2023-10-20
PCI设备保证在数据到达目的地之后,再提交中断请求。但是使用MSI中断机制可以取消PCI总线这个INTx#边带信号,可以解决使用INTx中断机制所带来的数据完整性问题。而更为重要的是,PCI设备使用MSI中断机制,向处理器系统提交中断请求时,还可以通知处理器系统产生该中断的原因,即通过不同中断向量号表示中断请求的来源。本书将在第10章详细介绍MSI中断机制。......
2023-10-20
PCI总线提供了INTA#、INTB#、INTC#和INTD#四个中断请求信号,PCI设备借助这些中断请求信号,使用电平触发方式向处理器提交中断请求。PCI设备的这些中断请求信号可以通过某种规则进行线与,之后与中断控制器的中断请求信号线相连。而处理器系统需要预先知道这个规则,以便正确处理来自不同PCI设备的中断请求,这个规则也被称为中断路由表,有关中断路由表的详细描述见第1.4.2节。......
2023-10-20
在PCIe总线中,MSI和MSI-X中断机制使用存储器写请求TLP向处理器提交中断请求,下文为简便起见将传递MSI/MSI-X中断消息的存储器写报文简称为MSI/MSI-X报文。这些PCI设备可能并不支持MSI/MSI-X中断机制,因此必须使用INTx信号进行中断请求。目前绝大多数PCIe设备使用MSI或者MSI-X中断机制提交中断请求。与MSI中断机制相比,MSI-X中断机制更为合理。......
2023-10-20
第4.1.4节简单介绍了在PCIe总线中,如何使用Switch进行链路扩展,本节主要介绍Switch[7]的内部结构。值得注意的是,在Switch内部还具有一条虚拟的PCI总线,用于连接各个虚拟PCI桥,系统软件在初始化Switch时,需要为这条虚拟PCI总线编号。Switch的组成结构如图4-10所示。在PCIe体系结构中,Switch处于核心地位。深入理解PCI桥是理解Switch软件组成结构的基础。目前PCIe总线提出了MRA-Switch的概念,这种Switch与传统Switch有较大的区别,有关这部分内容详见第13.3节。......
2023-10-20
相关推荐