3. 配置和转换的查找

SMMU架构手册之数据结构和转换流程(3)-编程知识网

        图中 描述了配置查找和转换查找所涉及的相关概念。

        正如3.3.2中所描述的,传入的事务首先受配置查找的约束,而SMMU决定怎样开始进行事务的转换。这涉及到找到合适的STE,如果有必要也需要CD。

        配置的查找不依赖于输入的地址,它取决于:

  1. SMMU全局寄存器的配置;
  2. 传入事务的StreamID;
  3. 传入事务的SubstreamID(如果有应用)

        配置查找的结果是找到转换的stream或substream相关的配置,包括:

  1. stage1 转换表的基指针,ASID,以及用于修改的转换表解析或walk的属性(比如转换粒度);
  2. Stage2转换表的基指针,VMID,以及用于修改的转换表解析或walk的属性;
  3. stream相关的属性,如stream相关的streamworld(异常级别,转换区域)。

        转换查找过程逻辑上与PE侧内存地址转换系统工作一样。输出给系统的是物理地址,它取决于:

  1. 输入地址;
  2. StreamWorld(安全状态和异常级别),ASID和VMID(由前一级来提供)

        上图呈现在转换查找中被用到的TLB。ARM希望SMMU使用TLB来缓存转换而不是对每个事务都进行TTW,但不是强制的。

        NOTE:为了清楚起见,图3.7没有呈现错误上报路径或从stage2转换获取CD(这也需要访问TLB或TTW)。实现可以选择上述一些步骤的flatten或组合,但需要保持相同行为。

        缓存的事务与标明转换区域的streamworld相关联。Streamworld相当于PE中的异常级别。

        事务的streamworld是由插入转换的配置决定的。缓存的转换的streamworld由STE的安全状态决定,STE.Config域/STE.STEW域/SMMU_CR2.E2H或SMMU_S_CR2.E2H配置。可以查看章节 5.2 stream table entry中的STE.STRW域。

        除了插入到TLB外,Streamworld影响TLB的查找,TLB无效化的不同类型的范围。SMMU的实现不要求区分EL2和EL2-E2H的缓存转换。

        对于TLB无效化行为,查看章节3.17 TLB tagging, VMIDs, ASIDs and participation in broadcast TLB maintenance。

每个转换与以下streamworld相关:

NS-EL1 在PE侧,等同于非安全的EL1

NS-EL2 等同于非安全的EL2(当E2H没有使用时,不带ASID)

NS-EL2-E2H 等同于非安全的EL2(当E2H使用时,带ASID)

  1. EL2 等同于非安全的EL2((当E2H没有使用时,不带ASID)
  2. EL2-E2H 等同于安全的EL2(当E2H使用时,带ASID)

        Secure 等同于以下其一:1. 当运行在AArch32 EL3时,单个转换区域被安全EL1和安全EL3使用;2. 当运行在AArch64 EL3时,安全EL1;区域要求AISD,若支持安全stage2,需要VMID.

EL3 等同于AArch64 EL1和EL3

        NOTE:在SMMU中Streamworld能够区分不同的转换区域,不同的转换区域与在不同异常级别的不同软件相关。比如,在安全EL3下对地址0X1000的转换与在非安全EL2下对地址0x1000的转化是不同的。通常,ARM期望为stream配置的streamworld,能够匹配软件控制stream或device的异常级别。

        术语“any-EL2”用来描述NS-EL2和S-EL2的共同行为。术语“any-EL2-E2H”用来描述NS-EL2-E2H和S-EL2-E2H的共同行为。

   在ARMV8-A 的MMU也同样,若定义了独一无二的输入参数{streamworld, VMID,ASID,Address},那么转换也是唯一的。

比如,下列是唯一的且可以在转换缓存中存在:

  1. 带相同的地址,但不同的ASID的条目;
  2. 带相同的地址和ASID,但不同的VMID;
  3. 带相同的地址和ASID,但不同的streamworld;

架构上,由streamID和substreamID来区分,转换时不唯一的。这会引起两个结果?:

  1. 一组事务的输入参数{streamID, substreamID}的转换时不唯一的。两个stream可以被配置为相同的转换配置,从配置查找中生成的ASID/VMID可以区分一组共享的转换缓存条目;
  2. 多个streamID/substreamID配置可能导致相同的ASID/VMID/streamworld配置,这时它必须维护能够影响TLB查找的相同配置。比如,两个stream,都配置为stage1,NS-EL1且AISD=3,这两stream必须使用相同转换表基地址和转换粒度。

在本文档中,术语TLB用来表示转换缓存的概念,由streamworld/VMID/ASID/VA来标识。

SMMU缓存维护命令分为两组:

  1. 配置缓存的维护,依赖于streamID和substreamID;
  2. 转换缓存的维护,依赖于地址/ASID/VMID/streamworld;

第二组命令直接匹配可能在PE侧有效的广播TLB维护操作。