編 者 按
操作系統中的PCIe
拿一張PCIe Spec中的拓撲圖:
每一張PCIe EP設備連接Switch也好,還是直接插到RC上也好,按照PCIe的協議規定,PCIe是一個點對點傳輸協議,對于每個EP設備,其作為dwon stream端口,而與其對應的,則是其upstream 端口。像在Switch中的結構:
這里面對于Switch而言具有三個Downstream Port,而對于插在上面的三個EP設備而言,其是EP設備的Upstream Port。這三個Switch中的三個DownStream Port在Linux操作系統中也會創建三個PCI文件系統。
在PCIe體系結構中,如果作為EP的設備出現了故障,那么往往其Upstream Port也是會受到影響。通過系統重啟可以解決,而在一些場景下,可能系統重啟不太能接受,那么能否有其他方式來對這條出現問題的點對點鏈路進行下恢復呢?
按下Linux里面的PCIe復位鍵。
找到EP的Upstream Port
EP設備的Upstream Port在Linux操作系統中會當作一個PCIe Bridge Port,通過lspci是能夠看到的。
對于如何找到對應的EP設備的Upstream Port,如果你對lspci工具命令行熟悉的話,可以通過lspci -tv指令去獲取對應的Upstream Port。如果不熟,也沒關系,提供一段python代碼,可以獲取到EP對應的Upstream Port的BDF號。
importos deffind_upstreamport(ep_bdf): result_dirs = [] forroot, dirs, files inos.walk("/sys/devices"): fordir indirs: ifdir == ep_bdf: returnos.path.basename(root) print("{0} upstream port not found".format(ep_bdf))
參數ep_bdf為對應的ep設備的bdf號,需帶上domain域,形式為xxxxxx.x
Secondary Bus Reset
對于Port bridge,其配置空間定義中Bridge Control Register (Offset 3Eh)包含Secondary Bus Reset定義:
按照協議中Secondary Bus Reset的定義:
設置該位會觸發相應 PCI Express 端口上的熱復位。軟件必須確保最短復位持續時間 (Trst)。軟件和系統必須遵守第 6.6 節中定義的先訪問后復位時序要求,除非使用就緒通知機制(請參閱第 6.23 節)或設置相關功能狀態寄存器中的立即就緒位。
端口配置寄存器不得更改,除非需要更新端口狀態。
該位的默認值為 0b。
即我們可以通過對該位域先寫1,再寫0從而對Port Bridge下的設備進行復位。
審核編輯:湯梓紅
-
Linux
+關注
關注
87文章
11123瀏覽量
207882 -
操作系統
+關注
關注
37文章
6543瀏覽量
122724 -
端口
+關注
關注
4文章
915瀏覽量
31851
原文標題:按下Linux里PCIe的復位鍵
文章出處:【微信號:Spinal FPGA,微信公眾號:Spinal FPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論