SRIO系統初始化過程和路由配置

2021-09-24 09:52:05 字數 2522 閱讀 4200

qq群:852283276

b站:主頁

rapidio規範《rapidio_rev_2.2_specification》

書籍《rapidio the embedded system interconnect》

系列部落格srio學習

系列部落格rapidio(還介紹了tsi721)

xilinx zynq zynqmp rapidio srio

idt cps1848 srio交換晶元使用

直接看rapidio的初始化,一些底層的比如物理層鏈路層之類的不需要關心,用到了再去看,畢竟都是基於晶元或者ip來開發,從頂層了解這個過程。

host cpu獲取引導**,啟動,如果有兩個host,則兩者是同時啟動的。

開始執行系統探測和列舉演算法。

列舉所有器件並將相關器件資訊記錄到器件資料庫,建立host和所有endpoint之間的路由。

計算並配置host和所有endpoint之間的最優路徑。

用最優路徑資訊配置switch。

更新路由表。

對映位址空間。

上面提到的最優路徑,就是所謂的列舉演算法的目的,可以是最短路徑同時包含一些使用者約束,。

系統初始化之後,所有器件都會擁有乙個id,在系統初始化之前,按照下面設定。rapidio系統應該只有乙個引導**器件。

列舉過程中,將給每個endpoint分配唯一的器件id,為了增強容錯性,rapidio系統可以有兩個host,經過競爭,最終只有乙個host來完成列舉,如果主機列舉過程失敗並發生超時事件,則另一主機重新列舉。列舉演算法根據器件id大小設定優先順序,id大的host競爭獲勝,在列舉同乙個endpoint時會發生競爭,失敗host主動退出列舉,列舉結束之後,其他主機可以通過被動發現(passively discovery)收集網路中的路由拓撲資訊。所以host的id可以設定為0x00(0x0000)和0x01(0x0001),其中0x01的優先順序更高。host應當將自己的主機使能位置1,switch沒有這個位,當host釋放對失敗主機的鎖定時,列舉完成,失敗host自己檢測是否被鎖定和釋放鎖定。在開放式(open)8位器件id系統中,如果host列舉失敗,那麼失敗主機重新列舉時,必須等待15秒。在閉合式(closed)或者16位器件id系統中,超時等待時間需要設計。

以xilinx zynq說明,

使能host模式。

配置id。

配置cps1848路由,使能埠收發(手冊預設是開啟的)。

鎖定host。

搜尋系統拓撲。

讀取lock id csr,如果暫存器值等於host id,則判定已經鎖定,退出,否則進入2。

寫入host id,再讀取host id,如果暫存器值大於host id則進入退避狀態,如果小於host id,則已經被鎖定(但和另乙個host衝突),進入等待退避狀態,等待另乙個host退避。如果等於host id,則鎖定成功。

這裡只考慮switch是cps1848的情況,tsi578原理是一致。

如果這個cps1848是直接與host zynq相連的switch。

搜尋cps1848,設定0x13c暫存器port general control csr的discv位,表示這個switch已經被發現,設定component tag csr,它是乙個裝置的身份標識。

讀0x14暫存器switch port information car得到port數量,就是18。

迴圈搜尋每個port,如果是host port則使能埠收發,如果是其他port,讀取鏈路狀態,如果正常,用預設id 0xff配置路由,使能埠收發,然後嘗試鎖定該埠裝置(endpoint或switch),鎖定過程和鎖定host是一樣的。

如果鎖定成功,讀取processing elements features car暫存器,等到function,判斷裝置型別,決定下一步拓撲方式。如果是endpoint型別,關閉master enable,置位discovered,分配id號,配置該port的路由表。如果是switch型別,則遞迴呼叫switch列舉過程。

如果是已經鎖定狀態(存在環路),直接更新拓撲,不做任何配置。

如果這個cps1848不和host直接相連。

設定discv位,得到與上級switch相連的埠號,設定host的路由,設定預設路由為到host的埠。

同上。同上。

現在拓撲關係已經搜尋出來了。下面就是配置路由,因為上述搜尋過程的路由配置不一定是最優配置,也不滿足使用者的需求。 所以現在需要按照設計需求,生成路由表然後寫到各個switch。

這裡實現linux使用者態的驅動,資料結構定義,

struct srioendpoint

;#define srio_sw_max_port 18

//get from cps1848

struct srioswitch

;#define srio_sys_max_ep_num 64

#define srio_sys_max_sw_num 4

struct sriosystem

;

Jupyter qtconsole初始化配置

2 退出qtconsole時去除確定退出提醒,修改檔案jupyter qtconsole config.py第47行 set to display confirmation dialog on exit.you can always use exit or quit to force a direc...

類初始化和例項初始化過程

類初始化過程 乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行 方法 由靜態類變數賦值 和靜態 塊組成 靜態類變數賦值 和靜態 塊從上往下執行 方法只執行一次 例項初始化過程 例項初始化就是執行 方法 方法可能過載...

ubuntu系統初始化網路及mysql配置

安裝系統時需要安裝open ssh服務軟體,否則無法遠端連線 1 修改root密碼 sudo passwd 輸入密碼即可 切換到root使用者,需要輸入剛才的root密碼 2 配置網路 3 重啟網絡卡服務 此時就可以通過ssh客戶端連線了 etc init.d networking restart ...