首页 理论教育从存储器域到PCI总线的地址空间转换

从存储器域到PCI总线的地址空间转换

【摘要】:图2-4 MPC8548处理器存储器域到PCI域的转换在介绍MPC8548处理器如何使用Outbound寄存器组进行存储器域地址空间到PCI总线域地址空间的转换之前,本节将首先介绍Outbound寄存器组中的相应寄存器。该位是Outbound窗口的使能位,为1表示当前Outbound寄存器组描述的存储器地址空间到PCI总线地址空间的映射关系有效;为0表示无效。检查LAWBAR和LAWAR寄存器,判断当前36位的物理地址是否属于PCI总线空间。

MPC8548处理器使用ATMU(Address Translation and Mapping Unit)寄存器组进行存储器域到PCI总线域,以及PCI总线域到存储器域的地址映射。ATMU寄存器组由两大组寄存器组成,分别为Outbound和Inbound寄存器组。其中Outbound寄存器组将存储器域的地址转换为PCI总线域的地址,而Inbound寄存器组将PCI总线域的地址转换为存储器域的地址。

在MPC8548处理器中,只有当CPU读写访问的地址范围在Outbound寄存器组管理的地址空间之内时,HOST主桥才能接收CPU的读写访问,并将CPU在存储器域上的读写访问转换为PCI总线域上的读写访问,然后才能对PCI设备进行读写操作。

如图2-2所示,CPU对存储器域的地址访问,首先使用CCB总线事务,如果所访问的地址在Cache中命中,则从Cache中直接获得数据,否则将从存储器域中获取数据。而在绝大多数情况下,外部设备使用的地址空间是不可Cache[13]的,所以发向PCI设备的CCB总线事务通常不会与Cache进行数据交换。

如果CCB总线事务使用的地址在HOST主桥的Outbound寄存器窗口中命中,HOST主桥将接收这个CCB总线事务,并将其转换为PCI总线事务之后,再发送到PCI总线上。MPC8548处理器的每一个HOST主桥都提供了5个Outbound寄存器窗口来实现存储器域地址到PCI总线域地址的映射,其映射过程如图2-4所示。

978-7-111-29822-9-Part01-14.jpg

图2-4 MPC8548处理器存储器域到PCI域的转换

在介绍MPC8548处理器如何使用Outbound寄存器组进行存储器域地址空间到PCI总线域地址空间的转换之前,本节将首先介绍Outbound寄存器组中的相应寄存器。Outbound寄存器组的地址偏移、属性和复位值如表2-2所示。

表2-2 PCI/X ATMU Outbound寄存器组

978-7-111-29822-9-Part01-15.jpg

1.POTARn和POTEARn寄存器

在POTARn和POTEARn寄存器中保存当前Outbound窗口在PCI总线域中的64位地址空间的基地址。这两个寄存器的主要字段如下。

●POTARn寄存器的TEA字段,第0~11位,保存PCI总线地址空间的43~32位。

●POTARn寄存器的TA字段,第12~31位,保存PCI总线地址空间的31~12位[14]

●POTEARn寄存器的TEA字段,第12~31位,保存PCI总线地址空间的63~44位。

2.POWBARn寄存器和POWARn寄存器

而POWBARn寄存器保存当前Outbound窗口在存储器域中的36位地址空间的基地址[15],其主要字段如下。(www.chuimin.cn)

●WBEA字段保存存储器域地址的第0~3位。

●WBA字段保存存储器域地址的第4~23[16]位。POWARn寄存器描述Outbound窗口的属性,其主要字段如下。

●EN位,第0位。该位是Outbound窗口的使能位,为1表示当前Outbound寄存器组描述的存储器地址空间到PCI总线地址空间的映射关系有效;为0表示无效。

●RTT字段,第12~15位,该字段描述当前窗口的读传送类型,为0b0100表示存储器读,为0b1000表示I/O读。

●WTT字段,第16~19位,该字段描述当前窗口的写传送类型,为0b0100表示存储器写,为0b1000表示I/O写。在PCIe总线控制器中,RTT字段和WTT字段还可以支持对配置空间的读写操作。

●OWS字段,第26~31位,该字段描述当前窗口的大小,Outbound窗口的大小在

4KB~64GB之间,其值为2OWS+1

3.使用Outbound寄存器访问PCI总线地址空间

MPC8548处理器使用Outbound寄存器组访问PCI总线地址空间的步骤如下。

(1)首先MPC8548处理器需要将程序使用的32位有效地址EA(Effective Address)转换为41位的虚拟地址VA(Virtual Address)。E500 V2内核不能关闭MMU(Memory Manage-ment Unit),因此不能直接访问物理地址。

(2)MPC8548处理器通过MMU将41位的虚拟地址转换为36位的物理地址。在E500V2内核中,物理地址是36位(缺省是32位,需要使能)。

(3)检查LAWBAR和LAWAR寄存器,判断当前36位的物理地址是否属于PCI总线空间。在MPC8548中定义了一组LAWBAR和LAWAR寄存器对,每一对寄存器描述当前物理空间是与PCI总线、PCIe总线、DDR还是RapidIO空间对应。该组寄存器的详细说明见MPC8548 PowerQUICC IIITM Integrated Host Processor Family Reference Manual。如果CPU访问的空间为PCI总线空间,则执行第(4)步,否则处理器将不会访问PCI地址空间。

(4)判断当前36位物理地址是否在POWBARn寄存器1~4描述的窗口中,如果在则将36位的处理器物理地址通过寄存器POTARn和POTEARn转换为64位的PCI总线地址,然后HOST主桥将来自处理器的读写请求发送到PCI总线上;如果不在POWBARn寄存器1~4描述的窗口中,POWBAR0寄存器作为缺省窗口,接管这个存储器访问,并使用寄存器PO-TAR0和POTEAR0,将处理器物理地址转换为PCI总线地址,当然在正常设计中很少出现这种情况。

许多系统软件,将Outbound窗口两边的寄存器使用“直接相等”的方法进行映射,将存储器域的地址与PCI总线地址设为相同的值。但是系统软件程序员务必注意这个存储器地址与PCI总线地址是分属于存储器域与PCI总线域的,这两个值虽然相等,但是所代表的地址并不相同,一个属于存储器域,而另一个属于PCI总线域。