【摘要】:在PCIe总线中,存储器读写和I/O读写TLP使用基于地址的路由方式。TLP使用基于地址的路由时,一定要通过查询这组寄存器之后,再决定传送路径。下文以TLP1~TLP3的发送过程对地址路由过程进行说明。本小节中的例子将使用P-P2桥片接收TLP1,并将TLP1推至PCI Bus2,而PCI Bus2上的EP1将接收TLP1,完成整个地址路由。由以上叙述可以发现,PCIe总线中基于地址的路由方式与PCI总线上的基于地址的数据传递流程十分相近。
在PCIe总线中,存储器读写和I/O读写TLP使用基于地址的路由方式。PCIe设备使用的地址路由方式与PCI设备使用的地址路由方式类似。只是PCIe设备使用TLP进行数据传送,而PCI设备使用总线周期进行数据传送。使用地址路由方式进行数据传递的TLP格式如第6.3.1节的图6-8所示,在这类TLP中包含目的设备的地址。
当一个TLP进行数据传递时,可能会经过多级Switch,最终到达目的地。Switch将根据存储器读写和I/O读写请求TLP的目的地址将报文传递到合适的Egress端口上。如图4-10所示,在一个Switch中包含了多个虚拟PCI-to-PCI桥。在Switch中有几个端口,就包含几个虚拟PCI-to-PCI桥。
在虚拟PCI-to-PCI桥的配置寄存器空间中,包含一个桥片能够接收的物理地址范围。PCIe总线通过这个物理地址范围实现基于地址的路由。这段配置寄存器如图6-4所示。当系统软件初始化PCI总线时,将合理地设置这些寄存器,之后当TLP通过这些Switch时将根据这些寄存器选择合适的路径。

图6-4 与地址路由相关的PCI桥片配置寄存器
图6-4中的配置寄存器描述了该虚拟PCI-to-PCI桥下游PCI子树使用的三组空间范围,分别为I/O、存储器和可预取的存储器空间,分别用Base和Limit两类寄存器描述,其中Base寄存器表示可访问空间的基地址,Limit寄存器表示可访问空间的大小。TLP使用基于地址的路由时,一定要通过查询这组寄存器之后,再决定传送路径。这组寄存器的使用方法与PCI总线中的PCI桥兼容。
其中TLP“从上游端口发送到下游端口”与“从下游端口发送到上游端口”的路由过程略有不同,如图6-5所示。下文以TLP1~TLP3的发送过程对地址路由过程进行说明。TLP1~TLP3的描述如下。
●TLP1是一个存储器或者I/O请求TLP,由RC发出,并通过一个Switch发向EP1。存储器和I/O读写请求TLP使用这种地址路由方式。TLP1将从Switch的上游端口传送到下游端口。
●TLP2是一个存储器或者I/O请求TLP,由EP2发出,并通过一个Switch发向RC。当PCIe设备进行DMA读写操作时,将使用这种地址路由方式。TLP2将从Switch的下游端口传送到上游端口。
●TLP3是一个存储器或者I/O请求TLP,由一个EP2发出,并通过一个Switch后发送到另外一个EP。在x86处理器系统中,这种用法并不常见。但是在某些大规模处理器系统中,具有这种应用方式。此时TLP3将从Switch的下游端口传送到另外一个下游端口。
1.TLP1的传送过程
当TLP1从RC发向EP1时,这个TLP1为I/O或者存储器报文,其中TLP1目的地址在EP1的BAR空间中。当处理器访问EP的BAR空间时,需要使用该类TLP。值得注意的是这个数据报文在通过RC时需要进行地址转换。(www.chuimin.cn)

图6-5 基于地址的路由寻径方式
TLP1首先通过PCI Bus0发向Switch,并通过Switch的Upstream端口到达P-P1桥片,P-P1桥片首先根据配置寄存器中的Limit和Base寄存器决定是否接收TLP1。如果Switch不接收TLP1,则将该TLP作为不支持的请求(Unsupported Request)处理,此时如果TLP1需要回应报文,Switch将发出完成报文,该报文的状态为UR(Unsupported Request)。
如果Switch接收TLP1,则表示TLP1所访问的地址在该Switch下游端口所连接的EP或者Switch中,此时Switch将TLP1从PCI Bus0推至PCI Bus1中,即穿越P-P1桥片。TLP1到达PCI Bus1后将同时查找P-P2和P-P3桥片配置寄存器中的Limit和Base寄存器,决定是P-P2还是P-P3桥片接收TLP1。本小节中的例子将使用P-P2桥片接收TLP1,并将TLP1推至PCI Bus2,而PCI Bus2上的EP1将接收TLP1,完成整个地址路由。
2.TLP2的传送过程
当TLP2从EP2发向RC时,一般来说该TLP将访问处理器系统的主存储器。此时TLP2首先将请求发至P-P3桥片,在P-P3桥片配置寄存器的Limit和Base寄存器中当然不会包含TLP2所访问的地址,此时P-P3桥片将TLP2推至PCI Bus1。
TLP“从下游端口向上游端口”与“从TLP从上游端口向下游端口”进行传递时,桥片的处理机制有所不同,从上游端口向下游端口传递时,如果桥片配置寄存器的Limit和Base寄存器包含该TLP的访问地址时,桥片将接收此TLP,否则不接收该TLP。而从下游端口向上游端口传递时,如果桥片配置寄存器的Limit和Base寄存器不包含该TLP的访问地址时,桥片将接收该TLP,并将其推至桥片的上游PCI总线。值得注意的是,这两种地址译码方式都属于PCI总线的正向译码。
当TLP2到达PCI Bus1时,首先检查在PCI Bus1总线上的P-P2桥片是否可以接收此TLP,如果不能接收则TLP2通过P-P1桥片传递到PCI Bus0,即到达RC。
在MPC8548处理器中,到达RC的TLP首先通过Inbound寄存器进行地址转换,将TLP的PCI总线地址转换为处理器的地址,然后访问处理器中相应的存储器空间;对于x86处理器而言,MCH也会完成PCI域地址空间到存储器域地址空间的转换,然后访问处理器中相应的存储器空间。
3.TLP3的传送过程
TLP3的传递方式与TLP2的传递方式有些类似,当TLP3传递到PCI Bus1时,P-P2桥片将接收TLP3,并将TLP3传递到PCI Bus2上的EP1中。由以上叙述可以发现,PCIe总线中基于地址的路由方式与PCI总线上的基于地址的数据传递流程十分相近。TLP3在PCI总线域上进行数据传递,因此不需要进行PCI总线域到存储器域的地址转换。
相关推荐