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