第四章 PCIe總線概述
4.1 pcie 總線基礎知識
1)PCI是並行連接,一條總線上的多個設備共享總線帶寬;
PCIe是差分總線,端到端連接,頻率更高;
2)一個數據通路(Lane),有兩組差分信號,即4根信號線,TX部件和RX部件相連(這為一組)
一個pcie鏈路可以有多個lane
2.a) 一個差分信號由D+和D-兩根信號組成,接收端通過比較它們的差值來判斷是1還是0,與單端信號比,抗干擾能力更強。
2.b)外部噪聲加在兩根信號上的影響一樣,所以可以使用更高的總線頻率
3) pcie鏈路支持1、2、4、8、16、32個lane,即支持這些數據位寬, 常用的是x1
intel的ICH集成了多個x1的pcie鏈路,MCH集成了x16的pcie鏈路用於連接顯卡控制器
powerPC支持 x1,x2,x4,x8
PCIE不分多少數據位,PCI-E總線更類似串行線,一次通信走1個Bit。比較快主要是頻率高,V3.0總線頻率達4Ghz,單lane的峰值可達8GT/s=8Gb/s
4) PCIE使用的信號
pcie設備使用2種電源信號供電,Vcc 和 Vaux, 電壓為3.3v, Vcc為主電源
PERST#信號, 全局復位,復位設備
REFCLK+ 和 REFCLK-信號,用於與處理器同步
WAKE#, 設備休眠時,主電源停止供電了,可以用該信號通知處理器來喚醒設備
SMCLK, SMDAT, 即SMBus總線,源於I2C,管理處理器系統的外部設備特別是智能電源
JTAG信號,用於芯片內部測試,包括TRST#,TCK,TDI,TDO,TMS信號
PRSNT1#,PRSNT2#, 熱插拔相關
5) PCIE總線的層次結構
事務層,接收來自核心層的數據並封裝為TLP,還有就是處理pcie中的“序”
數據鏈路層,繼續添加sequence前綴和CRC后綴,有多種DLLP包
物理層,LTSSM狀態機管理鏈路狀態,PLP包,系統程序員仍有必要深入理解物理層工作原理
6)pcie鏈路的擴展
用switch, 1個上游端口連RC,多個下游端口連EP
7)pcie設備的初始化
傳統復位convertional reset:包括fundametal 和 non-fundametal, fundametal 又分cold和warm reset; non-fundametal指的是hot reset
FLR復位只復位與PCIE鏈路相關的部分邏輯
4.2 PCIE體系結構組成部件
1)大多使用RC、switch、PCIe-to-PCI橋連接設備,而基於pcie總線的設備,稱為EP(endpoint)
RC(PCI Express root complex)根聯合體, 相當於PCIE主橋,也有稱為pcie總線控制器
RC在x86中由MCH和ICH組成, PCIe總線端口存儲器控制器等接口集成在一起,統稱RC
2)PCIE設備包括 EP(如顯卡、網卡等)、switch、PCIE橋
3)RC與HOST主橋不同的是還有RCRB,內置PCI設備,event collector
深入理解RC對理解pcie體系結構非常重要
4)switch有一個上游端口和多個下游端口,上游端口連接RC、其他switch的下游端口,也支持crosslink連接方式(上連上,下連下)
其實是多個PCI橋組成的
PCIE 采用虛擬多通路VC技術,這些報文中設定TC標簽,分為8類優先權。每條鏈路最多支持8個VC,用來收發報文。
軟件設置哪類TC由哪個VC傳遞,許多處理器Switch和RC只支持一個VC,而x86和PLX的switch可以支持兩個VC
TC和VC是多對一
5)不同ingress發向同一個egress端口,涉及端口仲裁和路由選徑
switch中設有仲裁器,規定報文通過switch的規則。分別基於VC和基於端口的仲裁機制
6)PCIE橋
4.3 pcie設備的擴展配置空間
1)PCIE要求設備必須支持capability結構,重點關注電源管理、MSI中斷的capability結構
電源管理capability有PMCR和PMCSR寄存器
2)capability結構:PCIE capability register, device/link/slot 等capability 寄存器
第5章 Montevina 的MCH和ICH
intel的一款筆記本平台
pci 0 上的MCH和ICH,是FSB總線的延伸,虛擬的PCI設備,只是使用PCI的管理方法
1)pci0的device0設備,管理PCI總線地址和存儲器地址
device0被認為是HOST主橋
2)存儲空間的組成結構
存儲器域(CPU可訪問)、PCI總線域、DRAM域(主存),有些DRAM只能被顯卡控制器訪問到,不能被cpu訪問
legacy地址空間:x86固有的一段1MB內存空間,DOS內存等
DRAM域:大小保存在MCH的TOM中,即PCI0的配置空間中,legacy地址在它里面
存儲器域:
5.3 存儲器域的PCI總線地址空間
PCI總線地址空間氛圍 最低可用TOLUD~4GB,TOUUD~64GB
1)APIC 是x86使用的中斷控制器
2)ECAM方式讀寫PCIE擴展配置空間,CONFIG_ADDRESS和CONFIG_DATA訪問前256B
ECAM是直接映射到內存來訪問
第6章 PCIE事務層
第7章 鏈路層和物理層
第8章 鏈路訓練和電源管理
第9章 流量控制
合理的使用物理鏈路,避免接收端緩沖區容量不足而丟棄發生端的數據,從而要求重新發送。
第10章 MSI和MSI-X中斷機制
PCI:必須支持INTx,MSI可選
PCIe: 必須支持MSI,INTx可選
MSI使用存儲器寫請求TLP向處理器提交中斷請求,即MSI報文。PowerPC使用MPIC中斷控制器處理MSI中斷請求,X86使用FSB interrupt message方式處理。
絕大多數PCIe設備使用MSI提交中斷請求
第11章 PCI/PCIE的序
序是指數據傳送的順序,保證數據完整性的基礎
第12章 PCIE總線的應用
12.1 capric卡的工作原理
1) PCIe設備: Vetex-5內嵌的EP模塊,該模塊也被xilinx稱為LogiCORE
先主存到FPGA的片內SRAM(DMA讀), 單次DMA最大0X7FF B , 2KB
SRAM到主存 (DMA寫)
2)僅使用BAR0,大小256B,里面有DCSR1/2, WR_DMA_ADR/SIZE, INT_REG, ERR
12.3 基於pcie的設備驅動
屬於char類型驅動
1)加載與卸載
這段代碼主要作用是軟件結構pci_driver與硬件結構pci_dev建立聯系,pci_register_driver會做這個
2)初始化和關閉
系統在PCI樹中發現capric卡后,local_pci_probe調用capric_probe,入口參數pci_dev和ids,進行初始化
初始化調用pci_enable_device使能PCIE設備(會修改command的io space和memory space位看配置空間是否使用它們),調用pcibios_enable_irq分配設備使用的中斷向量號
DMA掩碼:存儲域physical_addr &DMA_MASK = physical_addr表示可以對這段內存DMA操作
a) linux中存儲器映射的寄存器和io映射的寄存器都是ioresources管理,pci_request_regions把capric卡的BAR0使用的resource結構其name設置為DEV_NAME, flags設為IORESOURCE_BUSY,
b) pci_resource_start 獲得pci_dev資源的BAR0空間的基地址(存儲器域物理地址),pci_read_config_word是pci域
c) ioremap將存儲器域物理地址映射為linux虛擬地址
d)register_chrdev 注冊char設備驅動
e) pci_enable_msi 使能MSI中斷請求機制
f) request_irq(capric_interrupt) 使用中斷服務例程
3) DMA讀寫
DMA寫: 與capric_read對應
kmalloc,實際驅動中很少在讀寫服務例程中申請內存,容易產生內存碎片,時間花費也長。
pci_map_single虛擬地址轉換為PCI物理地址
DMA讀:capric_write
dma_sync_single 存儲器與cache同步
interruptible_sleep_on 等待
4)中斷處理
系統的do_IRQ調用 capric_interrupt
這里直接設置讀寫例程里面的等待事件就好
5)存儲器地址到PCI地址轉換
pci_map_single,
最初x86是直接相等的關系,為了支持虛擬化技術使用了VT-d/IOMMU技術
powerpc是inbound寄存器把PCI轉換為存儲器地址,inbound可以看做一種IOMMU
6)存儲器與cache同步
低端處理器不支持硬件cache共享一致性,需要在DMA操作之前,用軟件將操作的數據區域與cache同步
多數PCI設備,cache一致性可以由硬件保證
12.4 帶寬和時延
優化:減少對寄存器的讀操作,如要讀終端控制器狀態寄存器可以改為收發等分開的IRQ
流水線ring buffer技術,多路DMA讀寫並行執行
第13章 PCI與虛擬化技術
多個虛擬處理器系統,多個獨立的操作系統,用一套CPU、內存和外部設備