PCIE體系結構基礎

PCIe體系結構的基本概念:

  1. 瞭解PCIE的體系結構首先要了解PCI總線的結構,PCI總線中的HOST主橋用於連接隔離轉換存儲器域地址和PCI總線域地址;PCI總線中的主從設備統稱爲Agent設備;PCI橋作爲一種特殊的PCI設備,每個HOST主橋管理一個PCI總線樹,每個PCI橋擴展一個PCI總線,與HOST主橋直接相連的爲總線0.
  2. PCIE體系結構中雖然沒有物理存在的PCI橋,但是其概念對於理解PCIE的結構具有重要意義。
  3. RC中首先是一個虛擬PCI橋用於分離存儲器域和PCI總線域,同時該虛擬橋在RC中拓展出總線0;
  4. 因爲PCIE是穿行端到端傳輸,所以必須有switch才能擴展PCIE總線,switch內部具有一個上游端口和多個下游端口,switch內部有多個PCI-to-PCI橋連接在一條虛擬PCI總線上組成,每個端口都對應一個虛擬PCI橋;
  5. 因爲PCIE總線中每個端口就是一個虛擬PCI橋,都會產生一條新的PCI總線,又因爲PCIE的穿行端到端傳輸方式導致該總線上只會有一個EP,所以在PCIE體系結構中設備號的概念不再那麼有用,對於ARI設備(最大支持256個function)的路由ID就只由總線號和function號確定;
  6. function是指一個設備中由一個單獨分配了function number號的配置空間所代表的一組邏輯功能,在PCIE總線拓撲中,一個設備可以認爲是一個或幾個function,ARI設備最大支持256個function,non-ARI設備最大支持8個function,每個function最大配置空間爲4K(PCI設備基本配置空間爲64bytes,PCIE設備用擴展的空間存放PCIE設備獨有的capability結構)

PCIe上電初始化做枚舉的過程

  1. 分配總線號
    Acpi_pci_link_init()
    Pci_acpi_scan_root() 創建總線樹
    Pci_scan_child_bus() DFS算法遞歸調用該函數對總線做枚舉
    Pci_add_new_bus() 分配總線號:從上向下遍歷時,分配橋設備配置空間中的primary bus號(橋的上游總線號)和secondary bus號(下游總線),在某一條分支上遍歷到最深的總線並且沒有其他PCI橋之後,在返回上一級總線遍歷時,再配置該橋設備的subordinate bus號(該總線子樹種數值最大的總線號)
    Pci_add_devices() 枚舉完橋設備之後再枚舉EP
  2. 檢查BAR空間,並初始化配置空間
    系統上電時,PCIE設備會將ROM中的信息讀取並存到配置空間的BAR寄存器中,作爲初始值,該值爲PCIE設備需要使用的BAR空間的大小
    Pci_subsys_init()
    Pcibios_allocate_bus_resources() 首先DFS算法檢查分配PCI總線樹種所有PCI橋使用的系統資源
    Pci_find_parent_resource() 獲取上游PCI橋所管理的空間資源範圍
    Request_resources() 爲當前PCI設備分配地址空間
    Pci_assign_resources() 設置EP配置空間中的BAR寄存器,填入的值爲該function在PCI總線域中使用的地址空間的基地址
    Pci_setup_bridge() 某個總線下所有設備BAR空間分配之後,將初始化該總線橋的配置空間中的memory base寄存器(該總線子樹下所有設備使用的PCI總線域地址空間的基地址)和memory limit寄存器(總線子樹使用的總地址空間的大小)
    Pci_enable_bridge() pci_enable_device() DFS枚舉之後使能所有設備
    至此完成PCIe總線的上電初始化枚舉過程。

PCIe的三種中斷方式

  1. 在PCIe總線中,MSI/MSI-X中斷機制使用存儲器寫請求TLP向處理器提交中斷請求。
  2. PCIe設備提交MSI/MSI-X中斷請求時,都是向MSI/MSI-X capability結構中的message address地址寫message data數據,從而組成一個存儲器寫TLP,向中斷控制器寫中斷請求,然後中斷控制器向CPU提交中斷後,再由CPU進行處理。
  3. MSI-X中斷機制和MSI中斷機制類似,主要是用於擴展PCIe設備使用中斷向量的個數(MSI中斷最初能使用32箇中斷向量),同時解決MSI中斷機制中要求中斷控制器分配給該設備的中斷向量號連續的問題
  4. PCIe設備還支持傳統的INTx中斷機制用於兼容老舊的PCI設備,但PCIe橋收到PCI設備的INTx信號後,並不能將其直接轉換爲MSI/MSI-X中斷報文,因爲INTx中斷請求機制是電瓶觸發,而MSI/MSI-X中斷機制是邊沿觸發,這種邊沿觸發機制可以避免某個優先級別較高的設備一直佔據中斷源。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章