??個人主頁:highman110
??作者簡介:一名硬件工程師,持續(xù)學習,不斷記錄,保持思考,輸出干貨內(nèi)容?
參考書籍:
PCI_Express體系結(jié)構(gòu)導讀、
深入淺出SSD:固態(tài)存儲核心技術(shù)、原理與實戰(zhàn)
目錄
概述
EP的配置空間
switch的配置空間
概述
????????每個PCIe設(shè)備都有這樣一段空間,主機軟件可以通過讀取它獲得該設(shè)備的一些信息,也可以通過它來配置該設(shè)備,這段空間就稱為PCIe的配置空間。不同于每個設(shè)備的其他空間,PCIe設(shè)備的配置空間是協(xié)議規(guī)定好的,哪個地方放什么內(nèi)容,都是有定義的。
????????PCIE設(shè)備的配置空間定義部分從PCI總線繼承,PCIE新增了一個擴展配置寄存器空間,PCI配置空間共256字節(jié),PCIE配置空間共4096字節(jié),如下圖:
????????Capacity這個字段先不討論,我們先看一下Header,PCI和PCIE的Header定義是一樣的,和地址路由相關(guān)的信息也在這里。
????????這里包括EP(type0)和switch(type1)兩種配置空間Header定義:
EP的配置空間
????????Device ID和Vender ID:設(shè)備ID和供應商ID,這個沒什么好說的,只讀。
????????Command:PCI設(shè)備的命令寄存器,初始化時為0,這時的設(shè)備只能接收配置請求總線事務,不能接收存儲器或IO請求的總線事務。需要軟件設(shè)置該寄存器后,才能訪問該設(shè)備的存儲器或IO空間。寄存器定義如下圖:
????????Status:保存PCI設(shè)備的狀態(tài),如下圖:
????????Revision ID:設(shè)備版本號,只讀。
????????Class Code:供系統(tǒng)軟件識別當前PCIE設(shè)備的分類,共24bit,分為三個字節(jié):Base class code(bit23:16將設(shè)備分類為顯卡、網(wǎng)卡、橋設(shè)備等類型)、Sub class code(bit15:8進一步細分類)、interface(bit7:0定義編程接口)。
????????Header Type:8bit,只讀,定義如下表:
比特位 |
定義 |
7 |
1:表示當前PCI設(shè)備是多功能設(shè)備 0:表示當前PCI設(shè)備是單功能設(shè)備 |
6:0 |
0:表示該設(shè)備使用PCI agent設(shè)備(就是endpoint)的配置空間 1:表示該設(shè)備使用PCI橋設(shè)備(swtich、RC)的配置空間 2:表示該設(shè)備使用cardbus橋片的配置空間 |
????????Cache line size:記錄Host處理器使用的cache行長度。
????????Latency timer:用來控制PCI設(shè)備占用PCI總線的時間,PCIE不用,改值必須為0。
????????Expansion ROM base address:某些顯卡、硬盤、橋片等設(shè)備,在處理器還沒有運行操作系統(tǒng)之前,就需要完成基本的初始化設(shè)置,就是要自己加載一段firmware給自己初始化,初始化完成了才能跟主機對接。Expansion ROM base address字段就是這段固件代碼存放的基地址。
????????Capabilities pointer:存放capabilities寄存器組的基地址。
????????Interrupt line:記錄當前PCIE設(shè)備使用的中斷向量號。
????????Interrupt pin:用來保存PCI設(shè)備使用的中斷引腳,PCI設(shè)備有INTA#、INTB#、INTC#、INTD#四個中斷引腳,該寄存器為1表示使用INTA#,寄存器為2、3、4依次表示使用INTB#、INTC#、INTD#。PCIE設(shè)備沒有中斷引腳,但是它也可以使用此寄存器,通過INTx中斷消息模擬PCI設(shè)備的INTA#、INTB#、INTC#、INTD#四個中斷信號。
????????Base address register:BAR寄存器,這是本節(jié)的重點。對Endpoint Configuration(Type 0)提供了最多6個BAR,而對Switch(Type 1)來說只有2個。BAR寄存器保存 PCI設(shè)備使用的地址空間的基地址,該基地址保存的是該設(shè)備在PCI總線域中的地址。
switch的配置空間
????????一個TLP要到達指定EP,必然會有switch或多端口RC(就是PCI橋設(shè)備)的路由選路過程(如果是一個RC對接一個EP就不需要什么路由了),而路由信息存儲在橋設(shè)備的Configuration空間里,因此,很有必要先理解Switch的Configuration空間,就是前面提到的Type1 header:
????????有部分字段和EP type0 header一樣,這里不贅述。但是PCI橋除了作為PCI設(shè)備之外,它還要管理其下連接的其他設(shè)備,這些設(shè)備同樣有配置讀寫、內(nèi)存讀寫、message等總線事務需要處理,所以PCI橋肯定要有一些寄存器來關(guān)聯(lián)到這些設(shè)備的總線號、存儲器空間,不然當一個訪問switch下面EP的TLP報文來到switch時,switch將不知道報文該往哪里轉(zhuǎn)發(fā)。下面大致介紹一下橋設(shè)備的type1 header相關(guān)字段。
????????BAR:功能和EP type0 header一樣,但是對switch來說,不一定會有私有寄存器,也就不需要使用這兩組寄存器設(shè)置BAR空間,這種設(shè)備就是PCI中的透明橋。
????????Primary bus、secondary bus、subordinate bus:這三種bus用張圖來重點解釋下,它們是ID路由尋址的關(guān)鍵寄存器。以PCI-PCI橋1為目標設(shè)備進行介紹。
????????Primary bus:表示一個橋設(shè)備直接相連的上游Bus Number,就是總線0。注意,下圖雖然是PCI的結(jié)構(gòu)圖,但是PCIE的類似,swtich內(nèi)部在邏輯上就是PCI to PCI橋,最上面的HOST主橋,在邏輯上可以等同于RC。
????????Secondary bus:表示一個橋設(shè)備直接相連的下游Bus Number,就是總線1。
????????Subordinate bus:表示這個橋下游最遠、總線號最大的Bus Number,就是總線2,因為圖中總線1下面只掛了一個橋2,如果再增加一個橋3,橋3下面的總線號為3,則此時Subordinate bus number就是3。
????????下面再用一張PCIE結(jié)構(gòu)圖說明:
?
????????對上圖紅框中的端口(注意,這個swtich端口就相當于一個PCI橋設(shè)備,每個端口都有一個Configuration空間,而不是整個switch共一個Configuration空間)來說,與他直接相連的上游總線號為5,也就是其primary bus number為5,與他直接相連的下游總線號為6,也就是其secondary bus number為6,他下面最遠最大的總線號為9,也就是其subordinate bus number為9。
????????Secondary status:記錄secondary bus的狀態(tài)。
????????Status:記錄PCI橋作為PCI設(shè)備時使用的狀態(tài)。
????????Secondary latency timer:管理secondary bus的超時機制,即管理PCI橋發(fā)向下游的總線事務,另一個寄存器latency timer則是管理PCI橋發(fā)向上游的總線事務。
????????I/O limit、I/O base:傳統(tǒng)PCI設(shè)備使用,PCI橋使用這兩個寄存器存放其下PCI子樹中所有設(shè)備使用的I/O地址空間集合的基地址(base)和大?。╨imit)。
????????Memory limit、Memory base:PCI橋使用這兩個寄存器存放其下PCI子樹中所有設(shè)備使用的存儲器地址空間集合的基地址(base)和大小(limit)。對上游端口來說,其Configuration描述的地址范圍是它下游所有設(shè)備的映射空間范圍,而對每個下游端口的Configuration,描述了連接它端口設(shè)備的映射空間范圍。PCI橋規(guī)定這個空間的大小至少為1MB。
????????Prefetchable Memory Limit、Prefetchable Memory Base:存放這些PCI設(shè)備使用的可預取存儲器空間的基地址和大小。關(guān)于PCI預讀機制詳情還有待研究。
????????I/O Base Upper 16 Bits、I/O Limit Upper 16:如果PCI橋僅支持16位的I/O端口,這組寄存器只讀,且其值為0。如果PCI橋支持32位I/O端口,這組寄存器可以提供I/O端口的高16位地址。
????????Bridge Control:該寄存器用來管理PCI橋的Secondary Bus,其主要位的描述如下:
????????Secondary Bus Reset位,第6位,可讀寫。當該位為1時,將使用下游總線提供的 RST#信號復位與PCI橋的下游總線連接的PCI設(shè)備。通常情況下與PCI橋下游總線連接的PCI設(shè)備,其復位信號需要與PCI橋提供的RST#信號連接,而不能與HOST主橋提供的RST#信號連接。
????????Primary Discard Timer位,第8位,可讀寫。PCI橋支持Delayed傳送方式,當PCI橋的Primary總線上的主設(shè)備使用Delayed方式進行數(shù)據(jù)傳遞時,PCI橋使用Retry周期結(jié)束Primary總線的Non-Posted數(shù)據(jù)請求,并將這個Non-Posted數(shù)據(jù)請求轉(zhuǎn)換為Delayed數(shù)據(jù)請求,之后主設(shè)備需要擇時重試相同的Non-Posted數(shù)據(jù)請求。當該位為1時,表示在Primary Bus上的主設(shè)備需要在2^10個時鐘周期之內(nèi)重試這個數(shù)據(jù)請求,為0時,表示主設(shè)備需要在2^15個時鐘周期之內(nèi)重試這個數(shù)據(jù)請求,否則PCI橋?qū)G棄Delayed數(shù)據(jù)請求。
????????Secondary Discard Timer位,第9位,可讀寫。當該位為1時,表示在Secondary Bus上的主設(shè)備需要在2^10個時鐘周期之內(nèi)重試這個數(shù)據(jù)請求,為0時,表示主設(shè)備需要在2^15個時鐘周期之內(nèi)重試這個數(shù)據(jù)請求,如果主設(shè)備在規(guī)定的時間內(nèi)沒有進行重試時,PCI橋?qū)G棄Delayed數(shù)據(jù)請求。具體可參考PCI-to-PCI Bridge Architecture Specification Revision 1.2。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-412970.html
?文章來源:http://www.zghlxwxcb.cn/news/detail-412970.html
?
?
到了這里,關(guān)于【PCIE體系結(jié)構(gòu)五】PCIE配置和地址空間的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!