STE 包含每個stream的配置,指示:
? 是否啟用來自device的流量。
? 是否進行stage 1 translation,獲取stage 1 translation tables的配置。
? 是否進行stage 2 translation以及相關的stage 2 translation tables和VMID。
如果啟用了stage 1,則STE中的S1ContextPtr字段包含一個或多個cd的基址。CD將StreamID與stage 1 translation table基指針(將VA轉換為IPA)、per-stream配置和ASID關聯起來。
如果多個devices與一個特定的虛擬機相關聯,這意味著它們共享stage 2 translation tables,也就是說多個ste可能會映射到一個stage 2 translation table。
通常來說,Stream table和stage 2 translation table由hypervisor管理,而與devices相關的cd和stage 1 translation tables由guest OS管理。此外,hypervisor可以使用單獨的hypervisor stage 1 translations。
在不使用hypervisor的情況下,裸機操作系統管理Streamtable和CDs。
當輸入事務啟用SubstreamID時,SubstreamID索引CDs以選擇 stage 1 translation context。如果沒有提供SubstreamID,行為取決于ST.S1DSS:
當STE.S1DSS == 0b00,所有流量都有SubstreamID,不帶有SubstreamID的輸入事務則被中止并記錄一個事件。
當STE.S1DSS == 0b01,沒有SubstreamID的事務視為配置stage 1-bypass。
當STE.S1DSS == 0b10,沒有SubstreamID的事務使用Substream=0的CD。在此配置下,SubstreamID=0的事務將被中止,并記錄一個事件。
當stage 1被啟用時,STE.S1ContextPtr字段給出了以下地址之一(由配置STE.S1Fmt和STE.S1CDMax)確定:
一張CD。
single-level table of CDs的起始地址。
L1CDs的起始地址,L1CD.L2Ptr都指向一個L2CDs的起始地址。L1CDs由SubstreamID的高位索引,L2CDs由SubstreamID的較低位索引。用于L1CDs和L2CDs索引的SubstreamID位由STE.S1Fmt配置。
當同時使用stage 1和stage 2時,S1ContextPtr和L2Ptr地址為IPA,僅使用stage1時為PA。
由CD和STE提供的ASID和VMID值是TLB tag的一部分,用于區分不同之間的地址空間,或者在接收到TLB invalidation操作時匹配無效的TLB。
Configuration structure example
上圖顯示了一個示例配置,其中StreamID從linear Stream table中選擇一個Ste,Ste指向stage2的translation table,并指向單個stage1的CD配置, 然后CD指向stage1的translation tables。
上圖顯示了一個配置,其中一個STE指向包含多個cd的數組。SubstreamID選擇其中一個cd,最終確認要用的stage1頁表。
Multi-level Stream and CD tables
上圖顯示了一個更復雜的布局,其中使用了一個multi-level Stream table。其中兩個STE指向一張CD或一個CD數組,而第三個STE指向一個multi-level CD table 。
審核編輯:劉清
-
ARM
+關注
關注
134文章
9098瀏覽量
367707 -
操作系統
+關注
關注
37文章
6834瀏覽量
123350 -
虛擬機
+關注
關注
1文章
917瀏覽量
28221 -
TLB電路
+關注
關注
0文章
9瀏覽量
5249
原文標題:ARM SMMU Data structure之Context Descriptors
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論