天天看點

【精講】PCIe基礎篇——BAR配置過程

BAR基礎介紹請參考 【博文連載】PCIe基礎篇——BAR(Base Address Register)詳解

本節講解BAR的填充過程。

執行個體一:

請求一個4KB,non-prefetchable memory address space(NP-MMIO)過程一般需要系統軟體(BIOS/OS)操作下圖1的三步。

表1 Results of Reading the BAR after Writing All Is To It 

【精講】PCIe基礎篇——BAR配置過程
【精講】PCIe基礎篇——BAR配置過程

 圖1 32-Bit Non-Prefetchable Memory BAR Set Up

步驟1:如圖中(1)所示,未初始化的BAR的低比特(11~4)都是0,高比特(31~12)都是不确定的值。所謂初始化,就是系統軟體(BIOS/OS)向整個BAR都寫1,來确定BAR的可操作的最低位是哪一位。目前可操作的最低位為12,是以目前BAR可申請的(最小)位址空間大小為4KB(2^12)。如果可操作的最低位為20,則該BAR可申請的(最小)位址空間大小為1MB(2^20)。

步驟2:如圖中(2)所示,完成初始化(寫1操作)之後,系統軟體(BIOS/OS)便開始讀取BAR的值,來确定每一個BAR對應的位址空間大小和類型。其中操作的類型一般由最低四位所決定,具體如上圖右側部分所示。

步驟3:如圖中(3)所示,系統軟體(BIOS/OS)向BAR的高比特寫入位址空間的起始位址(Start Address)。如圖中所示,為0xF9000000。

執行個體二:

請求一個64MB,prefetchable memory address space(P-MMIO)過程同樣需要系統軟體(BIOS/OS)操作下圖1的三步。

【精講】PCIe基礎篇——BAR配置過程

表2 Results of Reading the BAR after Writing All Is To It 

【精講】PCIe基礎篇——BAR配置過程

圖2  64-Bit Prefetchable Memory BAR Set Up

 步驟仍然是上面的三步,不再贅述。

執行個體三:

請求一個IO位址空間的例子

【精講】PCIe基礎篇——BAR配置過程

圖3 IO BAR Set Up 

【精講】PCIe基礎篇——BAR配置過程

  表3 Results of Reading the BAR after Writing All Is To It 

注1:需要特别注意的是,系統軟體(BIOS/OS)對BAR的檢測與操作(Evaluating)必須是順序執行的,即先BAR0,然後BAR1,……,直到BAR5。當軟體檢測到那些被硬體設定為全0的BAR,則認為這個BAR沒有被使用。

注2:無論是PCI還是PCIe,都沒有明确規定,第一個使用的BAR必須是BAR0。事實上,隻要設計者原意,完全可以将BAR4作為第一個BAR,并将BAR0~BAR3都設定為不使用

繼續閱讀