PCI总线定义了两类配置请求,一类是Type 00h配置请求,另一类是Type 01h配置请求。PCI总线使用这些配置请求访问PCI总线树上的设备配置空间,包括PCI桥和PCI Agent设备的配置空间。当x86处理器对CONFIG_DATA寄存器进行读写操作时,HOST主桥将决定向PCI总线发送Type 00h配置请求还是Type 01h配置请求。在PCI总线事务的地址周期中,这两种配置请求总线事务的不同反映在PCI总线的AD[31∶0]信号线上。......
2023-10-20
HOST主桥是一个很特别的桥片,其主要功能是隔离处理器系统的存储器域与处理器系统的PCI总线域,管理PCI总线域,并完成处理器与PCI设备间的数据交换。处理器与PCI设备间的数据交换主要由“处理器访问PCI设备的地址空间”和“PCI设备使用DMA机制访问主存储器”这两部分组成。
为简便起见,下面将处理器系统的存储器域简称为存储器域,而将处理器系统的PCI总线域称为PCI总线域,存储器域和PCI总线域的详细介绍见第2.1节。值得注意的是,在一个处理器系统中,有几个HOST主桥,就有几个PCI总线域。
HOST主桥在处理器系统中的位置并不相同,如PowerPC处理器将HOST主桥与处理器集成在一个芯片中。而有些处理器不进行这种集成,如x86处理器使用南北桥结构,处理器内核在一个芯片中,而HOST主桥在北桥中。但是从处理器体系结构的角度看,这些集成方式并不重要。
PCI设备通过HOST主桥访问主存储器时,需要与处理器的Cache进行一致性操作,因此在设计HOST主桥时需要重点考虑Cache一致性操作。在HOST主桥中,还含有许多数据缓冲,以支持PCI总线的预读机制。(www.chuimin.cn)
HOST主桥是联系处理器与PCI设备的桥梁。在一个处理器系统中,每一个HOST主桥都管理了一棵PCI总线树,在同一棵PCI总线树上的所有PCI设备属于同一个PCI总线域。如图1-1所示,HOST主桥x之下的PCI设备属于PCI总线x域,而HOST主桥y之下的PCI设备属于PCI总线y域。在这棵总线树上的所有PCI设备的配置空间都由HOST主桥通过配置读写总线周期访问。
如果HOST主桥支持PCI V3.0规范的Peer-to-Peer数据传送方式,那么分属不同PCI总线域的PCI设备可以直接进行数据交换。如图1-1所示,如果HOST主桥y支持Peer-to-Peer数据传送方式,PCI设备y01可以直接访问PCI设备01或者PCI设备11,而不需要通过处理器的参与。但是这种跨越总线域的数据传送方式在PC架构中并不常用,在PC架构中,重点考虑的是PCI设备与主存储器之间的数据交换,而不是PCI设备之间的数据交换。此外在PC架构中,具有两个HOST主桥的处理器系统也并不多见。
在PowerPC处理器中,HOST主桥可以通过设置Inbound寄存器,使得分属于不同PCI总线域的设备可以直接通信。许多PowerPC处理器都具有多个HOST主桥,有关PowerPC处理器使用的HOST主桥详见第2.2节。
有关PCI Express体系结构导读的文章
PCI总线定义了两类配置请求,一类是Type 00h配置请求,另一类是Type 01h配置请求。PCI总线使用这些配置请求访问PCI总线树上的设备配置空间,包括PCI桥和PCI Agent设备的配置空间。当x86处理器对CONFIG_DATA寄存器进行读写操作时,HOST主桥将决定向PCI总线发送Type 00h配置请求还是Type 01h配置请求。在PCI总线事务的地址周期中,这两种配置请求总线事务的不同反映在PCI总线的AD[31∶0]信号线上。......
2023-10-20
PCIe总线规范将这种“对PCIe设备配置空间”的读写访问方式称为ECAM机制。CPU可以直接对这段特殊的存储器域地址空间进行访问,从而访问PCIe设备的配置空间。使用ECAM机制与使用CONFIG_ADDRESS和CONFIG_DATA这对寄存器,间接访问PCIe设备的配置空间有较大的不同。其中raw_pci_ops函数指针使用0xCF8和0xCFC两个I/O端口寄存器访问PCI总线配置空间,而raw_pci_ext_ops函数使用ECAM方式访问PCI总线配置空间。虽然Montevina平台提供了256MB的PCIe设备使用的配置空间,但是这些空间的实际利用率较低。......
2023-10-20
PCI设备进行上电初始化时,将E2PROM中的信息读到PCI设备的配置空间中作为初始值。这个过程由硬件逻辑完成,绝大多数PCI设备使用这种方式初始化其配置空间。在PCI Agent设备的配置空间中包含了许多寄存器,这些寄存器决定了该设备在PCI总线中的使用方法,本节不会全部介绍这些寄存器,因为系统软件只对部分配置寄存器感兴趣。PCI Agent设备使用的配置空间如图2-9所示。图2-9 PCI Agent设备的配置空间Revision ID和Class Code寄存器这两个寄存器只读。......
2023-10-20
在PCI桥的配置空间中使用两个BAR寄存器的原因是这两个32位的寄存器可以组成一个64位地址空间。在PCI桥的配置空间中,有许多寄存器是PCI桥所特有的。图2-10 PCI桥的配置空间在PCI桥中,与Secondary bus相关的寄存器包括两大类。......
2023-10-20
本节重点讲述PCI桥如何将Type 01h配置请求转换为Type 00h配置请求。下面将举例说明PCI总线配置请求的转换原则,并以图2-8为例说明处理器如何访问PCI设备01和PCI设备31的配置空间。PCI总线规定Type01h配置请求只能由PCI桥负责处理。而1<Bus Number≤3,所以PCI桥1将接收来自PCI总线0的Type 01h配置请求,并将这个配置请求直接下推到PCI总线1。......
2023-10-20
在PCIe总线中,存储器读写和I/O读写TLP使用基于地址的路由方式。TLP使用基于地址的路由时,一定要通过查询这组寄存器之后,再决定传送路径。下文以TLP1~TLP3的发送过程对地址路由过程进行说明。本小节中的例子将使用P-P2桥片接收TLP1,并将TLP1推至PCI Bus2,而PCI Bus2上的EP1将接收TLP1,完成整个地址路由。由以上叙述可以发现,PCIe总线中基于地址的路由方式与PCI总线上的基于地址的数据传递流程十分相近。......
2023-10-20
Linux PowerPC初始化PCI总线树的步骤与Linux x86类似,也调用了一些Linux系统中与PCI总线相关的通用函数。但是PowerPC处理器使用的HOST主桥与x86处理器并不相同,因此Linux PowerPC初始化PCI总线树的过程与Linux x86有些差别。本节以MPC8572处理器为例,说明Linux PowerPC初始化PCI总线树的过程。Linux PowerPC在引入了Open Firmware机制[22]后,使用dts文件管理PCI总线控制器。Linux PowerPC执行完毕setup_arch函数后,还会执行一些和PCI总线......
2023-10-20
系统软件使用CFG_ADDR和CFG_DATA寄存器访问PCI设备的配置空间,而使用INT_ACK寄存器访问挂接在PCI总线上的中断控制器的中断向量,HOST主桥这3个寄存器的地址偏移和属性如表2-1所示。当该位为1时,HOST主桥使能对PCI设备配置空间的访问,当HOST处理器对CFG_DATA寄存器进行访问时,HOST主桥将对这个寄存器的访问转换为PCI配置读写总线事务并发送到PCI总线上。下面以源代码2-1为例说明PowerPC处理器如何访问PCI配置空间。......
2023-10-20
相关推荐