ARM SMMU Data structure之Context Descriptors

描述

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.S1FmtSTE.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。 

TLB电路

Configuration structure example

上图显示了一个示例配置,其中StreamID从linear Stream table中选择一个Ste,Ste指向stage2的translation table,并指向单个 stage1的CD配置, 然后CD指向stage1的translation tables。 

TLB电路

上图显示了一个配置,其中一个STE指向包含多个cd的数组。SubstreamID选择其中一个cd,最终确认要用的stage1页表。 

TLB电路

Multi-level Stream and CD tables

上图显示了一个更复杂的布局,其中使用了一个multi-level Stream table。其中两个STE指向一张CD或一个CD数组,而第三个STE指向一个multi-level CD table 。





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分