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