上一篇文章介紹了Type0型配置空間Header中的BAR的作用和用法,但是PCIe中的橋設(shè)備(Switch和Root中的P2P)又是如何判斷某一請(qǐng)求(Request)是否屬于自己或者自己的分支下的設(shè)備的呢?這實(shí)際上是通過(guò)Type1型配置空間Header中的Base和Limit寄存器來(lái)實(shí)現(xiàn)的,這篇文章來(lái)進(jìn)行簡(jiǎn)單地介紹一下。
Base和Limit寄存器在Type1 Header中的位置如下圖所示:
Base和Limit寄存器分別確定了其所有分支下設(shè)備(The device that live beneath this bridge)的地址的起始和結(jié)束地址。根據(jù)請(qǐng)求類型的不同,分別對(duì)應(yīng)不同的Limit&Base組合:
· Prefetchable Memory Space(P-MMIO)
· Non- Prefetchable Memory Space(NP-MMIO)
· IO Space(IO)
一旦該橋分支下面的任意設(shè)備的BAR發(fā)生改變,該橋的Base&Limit寄存器也需要做出對(duì)應(yīng)的改變。
下面以一個(gè)簡(jiǎn)單的例子,來(lái)分析一下:
如上圖所示,連接到Switch的PortB上的PCIe Endpoint分別配置了NP-MMIO、P-MMIO和IO空間。下面來(lái)簡(jiǎn)單地分析一下PortB的Header中的Base & Limit 寄存器。
P-MMIO Base & Limit
NP-MMIO Base & Limit
需要注意的是,Endpoint的需要的NP-MMIO的大小明明只有4KB,PortB的Header卻給其1MB的空間(最小1MB),也就是說(shuō)剩余的空間都將會(huì)被浪費(fèi)掉,并且其他的Endpoint都將無(wú)法使用這一空間。
IO Base & Limit
注:IO空間可分配的最小值為4KB,最大值則取決于操作系統(tǒng)和BIOS。
Unused Base and Limit Registers
很多情況下,我們并不需要所有的地址空間類型,比如所在某一個(gè)Endpoint中沒有使用IO Space。此時(shí),其對(duì)應(yīng)的橋的Header會(huì)把Base的地址設(shè)置為大于Limit的地址,也就是把地址范圍設(shè)置為無(wú)效。
注:Mindshare的書這個(gè)地方似乎寫錯(cuò)了,以PCIe Spec為準(zhǔn)。
一個(gè)完整的例子如下圖所示:
-
寄存器
+關(guān)注
關(guān)注
31文章
5295瀏覽量
119824 -
PCIe
+關(guān)注
關(guān)注
15文章
1200瀏覽量
82353
原文標(biāo)題:【博文連載】PCIe掃盲——Base & Limit寄存器詳解
文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論