99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

PCI Express體系結構導讀筆記之寄存器和配置

jf_78858299 ? 來源:布魯斯的讀書圈 ? 作者: BruceL ? 2023-01-30 15:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

之前調試了幾個PCI網卡驅動,雖然功能沒什么問題,但驅動中調用的某些內核提供的PCI相關的接口一直沒搞太清楚,所以最近準備深入研究一把。

PCI設備的識別及配置方式

PCI總線使用單端并行數(shù)據(jù)總線,采用地址譯碼方式進行數(shù)據(jù)傳遞,而采用ID譯碼方式進行配置信息(比如配置某個PCI設備的物理地址)的傳遞。其中地址譯碼方式使用地址信號,而ID譯碼方式使用PCI設備的ID號,包括Bus Number、Device Number、Function Number和Register Number。Linux系統(tǒng)中使用了Bus Number、Device Number和Function Number區(qū)分不同的設備;對于有兩個接口的網卡,Linux會按照兩個設備處理,因為這兩個接口會呈現(xiàn)出不同的Function Number。

Posted和Non-Posted傳送方式

PCI總線規(guī)定了兩類數(shù)據(jù)傳送方式,分別是Posted和Non-Posted數(shù)據(jù)傳送方式。又分別對應了Posted和Non-Posted總線事務。

Posted總線事務指PCI主設備向PCI目標設備進行數(shù)據(jù)傳遞時,當數(shù)據(jù)到達PCI橋后,即由PCI橋接管來自上游總線的總線事務,并將其轉發(fā)到下游總線。采用這種數(shù)據(jù)傳遞方式,在數(shù)據(jù)還沒有到達最終的目的地之前,PCI總線就可以結束當前總線事務,從而在一定程度上解決了PCI總線的擁塞問題,所以這種方式的PCI總線利用率較高。只有存儲器寫請求可以采用Posted總線事務,簡稱為PMW(Posted Memory Write)。

Non-Posted總線事務是指PCI主設備向PCI目標設備進行數(shù)據(jù)傳遞時,數(shù)據(jù)必須到達最終目的地之后,才能結束當前總線事務的一種數(shù)據(jù)傳遞方式。存儲器讀請求、I/O讀寫請求、配置讀寫請求只能采用Non-Posted總線事務。

中斷請求和數(shù)據(jù)傳送的同步問題(MSI中斷機制不存在這個問題)

在PCI總線中,INTx信號是一個異步信號。所謂異步,是指INTx信號的傳遞并不與PCI總線的數(shù)據(jù)傳送同步。假設某個PCI設備在使用DMA方式將一組數(shù)據(jù)寫入存儲器,該設備在最后一個數(shù)據(jù)離開自己的發(fā)送FIFO時,即認為DMA操作已經完成。此時這個設備將通過INTx信號,通知處理器DMA寫操作完成。

但是,當處理器收到INTx信號時,并不意味著PCI設備已經將數(shù)據(jù)寫入存儲器中,因為PCI設備的數(shù)據(jù)傳遞需要經過PCI橋/HOST主橋,最終才能到達存儲器。

PCI總線提供了以下兩種方法解決這個同步問題。

(1)PCI設備保證在數(shù)據(jù)到達目的地之后,再提交中斷請求。具體來說,PCI設備在提交中斷請求之前,向DMA寫的數(shù)據(jù)區(qū)域發(fā)出一個讀請求。PCI總線的“序”機制,保證了在這個存儲器讀請求完成前,會將以前發(fā)出的DMA數(shù)據(jù)寫入存儲器。PCI總線規(guī)范要求HOST主橋和PCI橋必須保證這種讀操作可以刷新寫操作。但問題是,沒有多少芯片設計者愿意提供這種機制,因為這將極大地增加他們的設計難度。除此之外,使用這種方法也將增加中斷請求的延時。

(2)中斷服務程序在使用“PCI設備寫入存儲器”的這些數(shù)據(jù)之前,需要對這個PCI設備進行讀操作。這個讀操作也可以強制將數(shù)據(jù)最終寫入存儲器。這種方法也是利用了PCI總線的傳送序規(guī)則,與第1種方法類似。只是這種方法使用軟件方式,而第1種方式使用硬件方式。這是絕大多數(shù)處理器系統(tǒng)采用的方法。在中斷服務程序中,往往都是先讀取PCI設備的中斷狀態(tài)寄存器,判斷中斷產生原因之后,才對PCI設備寫入的數(shù)據(jù)進行操作。這個讀取中斷狀態(tài)寄存器的過程,一方面可以獲得設備的中斷狀態(tài),另一方面可以保證DMA寫的數(shù)據(jù)(在被CPU讀取前)已經到達存儲器。

PCI配置空間中的幾個寄存器的作用

(1)Cache Line Size寄存器:記錄HOST處理器使用的Cache Line長度。在PCI總線中和Cache相關的總線事務,如存儲器寫并無效和Cache多行讀等總線事務需要使用這個寄存器。該寄存器由系統(tǒng)軟件設置,但是在PCI設備的運行過程中,只有其硬件邏輯才會使用該寄存器。對于PCIe設備,該寄存器的值無意義,因為PCIe設備在進行數(shù)據(jù)傳送時,在其報文中含有一次數(shù)據(jù)傳送的大小,PCIe總線控制器可以使用這個“大小”,判斷數(shù)據(jù)區(qū)域與Cache Line的對應關系。

(2)Interrupt Line寄存器:由系統(tǒng)軟件對PCI設備進行配置時寫入,記錄當前PCI設備使用的中斷向量號。設備驅動程序可以通過這個寄存器,判斷當前PCI設備使用處理器中的哪個中斷向量號,并將驅動程序中的中斷服務例程注冊到操作系統(tǒng)中。但是,目前在絕大多數(shù)處理器系統(tǒng)中,并沒有使用該寄存器存放PCI設備使用的中斷向量號。

(3)Base Address Register 0~5 寄存器:簡稱為BAR寄存器。保存的是PCI設備在PCI總線域中的基地址,由操作系統(tǒng)配置。在PCI設備復位之后,該寄存器將存放PCI設備需要使用的基址空間大小、這段空間是I/O空間還是存儲器空間、如果是存儲器空間是否可預取等。

系統(tǒng)軟件對PCI總線進行配置時,先獲取BAR寄存器中的初始化信息,之后根據(jù)處理器系統(tǒng)的配置,將合理的基地址寫入相應的BAR寄存器中。系統(tǒng)軟件還可以使用該寄存器獲得PCI設備使用的BAR空間的長度,方法是向BAR寄存器中寫入0xFFFFFFFF,然后再讀取該寄存器。

(4)Command寄存器:在初始化時,其值為0,此時這個PCI設備除了能夠接收配置請求總線事務外,不能接收任何存儲器或者I/O請求。在Linux系統(tǒng)中,設備驅動程序調用pci_enable_device函數(shù)(也可以是pci_enable_device_mem-> pci_enable_device_flags-> do_pci_enable_device-> pcibios_enable_device-> pci_enable_resources-> pci_write_config_word),使能該寄存器的I/O和Memory Space位之后,才能訪問該設備的存儲器或者I/O地址空間。

另外,該寄存器中還有Bus Master位表示該設備是否可以作為主設備(Linux驅動程序中調用pci_set_master函數(shù),將此位設置為1,表示設備可作為master)。寄存器中的Interrupt Disable位默認為0,為1時表示不允許該設備使用INTx信號提交中斷請求,當PCI設備使用MSI中斷方式時,該位將被設置為1(Linux驅動程序中調用的函數(shù)為pci_alloc_irq_vectors-> pci_alloc_irq_vectors_affinity-> __pci_enable_msi_range-> msi_capability_init-> pci_intx_for_msi-> pci_intx)。

Linux的PCI設備驅動程序中調用的dma_set_mask_and_coherent函數(shù)有什么作用

Linux的PCI設備驅動中一般都會調用諸如dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64))之類的接口。這是用來通知內核當前設備支持的DMA訪問的尋址能力,作用是限制內核為當前設備分配的內存地址范圍。比如之前的例子就表示當前設備支持64位尋址,并且在此范圍內支持一致性DMA訪問。

Linux的PCI設備驅動程序中調用的pci_disable_link_state函數(shù)有什么作用

有些PCI設備的驅動中會調用諸如pci_disable_link_state(pdev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM)之類的接口。其作用是設置PCIe設備的擴展配置空間中的Link Control寄存器。具體到前例,是把Link Control寄存器中的“ASPM Control”字段和“Enable clkreq”字段設置為0,作用分別是禁止PCI設備進入L0s和L1(低功耗)狀態(tài)以及禁止CLKREQ功能(相當于禁止設備的時鐘管理功能,起到性能優(yōu)先的效果,不考慮省電;具體效果還取決于內核中CONFIG_PCIEASPM_XXXX相關的配置)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 網卡
    +關注

    關注

    4

    文章

    327

    瀏覽量

    28084
  • PCI
    PCI
    +關注

    關注

    5

    文章

    679

    瀏覽量

    132074
  • 總線
    +關注

    關注

    10

    文章

    2960

    瀏覽量

    89765
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    淺析PCI體系結構

    PCI總線作為處理系統(tǒng)的局部總線,主要目的是為了連接外部設備,而不是作為處理的系統(tǒng)總線連接Cache和主存儲。但是PCI總線、系統(tǒng)總線
    發(fā)表于 08-06 06:02

    ARM體系結構寄存器詳解

    ARM寄存器ARM微處理共有37個32位寄存器,其中31個為通用寄存器,6個為狀態(tài)寄存器。但是這些寄存
    發(fā)表于 08-25 15:23

    ARM裸機全集ARM體系結構

    ARM裸機全集ARM體系結構
    發(fā)表于 07-01 06:12

    Microarchitecture指令集體系結構

    第二章 ARM微處理概述與編程模型ARM體系結構及其發(fā)展歷史處理體系結構處理微架構 Microarchitecture指令集
    發(fā)表于 12-14 07:13

    ARM體系結構標準配置

    ARM體系結構包含大量功能,這些功能被描述為可選或定義的實施。來自平臺操作系統(tǒng)供應商的反饋表明這種可變性對于系統(tǒng)代碼的開發(fā)人員來說是一個實質性的問題,由于操作系統(tǒng)必須滿足各種不同的系統(tǒng)配置,導致開發(fā)
    發(fā)表于 08-08 07:40

    ARM通用中斷控制體系結構規(guī)范GIC體系結構版本3和版本4

    本手冊中的體系結構描述使用了與Armv8體系結構相同的術語。有關該術語的更多信息,請參閱Armv8-A架構配置文件Armv8 Arm?架構參考手冊A部分的介紹。此外,在適當?shù)那闆r下使用AArch64
    發(fā)表于 08-11 07:45

    ARM微處理體系結構

    ARM微處理體系結構: 2.2.1 數(shù)據(jù)類型 2.2.2 ARM微處理的工作狀態(tài) 2.2.3 ARM體系結構的存儲
    發(fā)表于 06-17 00:24 ?42次下載

    用于基于超級體系結構設備的PCI Express總線接口資料免費下載

    從簡單的寄存器訪問到移動數(shù)百GB的數(shù)據(jù),UltraScale?體系結構中最新的PCI Express集成塊為下一代系統(tǒng)提供了多種連接。
    發(fā)表于 02-19 11:53 ?7次下載
    用于基于超級<b class='flag-5'>體系結構</b>設備的<b class='flag-5'>PCI</b> <b class='flag-5'>Express</b>總線接口資料免費下載

    采用PCI9052芯片的配置寄存器及加載其驅動程序的開發(fā)

    的大小為256字節(jié),分為頭標區(qū)和設備有關區(qū)。直接影響設備特性的配置寄存器在頭標區(qū),其他部分則因設備而異。PCI總線的配置空間通常與PCI接口
    發(fā)表于 04-04 18:14 ?2045次閱讀
    采用<b class='flag-5'>PCI</b>9052芯片的<b class='flag-5'>配置</b><b class='flag-5'>寄存器</b>及加載其驅動程序的開發(fā)

    ARM體系結構的基本特性介紹

    01ARM匯編指令 操作系統(tǒng)中硬件相關的部分集中體現(xiàn)在匯編指令和對寄存器的操作中,因此我們對ARM體系結構的介紹也圍繞ARMv8-A的匯編指令和寄存器來展開。 處理架構是處理
    的頭像 發(fā)表于 09-26 10:04 ?6997次閱讀
    ARM<b class='flag-5'>體系結構</b>的基本特性介紹

    淺談PCI Express體系結構(四)

    PCI總線的中斷機制PCI總線使用INTA#、INTB#、INTC#和INTD#信號向處理發(fā)出中斷請求。這些中斷請求信號為低電平有效,并與處理的中斷控制
    發(fā)表于 12-17 18:26 ?10次下載
    淺談<b class='flag-5'>PCI</b> <b class='flag-5'>Express</b><b class='flag-5'>體系結構</b>(四)

    PowerPC的發(fā)展與體系結構概述

    第一部分 PowerPC ? 精簡指令集計算機(RISC)簡介 PowerPC 體系結構是一種精減指令集計算機(Reduced Instruction Set Computer,RISC)體系結構
    的頭像 發(fā)表于 06-18 20:02 ?4420次閱讀
    PowerPC的發(fā)展與<b class='flag-5'>體系結構</b>概述

    PCI Express體系結構導讀筆記橋和中斷的基礎知識

    1. PCI設備能直接使用的地址是PCI總線域的地址,處理能夠直接使用的是存儲域的地址,PCI主橋負責在這兩種地址之間轉換。當然為了方便
    的頭像 發(fā)表于 01-30 15:38 ?991次閱讀
    <b class='flag-5'>PCI</b> <b class='flag-5'>Express</b><b class='flag-5'>體系結構</b><b class='flag-5'>導讀</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b>橋和中斷的基礎知識

    PCI Express體系結構導讀筆記基本連接方式

    1. 每一個PCI設備都有獨立的配置空間,在配置空間中含有該設備在PCI總線中使用的基地址。系統(tǒng)軟件可以動態(tài)配置這個基地址,保證每一個
    的頭像 發(fā)表于 01-30 15:39 ?1130次閱讀

    寄存器間接尋址和寄存器尋址的區(qū)別

    寄存器間接尋址和寄存器尋址是計算機體系結構中兩種重要的尋址方式,它們在指令執(zhí)行過程中起著關鍵作用。下面將從定義、原理、特點、應用場景以及區(qū)別等方面對這兩種尋址方式進行詳細闡述。
    的頭像 發(fā)表于 10-05 17:13 ?3680次閱讀