incoming transaction的StreamID可以找到一個STE。SMMU支持兩種Stream table格式,格式由Stream table base registers設(shè)置。
傳入的StreamID會根據(jù)指定的table size進(jìn)行范圍檢查,StreamID超出范圍,則transaction就會被terminated,并且記錄事件C_BAD_STREAMID。
當(dāng)支持兩個Security states時,如SMMU_S_IDR1.SECURE_IMPL == 1所示,使用SEC_SID標(biāo)識transaction 是 Secure or Non-secure,后續(xù)使用各自獨(dú)立的軟件接口和數(shù)據(jù)結(jié)構(gòu)。
Linear Stream Table
Linear Stream Table
linear Stream table是 STE 的連續(xù)數(shù)組,由 StreamID 從 0 開始索引。該大小可配置為2^n ,最多為 SMMU 在硬件中支持的最大 StreamID 位數(shù)。
2-level Stream Table
Two-level Stream Table with SPLIT == 8
2-level Stream table包含一個top-level table,該表包含指向多個second-level tables(STE 線性數(shù)組)的指針。整個結(jié)構(gòu)涵蓋的 StreamID 范圍可配置為 SMMU 支持的最大數(shù)量,但second-level tables不必完全填充,并且大小可能會有所不同。這節(jié)省了內(nèi)存并避免了對非常大的 StreamID 空間進(jìn)行大量連續(xù)分配物理空間的要求。top-level descriptors包含指向second-level table的指針以及該second-level table表示的 StreamID 范圍。每個second-level table的指針(descriptor )也可以標(biāo)記為invalid。
top-level table由 StreamID[n:x] 索引,其中 n 是覆蓋的最高 StreamID 位,x 是由 SMMU_(S_)STRTAB_BASE_CFG.SPLIT 給出的可配置分割點(diǎn)。second-level tables 的索引最多為 StreamID[x - 1:0],具體取決于每個表的跨度(span)。
SMMU_IDR0.ST_LEVEL 字段可以指示是否支持2-level Stream table。在支持2-level Stream Tables的情況下,可以使用 6、8 和 10 位的分割點(diǎn)。SMMU實(shí)現(xiàn)可以支持linear Stream Table,或者同時支持 linear和2-level Stream Table。
支持超過 64 個 StreamID(6 位 StreamID)的 SMMU 必須支持2-level Stream tables。
支持少于64個StreamID的SMMU實(shí)現(xiàn)也可能支持 2-level Stream Tables,但這樣做通常沒有用,因?yàn)樗衧treams 可以填充到一個second-level table。意味著當(dāng)linear Stream table的最大大小而無法容納進(jìn)一個4KB頁面時,就必須支持two-level tables。
在這個例子中:
? StreamIDs 0-1023(4 × 8-bit level 2 tables)被表示,但不是所有l(wèi)evel 2 tables都有效。
? StreamIDs 0-255 由位于 0x1000 的 STE 數(shù)組。
? StreamIDs 256-259 由位于 0x2F20 的 STE 數(shù)組。
? StreamIDs 512-767 都是無效的。
? StreamID 768 的STE 位于0x4000。
審核編輯:劉清
-
ARM
+關(guān)注
關(guān)注
134文章
9027瀏覽量
366495 -
STE
+關(guān)注
關(guān)注
0文章
8瀏覽量
9191
原文標(biāo)題:2-level Stream Table
文章出處:【微信號:芯片驗(yàn)證工程師,微信公眾號:芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論