php 網(wǎng)站開發(fā)收費客戶資源買賣平臺
接前一篇文章:《PCI Express體系結(jié)構(gòu)導讀》隨記 —— 第I篇 第2章 PCI總線的橋與配置(7)
2.2 HOST主橋
MPC8548處理器的拓撲結(jié)構(gòu)如圖2-2所示:
2.2.2 存儲器域地址空間到PCI總線域地址空間的轉(zhuǎn)換
MPC8548處理器使用ATMU(Address Translation and Mapping Unit)寄存器組進行存儲器域到PCI總線域、以及PCI總線域到存儲器域的地址映射。ATMU寄存器組由兩大寄存器組組成,分別為Outbound和Inbound寄存器組。其中,Outbound寄存器組將存儲器域的地址轉(zhuǎn)換為PCI總線域的地址,而Inbound寄存器組將PCI總線域的地址轉(zhuǎn)換為存儲器域地址。
在MPC8548處理器中,只有當CPU讀寫訪問的地址范圍在Outbound寄存器組管理的地址空間之內(nèi)時,HOST主橋才能接收CPU的讀寫訪問,并將CPU在存儲器域上的讀寫訪問轉(zhuǎn)換為PCI總線域上的讀寫訪問,然后才能對PCI設備進行讀寫操作。
如圖2-2所示,CPU對存儲器域的地址訪問,首先使用CCB(Core Complex Bus)總線事務。如果所訪問的地址在Cache中,則從Cache中直接獲得數(shù)據(jù),否則將從存儲器域中獲取數(shù)據(jù)。而在絕大多數(shù)情況下,外部設備使用的地址空間是不可Cache的(PCI設備使用的ROM空間可以是“可Cache”的地址空間),所以發(fā)向PCI設備的CCB總線事務通常不會與Cache進行數(shù)據(jù)交換。
如果CCB總線事務使用的地址在HOST主橋的Outbound寄存器窗口中命中,HOST主橋?qū)⒔邮者@個CCB總線事務,并將其轉(zhuǎn)換為PCI總線事務,之后再發(fā)送到PCI總線上。MPC8548處理器的每一個HOST主橋都提供了5個Outbound寄存器窗口來實現(xiàn)存儲器域地址到PCI總線域地址的映射,其映射過程如圖2?4所示。
在介紹MPC8548處理器如何使用Outbound寄存器組進行存儲器域地址空間到PCI總線域地址空間的轉(zhuǎn)換之前,本節(jié)將首先介紹Outbound寄存器組中的相應寄存器。Outbound寄存器組的地址偏移、屬性和復位值如表2?2所示。
表2?2 PCI/X ATMU Outbound寄存器組
地址偏移 | 寄存器名 | 屬性 | 復位值 |
---|---|---|---|
0x0_8C00/20/40/60/80 | POTARn | 可讀寫 | 0x00000000 |
0x0_8C04/24/44/64/84 | POTEARn | 可讀寫 | 0x00000000 |
0x0_8C28/48/68/88 | POWBARn | 可讀寫 | 0x00000000 |
0x0_8C30/50/70/90 | POWARn | 可讀寫 | 0x00000000 |
(1)POTARn和POTEARn寄存器
在PORTARn和PORTEARn寄存器中保存當前Outbound窗口在PCI總線域的64位地址空間的基地址。這兩個寄存器的主要字段如下:
- POTARn寄存器的TEA字段,第0~11位,保存PCI總線地址空間的43~32位。
- POTARn寄存器的TA字段,第12~31位,保存PCI總線地址空間的31~12位。
- POTEARn寄存器的TEA字段,第12~31位,保存PCI總線地址空間的63~44位。
(2)POWBARn和POWARn寄存器
POWBARn寄存器保存當前Outbound窗口在存儲器域中的36位地址空間的基地址。其主要字段如下:
- WBEA字段保存存儲器域地址的第0~3位。
- WBA字段保存存儲器域地址的第4~23位(WBA字段并沒有保存存儲器域的第24~35位地址,因為Outbound窗口大小至少為4KB的整數(shù)倍。注意在PowerPC處理器中,第0位是地址的最高位)。
POWARn寄存器描述Outbound窗口的屬性,其主要字段如下:
- EN位,第0位。該位是Outbound窗口的使能位,為1表示當前Outbound寄存器組描述的存儲器地址空間到PCI總線地址空間的映射關(guān)系有效;為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)轉(zhuǎn)換為41位的虛擬地址VA(Virtual Address)。E500 V2內(nèi)核不能關(guān)閉MMU(Memory Management Unit),因此不能直接訪問物理地址。
(2)MPC8548處理器通過MMU將41位的虛擬地址轉(zhuǎn)換為36位的物理地址。在E500 V2內(nèi)核中,物理地址是36位(缺省是32位,需要使能)。
(3)檢查LAWBAR和LAWAR寄存器,判斷當前36位的物理地址是否屬于PCI總線空間。在MPC8548中定義了一組LAWBAR和LAWAR寄存器對,每一對寄存器描述當前物理空間是與PCI總線、PCIe總線、DDR還是RapidIO空間對應(該組寄存器的詳細說明見MPC8548 PowerQUICC III? Integrated Host Processor Family Reference Manual)。如果CPU訪問的空間為PCI總線空間,則執(zhí)行第(4)步,否則處理器將不會訪問PCI地址空間。
(4)判斷當前36位物理地址是否在POWBARn寄存器1~4描述的窗口中。如果在,則將36位的處理器物理地址通過寄存器POTARn和POTEARn轉(zhuǎn)換為64位的PCI總線地址,然后HOST主橋?qū)碜蕴幚砥鞯淖x寫請求發(fā)送到PCI總線上;如果不在,則將POWBAR0寄存器作為缺省窗口,接管這個存儲器訪問,并使用寄存器POTAR0和POTEAR0,將處理器物理地址轉(zhuǎn)換為PCI總線地址,當然在正常設計中很少出現(xiàn)這種情況。
許多系統(tǒng)軟件,將Outbound窗口兩邊的寄存器使用“直接相等”的方法進行映射,將存儲器域的地址與PCI總線地址設為相同的值。但是系統(tǒng)軟件程序員務必注意這個存儲器地址與PCI總線地址是分屬于存儲器域和PCI總線域的,這兩個值雖然相等,但是所代表的地址并不相同,一個屬于存儲器域、而另一個屬于PCI總線域。
更多內(nèi)容請看下回。