天天看點

PCI總線-摘錄總結

主要摘錄位址:http://blog.sina.com.cn/sailingxr

一、Host主橋

1.powerpc主橋

MPC8548處理器是Freescale基于E500 V2核心的一個PowerPC處理器,該處理器中內建了DDR控制器、多個eTSEC(Enhanced Three-Speed Ethernet Controller)、PCI/PCI-X和PCIe總線控制器等一系列接口。MPC8548處理器的拓撲結構如圖2‑2所示。

PCI總線-摘錄總結

 如上圖所示,MPC8548處理器的L1 Cache在E500 V2核心中,而L2 Cache與FSB[1]直接相連,不屬于E500核心。值得注意的是有些高端PowerPC處理器的L2 Cache也在CPU中,而L3 Cache與CCB總線直接相連。

OCeaN是MPC8548處理器中連接配接快速外設使用的交叉互連總線,OCeaN不僅可以連接配接PCI、PCI-X和PCIe總線控制器,而且可以連接配接RapidIO[3]總線控制器。使用OCeaN進行互連的總線控制器可以直接通信,而不需要通過SoC平台總線。

OCeaN部件的拓撲結構如圖2‑3所示。

PCI總線-摘錄總結

在 MPC8548 處理器中,有兩個 HOST 主橋,分别是 HOST 主橋 1 和 HOST 主橋 2 ,其中 HOST 主橋 1 可以支援 PCI-X 總線,而 HOST 主橋 2 隻能支援 PCI 總線。如下圖2.8所示。

2.x86 host主橋

x86處理器使用南北橋結構連接配接CPU和PCI裝置。其中北橋(North Bridge)連接配接快速裝置,如顯示卡、和記憶體條,并推出PCI總線,HOST主橋包含在北橋中。而南橋(South Bridge)連接配接慢速裝置。x86處理器使用的南北橋結構如圖2‑6所示。

PCI總線-摘錄總結

x86處理器定義了兩個I/O端口寄存器,分别為CONFIG_ADDRESS和CONFIG_DATA寄存器,CONFIG_ADDRESS寄存器與PowerPC處理器中的CFG_ADDR寄存器的使用方法類似,而CONFIG_DATA寄存器與PowerPC處理器中的CFG_DATA寄存器的使用方法類似。CONFIG_ADDRESS寄存器的結構如圖2‑7所示。

PCI總線-摘錄總結

CONFIG_ADDRESS寄存器的各個字段和位的說明如下所示,

  •  Enable位,第31位。該位為1時,對CONFIG_DATA寄存器進行讀寫時将引發PCI總線的配置周期。
  •  Bus Number字段,第23~16位,記錄PCI裝置的總線号。
  •  Device Number字段,第15~11位,記錄PCI裝置的裝置号。
  •  Function Number字段,第10~8位,記錄PCI裝置的功能号。
  • Register Number字段,第7~2位,記錄PCI裝置的寄存器号。

目前 Intel 對南北橋架構進行了更新,其中北橋被更新為 MCH(Memory Controller Hub) ,而南橋被更新為 ICH(I/O Controller Hub) 。 x86 處理器系統在 MCH 中內建了存儲器控制器、顯示卡晶片和 HOST-to-PCIe 主橋,并通過 Hub Link 與 ICH 相連;而在 ICH 中內建了一些相對低速總線接口,如 AC’97 、 LPC(Low Pin Count) 、 IDE 和 USB 總線,當然也包括一些低帶寬的 PCIe 總線接口。

二、PCI橋

PCI總線-摘錄總結

PCI橋作為一個特殊的PCI裝置,具有獨立的配置空間。但是PCI橋配置空間的定義與PCI Agent裝置的配置空間有所不同。PCI橋的配置空間可以管理其下PCI總線子樹的PCI裝置,并可以優化這些PCI裝置通過PCI橋的資料通路。PCI橋的配置空間在系統軟體周遊PCI總線樹時配置,系統軟體不需要專門的驅動程式設定PCI橋的使用方法,這也是PCI橋被稱為透明橋的主要原因。

注意:PCI橋不能和PCI裝置或Host橋進行資料交換,它是用來轉發來着PCI裝置或Host橋的資料。

PCI總線-摘錄總結

Base Address Register 0~5寄存器,該組寄存器簡稱為BAR寄存器,BAR寄存器儲存PCI裝置使用的位址空間的基位址,該基位址儲存的是該裝置在PCI總線域中的位址。                  

Capabilities Pointer寄存器,在PCI裝置中,該寄存器是可選的,但是在PCI-X和PCIe裝置中必須支援這個寄存器,Capabilities Pointer寄存器存放Capabilities寄存器組的基位址,PCI裝置使用Capabilities寄存器組存放一些與PCI裝置相關的擴充配置資訊。

PCI總線-摘錄總結

在PCI橋中隻含有兩組BAR寄存器,Base Address Register 0~1寄存器,這兩個寄存器是可選的。

Subordinate Bus Number寄存器存放目前PCI子樹中,編号最大的PCI總線号。

Secondary Bus Number寄存器存放目前PCI橋Secondary Bus使用的總線号,這個PCI總線号也是該PCI橋管理的PCI子樹中編号最小的PCI總線号。是以一個PCI橋能夠管理的PCI總線号在Secondary Bus Number~Subordinate Bus Number之間。這兩個寄存器的值由系統軟體周遊PCI總線樹時設定。

Primary Bus Number寄存器存放該PCI橋上遊的PCI總線号。

Bridge Control Register該寄存器用來管理PCI橋的Secondary Bus。

三、讀寫總線事務

PCI總線規定通路配置空間的總線事務,即配置讀寫總線事務,使用ID号進行尋址。PCI裝置的ID号由總線号(Bus Number)、裝置号(Device Number)和功能号(Function Number)組成。

1.總線号初始化

總線号在HOST主橋深度周遊PCI總線樹時确定。

PCI總線-摘錄總結

DFS的算法為線性時間複雜度,适合對拓撲結構未知的樹進行周遊。在一個處理器系統的初始化階段,PCI總線樹的拓撲結構是未知的,适合使用DFS算法進行周遊。下文以圖2‑13為例,說明系統軟體如何使用DFS算法,配置設定PCI總線号,并初始化PCI橋中的Primary Bus Number、Secondary Bus Number和Subordinate Bus number寄存器。所謂DFS算法是指按照深度優先的原則周遊PCI胖樹,其步驟如下。

(1)      HOST主橋掃描PCI總線0上的裝置。系統軟體首先忽略所有這條總線上的PCI Agent裝置,因為在這些裝置之下不會挂接新的PCI總線。例如PCI裝置01下不可能挂接新的PCI總線。

(2)      HOST主橋首先發現PCI橋1,并将PCI橋1的Secondary Bus命名為PCI總線1。系統軟體将初始化PCI橋1的配置空間,将PCI橋1的Primary Bus Number寄存器指派為0,而将Secondary Bus Number寄存器指派為1,即PCI橋1的上遊PCI總線号為0,而下遊PCI總線号為1。

(3)      掃描PCI總線1,發現PCI橋2,并将PCI橋2的Secondary Bus命名為PCI總線2。系統軟體将初始化PCI橋2的配置空間,将PCI橋2的Primary Bus Number寄存器指派為1,而将Secondary Bus Number寄存器指派為2。

(4)      掃描PCI總線2,發現PCI橋3,并将PCI橋3的Secondary Bus命名為PCI總線3。系統軟體将初始化PCI橋3的配置空間,将PCI橋3的Primary Bus Number寄存器指派為2,而将Secondary Bus Number寄存器指派為3。

(5)      掃描PCI總線3,沒有發現任何PCI橋,這表示PCI總線3下不可能有新的總線,此時系統軟體将PCI橋3的Subordinate Bus number寄存器指派為3。系統軟體在完成PCI總線3的掃描後,将回退到PCI總線3的上一級總線,即PCI總線2,繼續進行掃描。

(6)      在重新掃描PCI總線2時,系統軟體發現PCI總線2上除了PCI橋3之外沒有發現新的PCI橋,而PCI橋3之下的所有裝置已經完成了掃描過程,此時系統軟體将PCI橋2的Subordinate Bus number寄存器指派為3。繼續回退到PCI總線1。

(7)      PCI總線1上除了PCI橋2外,沒有其他橋片,于是繼續回退到PCI總線0,并将PCI橋1的Subordinate Bus number寄存器指派為3。

(8)      在PCI總線0上,系統軟體掃描到PCI橋4,則首先将PCI橋4的Primary Bus Number寄存器指派為0,而将Secondary Bus Number寄存器指派為4,即PCI橋1的上遊PCI總線号為0,而下遊PCI總線号為4。

(9)      系統軟體發現PCI總線4上沒有任何PCI橋,将結束對PCI總線4的掃描,并将PCI橋4的Subordinate Bus number寄存器指派為4,之後回退到PCI總線4的上遊總線,即PCI總線0繼續進行掃描。

(10)  系統軟體發現在PCI總線0上的兩個橋片PCI總線0和PCI總線4都已完成掃描後,将結束對PCI總線的DFS周遊全過程。

2.PCI 總線device号的配置設定

PCI裝置的IDSEL信号與PCI總線的AD[31:0]信号的連接配接關系決定了該裝置在這條PCI總線的裝置号。實際上在系統中,每個PCI槽上的所獨有的信号線是:INTA、INTB、INTC、INTD、IDSEL,每個槽上的IDSEL對應于AD[31:11]中的一根。(如圖2‑12所示,在配置讀寫總線事務的位址周期中,AD[10:0]信号已經被Function Number和Register Number使用,是以PCI裝置的IDSEL隻能與AD[31:11]信号連接配接。)

PCI總線-摘錄總結

一條PCI總線能夠挂接21個裝置,在實際的應用中,由于PCI總線的負載能力有限,即便總線頻率為33MHz的情況下,在一條PCI總線中最多也隻能挂接10個負載。

3.配置請求

其中CONFIG_ADDRESS寄存器存放PCI裝置的ID号,而CONFIG_DATA寄存器存放進行配置讀寫的資料。

PCI總線定義了兩類配置請求,一個是Type 00h配置請求,另一個是Type 01h配置請求。PCI總線使用這些配置請求通路PCI總線樹上的裝置配置空間,包括PCI橋和PCI Agent裝置的配置空間。

在位址周期中,HOST主橋使用配置讀寫總線事務,将CONFIG_ADDRESS寄存器的内容拷貝到PCI總線的AD[31:0]信号線中。CONFIG_ADDRESS寄存器與Type 01h配置請求的對應關系如圖2‑11所示。

PCI總線-摘錄總結

從圖2‑11中可以發現,CONFIG_ADDRESS寄存器的内容基本上是原封不動的拷貝到PCI總線的AD[31:0]信号線上的[3]。其中CONFIG_ADDRESS的Enable位不被拷貝,而AD總線的第0位為必須為1,表示目前配置請求是Type 01h。

當PCI總線接收到Type 01配置請求時,将尋找合适的PCI橋[4]接收這個配置資訊。如果這個配置請求是直接發向PCI橋下的PCI裝置時,PCI橋将接收個Type 01配置請求,并将其轉換為Type 00h配置請求;否則PCI橋将目前Type 01h配置請求原封不動的傳遞給下一級PCI總線。

如果HOST主橋或者PCI橋發起的是Type 00h配置請求,CONFIG_ADDRESS寄存器與AD[31:0]的轉換如圖2‑12所示。

PCI總線-摘錄總結

當以下兩種請求之一滿足時,HOST主橋或者PCI橋将生成Type 00h配置頭,并将其發送到指定的PCI總線上。

(1)      CONFIG_ADDRESS寄存器的Bus Number字段為0時,處理器通路CONFIG_DATA寄存器時,HOST主橋将直接向PCI總線0發出Type 00h配置請求。因為與HOST主橋直接相連的PCI總線号為0,此時表示HOST主橋需要通路與其直接相連的PCI裝置。

(2)      當PCI橋收到Type 01h配置頭時,将檢查Type 01配置頭的Bus Number字段,如果這個Bus Number與PCI橋的Secondary Bus Number相同,則将這個Type 01配置頭轉換為Type 00h配置頭,并發送到該PCI橋的Secondary總線上。如果不相同,并将其轉發到Secondary Bus。