大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來(lái)聊一聊PCIe的軟件配置方式。
關(guān)于PCIe的軟件配置和初始化
PCIe設(shè)計(jì)出來(lái)考慮了和pci兼容問(wèn)題。所以PCIe的軟件配置方式可以沿用PCI的配置方式。當(dāng)然,由于特殊性,也有自身獨(dú)特的配置方式。所以PCIe模塊的訪問(wèn)方式有如下兩種:
1、 PCI 兼容的配置方式。
2、 PCI Express enhanced 配置機(jī)制。
PCI兼容方式是在PCI章節(jié)已經(jīng)提過(guò),PCIe與其完全兼容。這里主要描述PCIE高級(jí)配置機(jī)制。
PCIe的配置空間
PCIe的配置空間是兼容PCI的,但是在PCI的基礎(chǔ)上增加了不少register。從256增加到4Kbytes的大小。如下圖所示,PCIe的配置空間。
其中,PCIe的配置空可以分成PCI兼容部分和擴(kuò)展部分。PCI兼容部分在前面256byte區(qū)域,完全可以使用PCI配置機(jī)制來(lái)訪問(wèn)。而擴(kuò)展部分的register,使用PCI配置方式無(wú)法實(shí)現(xiàn),則可以通過(guò)PCIe 高級(jí)配置方式完成。
PCIe高級(jí)配置機(jī)制
PCIe enhanced configuration mechanism的主要原理是將pcie的所有4K bytes 映射到memory地址上,這樣,通過(guò)訪問(wèn)memory的方式即可讀寫PCIE的配置空間。當(dāng)然,通過(guò)此方式讀memory時(shí)候,最好考慮到4字節(jié)對(duì)齊的問(wèn)題,否則有可能出錯(cuò)。
在正常的訪問(wèn)過(guò)程中,可以訪問(wèn)這一部分的memory來(lái)配置pcie,而這部分memory在哪里呢?芯片組中會(huì)定義一個(gè)base address,而base address開始的256MB的空間內(nèi)則是總線上所有PCIe設(shè)備的配置空間對(duì)應(yīng)的register。
上圖是PCIE總線高級(jí)配置結(jié)構(gòu)圖,很明顯可以看出是PCIE配置空間映射的memory空間為[XbaseAddress +0 àXbaseAddress +FFFFFFFh]。那么實(shí)際的地址線如何對(duì)應(yīng)呢?如下圖所示:
在程序中的表達(dá)和操作是這樣的:
1、計(jì)算出PCIe設(shè)備配置空間中寄存器的地址:Register address = PCIe_Base + (BusNO * 1MB) + (DeviceNO * 32KB) + (FuncNO* 4KB) + (Reg).
2、使用memory 讀寫周期完成register的讀寫。
PCIE配置空間register
詳細(xì)的register解讀,請(qǐng)閱讀PCIe spec或者參考一份X86架構(gòu)的芯片組datasheet。
今天就聊到這里,各位,加油。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論