閱讀434 返回首頁    go 阿裏雲 go 技術社區[雲棲]


2.5 非透明PCI橋

PCI橋規範定義了透明橋的實現規則,本篇在第2.3.1節中詳細介紹了這種橋片。通過透明橋,處理器係統可以以HOST主橋為根節點,建立一顆PCI總線樹,在這個樹上的PCI設備共享同一個PCI總線域上的地址空間。

但是在某些場合下PCI透明橋並不適用。在2?15所示的處理器係統中存在兩個處理器,此時使用PCI1連接處理器2並不利於整個處理器係統的配置與管理。我們假定PCI總線使用32位地址空間,而處理器1和處理器2所使用的存儲器大小都為2GB,同時我們假定處理器1和處理器2使用的存儲器都可以被PCI設備訪問。

此時處理器12使用的存儲器空間必須映射到PCI總線的地址空間中,而32位的PCI總線隻能提供4GB地址空間,此時PCI總線x0的地址空間將全部被處理器12的存儲器空間占用,而沒有額外的空間分配給PCI設備。

 2.5 非透明PCI橋 - maoxingbing - 毛毛蟲的爹


 

此外有些處理器不能作為PCI Agent設備,因此不能直接連接到PCI橋上,比如x86處理器就無法作為PCI Agent設備,因此使用PCI透明橋無法將兩個x86處理器直接相連。如果處理器2有兩個以上的PCI接口,其中一個可以與PCI1相連(此時處理器2將作為PCI Agent設備),而另一個作為HOST主橋y連接PCI設備。此時HOST主橋y掛接的PCI設備將無法被處理器1直接訪問。

使用透明橋也不便於解決處理器1與處理器2間的地址衝突,如2?15所示的處理器係統,如果處理器12都將各自的存儲器映射到PCI總線地址空間中,有可能會出現地址衝突。雖然PowerPC處理器可以使用Inbound寄存器,將存儲器地址空間映射到不同的PCI總線地址空間中,但是不是所有的處理器都具有這種映射機製。許多處理器的存儲器地址與PCI總線地址使用了“簡單相等”這種映射方法,如果PCI總線連接了兩個這樣的處理器,將不可避免地出現PCI總線地址的映射衝突。

采用非透明橋將有效解決以上這些問題,非透明橋並不是PCI總線定義的標準橋片,但是這類橋片在連接兩個處理器係統中得到了廣泛的應用。一個使用非透明橋連接兩個處理器係統的實例如2?16所示。

 2.5 非透明PCI橋 - maoxingbing - 毛毛蟲的爹


使用非透明PCI橋可以方便地連接兩個處理器係統。從上圖中我們可以發現非透明橋可以將PCI總線x域與PCI總線y域進行隔離。值得注意的是,非透明PCI橋的作用是對不同PCI總線域地址空間進行隔離,而不是隔離存儲器域地址空間。而HOST主橋的作用才是將存儲器域與PCI總線域進行隔離。

非透明PCI橋可以連接兩條獨立的PCI總線,一條被稱為Secondary PCI總線,另一條被稱為Primary PCI總線,但是這兩條總線沒有從屬關係,兩邊是對等的。從處理器x的角度上看,與非透明PCI橋右邊連接的總線叫Secondary PCI總線;而從處理器y的角度上看,非透明PCI橋左邊連接的總線叫Secondary PCI總線。

HOST處理器xPCI設備可以通過非透明PCI橋,直接訪問PCI總線y域的地址空間,並通過HOST主橋y與訪問存儲器yHOST處理器yPCI設備也可以通過非透明PCI橋,直接訪問PCI總線x域的地址空間,並通過HOST主橋x訪問存儲器x。為此非透明PCI橋需要對分屬不同PCI總線域的地址空間進行轉換。

目前有許多廠商可以提供非透明PCI橋的芯片,在具體實現上各有差異,但是其基本原理類似,下文以Intel 21555為例說明非透明PCI橋。值得注意的是,在PCIe體係結構中,也存在非透明PCI橋的概念。

2.5.1 Intel 21555中的配置寄存器

Intel 21555非透明PCI橋源於DEC21554,並在此基礎上做了一些改動。Intel 21555橋片與其他透明橋在係統中的位置相同。如2?16所示,這個橋片一邊與Primary PCI總線相連,另一邊與Secondary PCI總線相連。

Intel 21555橋片中,包含兩個PCI 設備配置空間,分別是Primary PCI總線配置空間和Secondary PCI總線配置空間,處理器可以使用Type 00h配置請求訪問這些配置空間。在大多數情況之下,在Primary PCI總線上的HOST處理器管理Primary PCI配置空間;在Secondary PCI總線上的HOST處理器管理Secondary PCI配置空間

Intel 21555橋片中,還有一組私有寄存器CSR(Control and Status Register),係統軟件使用這組寄存器對非透明橋進行管理並獲得橋片的一些信息,這組寄存器可以被映射成為PCI總線的存儲器地址空間或者I/O地址空間。

本章僅介紹Primary PCI總線這一邊的配置寄存器,Secondary PCI總線的配置寄存器雖然與Primary PCI總線的這些寄存器略有不同,但是基本對等,因此本節對此不做介紹。Primary PCI總線的主要寄存器如2?6所示。

 2?6 Primary PCI總線的配置寄存器

Offset

寄存器

PCI配置寄存器

複位值

0x13~0x10

Primary CSR and Memory 0 BAR

BAR0

0x0000-0000

0x17~0x14

Primary CSR I/O BAR

BAR1

0x0000-0001

0x1B~0x18

Downstream Memory 1 BAR

BAR2

0x0000-0000

0x1F~0x1C

Downstream Memory 2 BAR

BAR3

0x0000-0000

0x23~0x20

Downstream Memory 3 BAR

BAR4

0x0000-0000

0x27~0x24

Downstream Memory 3 Upper 32 Bits

BAR5

0x0000-0000

0x97~0x94

Downstream Memory 0 Translated Base

None

不確定

0x9B~0x98

Downstream I/O or Memory 1 Translated Base

None

不確定

0x9F~0x9C

Downstream Memory 2 Translated Base

None

不確定

0xA3~0xA0

Downstream Memory 3 Translated Base

None

不確定

 

2?6中,我們可以發現Primary PCI總線的這些配置寄存器共分為兩組,一組寄存器與PCI設備的配置寄存器的BAR0~5對應,這些寄存器與標準PCI配置寄存器BAR0~5的功能相同;另一組寄存器是Translated Base寄存器,這組寄存器的主要作用是將來自Primary PCI總線的數據訪問轉換到Secondary PCI總線。

其中BAR0~5寄存器在係統初始化時由Primary PCI總線上的HOST處理器進行配置,配置過程與PCI總線上的普通設備完全相同。隻是Intel 21555規定,BAR0隻能映射為32位存儲器空間。

CSR寄存器可以根據需要映射在BAR0空間中,此時BAR0空間最小為4KBCSR寄存器也可以根據需要使用BAR1寄存器映射為I/O地址空間,同時BAR1寄存器還可以映射其他I/O空間;BAR2~3隻能映射為32位存儲器地址空間;而BAR4~5用來映射64位的存儲器地址空間。

對於Primary PCI總線,所有BAR0~5寄存器映射的地址空間都將占用Primary PCI總線域,然而這些地址空間中所對應的數據並不在Primary PCI總線域中,而是在Secondary PCI總線域中。Translated Base寄存器實現不同PCI總線域地址空間的轉換,Intel 21555將不同PCI總線域地址空間的轉換過程稱為“地址翻譯”。

Intel 21555支持兩種地址翻譯方法,一個是直接地址翻譯,一個是查表翻譯。Primary PCI總線的BAR空間隻支持直接地址翻譯,而Secondary PCI總線的Memory 2 BAR空間支持查表翻譯,本節僅介紹直接地址翻譯方法,對查表翻譯有興趣的讀者請閱讀Intel 21555的數據手冊。直接地址翻譯過程如2?17所示。

2.5 非透明PCI橋 - maoxingbing - 毛毛蟲的爹


 

Primary PCI總線對非透明橋21555BAR0~5地址空間進行數據請求時,這個數據請求將被轉換為對Secondary PCI總線的數據請求。Translated Base寄存器將完成這個地址翻譯過程,下節將結合實例說明這個直接地址翻譯過程。

2.5.2 通過非透明橋片進行數據傳遞

下文以2?16中處理器x訪問處理器y存儲器地址空間的實例,說明非透明橋21555如何將PCI總線x域與PCI總線y域聯係在一起。

處理器x需要訪問處理器y的存儲器空間之前,需要做一些必要的準備工作。

(1)      首先確定由哪一個BAR寄存器空間映射處理器y的存儲器地址空間。本節假定使用BAR2寄存器映射處理器y的存儲器地址空間。

(2)      BAR2寄存器使用Downstream Memory 2 Translated Base寄存器,將來自Primary PCI總線的訪問轉換為對Secondary PCI總線地址空間的訪問。其中Downstream Memory 2 Translated Base寄存器可以由處理器x或者處理器y根據需要進行設置。

假定處理器xyHOST主橋使用“直接相等”策略,建立存儲器域與PCI總線域間的映射;而處理器x使用BAR2地址空間訪問處理器y存儲器空間0x1000-000~0x1FFF-FFFF;處理器x的係統軟件事先將BAR2寄存器設置完畢。處理器x訪問處理器y的這段存儲器空間的步驟如下,讀者可參考2?18理解這一步驟。

(1)      首先處理器x訪問在處理器x域中,且與非透明橋的BAR2空間相對應的存儲器地址空間。

(2)      HOST主橋將進行存儲器域到PCI總線域的轉換,並將這個請求發送到Primary PCI總線上。

(3)      非透明橋發現這個數據請求發向BAR2地址空間,則接收這個數據請求,並在橋片中暫存這個數據請求。

(4)      非透明橋根據Downstream Memory 2 Translated Base寄存器的內容,按照2?17所示的規則進行地址轉換。假設Downstream Memory 2 Translated Base寄存器的基地址被預先設置為0x1000-0000,大小為256MB(這個物理地址屬於處理器y的主存儲器地址空間)

(5)      經過非透明橋的轉換後,這個數據請求將穿越非透明橋,從Primary PCI總線域進入Secondary PCI總線域,然後訪問處理器y的基地址為0x1000-0000的存儲器區域。

(6)      處理器yHOST主橋接收這個存儲器訪問請求,並最終將數據請求發向處理器y的存儲器中。

 

2.5 非透明PCI橋 - maoxingbing - 毛毛蟲的爹

非透明橋21555除了可以支持存儲器到存儲器之間的數據傳遞,還支持PCI總線域到存儲器域,以及PCI總線域之間的數據傳遞,此外非透明橋21555還可以通過I2ODoorbell寄存器進行Primary PCI總線與Secondary PCI總線之間的中斷信號傳遞。本節對這部分內容不做進一步介紹。

非透明橋有效解決了使用PCI總線連接兩個處理器存在的問題,因而得到了廣泛的應用。在PCIe體係結構中,也存在非透明PCI橋的概念。如在PLXSwitch芯片中,各個端口都可以設置為非透明模式,

2.6 小結

本章介紹了在PCI總線中使用的橋,包括HOST主橋和PCI橋,並較為詳細介紹了如何使用這些橋訪問PCI設備的配置空間。

其中HOST主橋並不在PCI總線規範的約束範圍內,不同的處理器可以根據需要設計出不同的HOST主橋。本章更加側重介紹PowerPC處理器使用的HOST主橋,在該主橋的設計中,提出了許多新的概念,並極大促進了PCI總線的發展,在這個橋片中出現的許多新的思想被PCI V3.0總線規範采納。

PowerPC處理器的HOST主橋中,明確了存儲器域與PCI總線域的概念。而區分存儲器域與PCI總線域也是本章的書寫重點,本書將始終強調這兩個域的不同。有些處理器係統並沒有明確區分這兩個域的差別,因此許多讀者忽略了PCI總線域的存在,並錯誤地認為PCI總線域是存儲器域的一部分。

在本章中,還重點介紹了PCI橋的實現機製。在許多較為簡單處理器係統中,並不包含PCI橋,但是讀者仍然需要深入理解PCI橋這一重要概念。深入理解PCI橋的運行機製,是理解PCI體係結構的重要基礎。


有些非透明橋,如DEC21554的兩邊並不是完全對等的,尤其是在處理64位地址空間時,本文對此不做詳細說明。

DEC21554Digital公司的產品。

Intel 21555非透明橋片兩邊的HOST處理器都可以訪問PrimarySecondary總線的配置寄存器。

多數半導體廠商提供兩類芯片手冊,分別是DatasheetUser manual。其中Datasheet偏重硬件電氣特性,User Manual側重芯片使用原理。

最後更新:2017-04-03 16:48:37

  上一篇:go 1.2 PCI總線的信號定義
  下一篇:go 重新編譯Linux內核必要性及其準備工作