安全之安全(security²)博客目录导读
下图展示了每个传入事务(transaction)所经过的简化过程。本节描述了顶层翻译过程。
一个传入事务遵循以下步骤:
1. 如果 SMMU 被全局禁用,事务将直接通过 SMMU 而不进行任何地址改变。全局属性(如内存类型或共享属性memory type or Shareability)可能会从 SMMU 的 SMMU_GBPA 寄存器中应用,或者 SMMU_GBPA 寄存器可能会被配置为中止所有事务。
2. 如果全局绕过(bypass)不适用,则确定配置:
a. 定位到一个流表项(STE,Stream Table Entry)。
b. 如果 STE 启用第 2 级翻译,则 STE 包含第 2 级翻译表基址。
c. 如果 STE 启用第 1 级翻译,则定位到上下文描述符(CD,Context Descriptor)。如果 STE 也启用了第 2 级翻译,则 CD 会从使用第 2 级翻译的 IPA 空间中获取。否则,CD 会从 PA 空间获取。
3. 如果配置有效,则执行翻译:
a. 如果第 1 级配置为进行翻译,则 CD 包含指向第 1 级翻译表基址的指针,该表将被遍历。如果第 2 级翻译也为 STE 启用,则可能需要第 2 级翻译。如果第 1 级配置为绕过,则输入地址直接传递到第 2 级。
b. 如果第 2 级配置为进行翻译,则 STE 包含第 2 级翻译表基址,用于执行第 2 级翻译。第 2 级翻译第 1 级的输出(如果第 1 级启用),或者翻译输入地址(如果第 1 级绕过)。如果第 2 级配置为绕过,则第 2 级的输入地址直接作为输出地址。
4. 当事务通过所有翻译阶段后,翻译后的地址和相关内存属性将被传递到系统中。
实现了领域管理扩展(RME)的 SMMU 在访问所有物理地址时,会受到粒度保护检查(GPC),前提是 GPC 启用。然而,获取粒度保护表(GPT)信息不受 GPC 影响。所有客户端设备访问物理地址时,必须对照 GPT 进行检查。SMMU 的这种行为与 A-profile 架构中的 FEAT_RME 相对应。有关 RME 的更多详细信息,请参见《Learn the architecture - Realm Management Extension》。
【注意】:此序列展示了非安全流中的事务路径。如果支持安全状态或领域状态,则安全流或领域流中的事务路径类似,除了SMMU_S_CR0.SMMUEN 和 SMMU_S_GBPA 控制绕过,或者 SMMU_R_CR0.SMMUEN 和 SMMU_R_GBPA 控制绕过。