STE包含每个stream的配置:
- 是否使能来之设备的流量;
- 是否是stage1转换;
- 是否是stage2转换
- 哪个数据结构定位到stage1的转换表
若使用stage1,STE使用域STE.S1ContextPtr来指示内存中的一个或多个CD的地址。
CD关联起streamID和stage1转换表基指针(转换VA到IPA),基于stream的配置以及ASID。若使用SubStreamID,多个CD表示多个stage1的转换,每个SubstreamID指向一个。当stage1转换没有使能时SubStreamID指向的事务会被终止。
如果使用stage2,STE包含stage2转换表基指针(将IPA转换为PA)和VMID。如果多个设备都与某个特定的虚拟机相关,这意味着他们共享stage2转换表。多个STE可能都映射到同一个stage2转换表。
NOTE: ARM期望当hypervisor软件存在时,hypervisor管理stream表和stage2转换表。CD和stage1的转换表由guest OS来管理。另外,hypervisor可以充分使用stage1转换来实现自己的内部目的。当不使用hypervisor时,单个OS管理stream表和CD。要了解更多,可查章节3.6。
当事务带SubstreamID时,配置使能substreams,SubstreamID标识了选择stage1转换上下文的CD。在这个配置中,若substreamID没有使用时,行为依赖于STE.S1DSS标志:
- 当STE.S1DISS=0b00,所有在事务需要携带SubstreamID,缺少SubstreamID意味着错误。当事务不带SubstreamID会被abort并event会被记录。
- 当STE.S1DISS==0b01时,事务不带SubstreamID可被接受且被看作它的配置是stage1 bypass。仅当事务携带SubstreamID时才会使能stage1转换。
- 当STE.S1DISS=0B10时,事务不带SubstreamID被接受且使用substream=0的CD。在这个配置下,带SubstreamID=0的事务被abort且event被记录。
CD和STE结构中的ASID和VMID用来tag TLB条目(这些条目是由CD和STE的配置来创建的)。这些tag用来查找和区分不同stream的地址空间的转换,或匹配接收到broadcast TLB操作的无效化项。实现可能使用这些tag来有效的允许不同的stream共享不同的转换表。
图6给出了一个例子,配置中StreamID用来选择线性Stream表中的STE。STE指向stage2的转换表和一个stage1配置的单个CD。然后CD指向stage1的转换表。
图7给出了一个配置中STE指向多个CD。SubstreamID用来选择CD中的一个并且SubstreamID决定一个事务使用哪个stage1转换。
图8给出了一个更复杂的情况,使用多级stream表。两个STE分别指向单个CD,第三个CD指向多级CD表。使用多级,在不需要很大的连续物理表的情况下可以支持多个streams和substream。
即将来的事务处理如下步骤:
(1)如果SMMU全局disable(比如SMMU_CR0.SMMUEN=0),事务会pass through SMMU且无任何地址修改。全局属性,如内存类型或共享型,被应用到SMMU的SMMU_GBPA寄存器。或者SMMU_GBPA寄存器可以被配置为abort所有的事务。
(2)若步骤(1)中的全局bypass没有使用时,
a. STE被定位到;
b. STE使能stage2事务,STE包含stage2的转换表基地址;
c. STE使能stage1事务,CD被定位到。若STE使能stage2转换,从使用stage2转换表中的IPA空间取出CD。否则从PA空间取出CD。
(3)若配置有效,发起转换:
a. 若stage1被配置为转换,CD包含转换表基地址。若STE的stage2被使能时要求进行stage2转换。否则stage1跳过转换,输入地址直接到stage2;
b. 若stage2被配置为转换,STE包含发起nested walked的stage1转换表(若使能),或IPA的正常walk。否则,stage2跳过转换,stage2的输入地址被作为输出地址。
(4)具有有效的配置的事务在转换过程中没有fault时,会有输出的地址(内存属性)。
NOTE: 上述时序描述了非安全stream的路径。若支持两个安全状态时,安全状态的事务也类似,除了SMMU_S_CR0.SMMUEN和SMMU_S_GBPA控制bypass,stage2不支持。
这些步骤要求实现能够缓存数据。章节16.2描述了配置和转换结构的缓存。
此外,event可能发生在处理过程中的多个阶段,以此来阻止进一步处理。若事务不能找到有效的配置或者遇到不支持的类型,它将以abort终止,并event被记录。如果事务进展到转换阶段,fault可能在转换的任一阶段产生。CD和STE特有的配置用来决定事务是否终止或是否stall,暂缓软件fault解决,看章节3.12。
使用VA到IPA或IPA到PA来描述两个阶段转换。
NOTE: 一些涉及到SMMU输入的系统使用BA。术语VA重点表示SMMU的输入,也可能与PE进程的虚拟地址空间一样。
若没有特别说明,转换表和他们的配置域与ARMV80A PE的转换系统一样。
若SMMU没有实现两个阶段的任一阶段,它会配置为固定bypass转换。还有其他的限制,比如,配置一个不存在的stage是无效的。SMMU至少支持一个转换stage。