单页网站技术,青岛网络服务公司,网站搜索引擎优化工具,网站开发设计方案书安全之安全(security)博客目录导读
目录
一、全局错误
二、最小配置 一、全局错误
与编程接口相关的全局错误会报告到适当的 SMMU_(*_)GERROR 寄存器#xff0c;而不是通过基于内存的事件队列。这些错误通常是严重的#xff0c;例如导致 SMMU 停止向前推进。例如#xf…安全之安全(security²)博客目录导读
目录
一、全局错误
二、最小配置 一、全局错误
与编程接口相关的全局错误会报告到适当的 SMMU_(*_)GERROR 寄存器而不是通过基于内存的事件队列。这些错误通常是严重的例如导致 SMMU 停止向前推进。例如访问某个配置数据结构时发生的外部中止。以下是所有全局错误的列表 • 命令队列错误 • 事件队列访问中止abort当标记为中止时事件队列中的传输停止 • PRI 队列访问中止abort当标记为中止时PRI 队列中的传输停止 • CMD_SYNC 消息信号中断MSI写入中止abort • 事件队列 MSI 写入中止abort • PRI 队列 MSI 写入中止abort仅限非安全 GERROR • GERROR MSI 写入中止abort • SMMU 进入服务失败模式
SMMU_(*_)GERROR 为每个全局错误提供一个位标志。当触发错误条件时通过切换 GERROR 中相应的标志来激活错误。在某些情况下当错误处于激活状态时SMMU 的行为会发生变化。例如当命令队列错误激活时命令队列中的命令不会被消费。
当 SMMU_(*_)IRQ_CTRL.GERROR_IRQEN 1 时当 SMMU 激活一个不是 GERROR MSI 写入中止的错误时会触发 GERROR 中断。
二、最小配置
以下序列展示了 SMMU 初始化的最小配置 分配流表Stream Table • 为流表分配内存。 • 通过写入 SMMU_STRTAB_BASE_CFG 配置流表的格式和大小。 • 通过写入 SMMU_STRTAB_BASE 配置流表的基地址。 • 通过将每个 STE 的 STE.V 设置为 0防止未初始化的内存被解释为有效配置从而将其标记为无效。 • 通过执行 DSB 操作确保写入的数据对 SMMU 可见。 ◦ 如果 SMMU_IDR0.COHACC 0表示系统不支持 SMMU 的内存一致性访问。在这种情况下可能需要额外的步骤包括数据缓存维护以确保 SMMU 能观察到写入的数据。 分配命令队列和事件队列 • 为命令队列和事件队列分配内存。 • 通过配置 SMMU_CMDQ_BASE、SMMU_CMDQ_PROD、SMMU_CMDQ_CONS、SMMU_EVENTQ_BASE、SMMU_EVENTQ_PROD 和 SMMU_EVENTQ_CONS 来指定基地址、大小、生产者指针和消费者指针。 设置访问流表、命令队列和事件队列的内存属性 • 配置 SMMU_CR1。 启用事件队列的 IRQ和 GERROR • 配置 SMMU_IRQ_CTRL。 启用命令队列和事件队列 • 通过将 SMMU_CR0.CMDQEN 位设置为 1 来启用命令队列。 • 通过轮询 SMMU_CR0ACK直到 CMDQEN 读取为 1检查启用操作是否完成。 • 通过将 SMMU_CR0.EVENTQEN 位设置为 1 来启用事件队列。 • 通过轮询 SMMU_CR0ACK直到 EVENTQEN 读取为 1检查启用操作是否完成。 使 TLB 和配置缓存结构无效 • 向命令队列发出命令 ◦ 要使 TLB 条目无效确保软件为翻译上下文发出适当的命令。例如要使非安全 EL1 上下文的 TLB 条目无效发出 CMD_TLBI_NSNH_ALL 命令对于 EL2 上下文发出 CMD_TLBI_EL2_ALL 命令。 ◦ 要使 SMMU 配置缓存无效发出 CMD_CFGI_ALL 命令。 ◦ 要强制所有先前的命令完成发出 CMD_SYNC 命令。 • 另外安全软件可以通过一次写操作使所有 TLB 和缓存无效。 ◦ 将 SMMU_S_INIT.INV_ALL 设置为 1。 ◦ 轮询 SMMU_S_INIT.INV_ALL直到其设置为 0再继续进行 SMMU 配置。 启用翻译 • 将 SMMU_CR0.SMMUEN 位设置为 1。 • 通过轮询 SMMU_CR0ACK直到 SMMUEN 读取为 1检查启用操作是否完成。
【注意】此序列展示了当 SMMU 不实现 RME 扩展或 GPC 未启用时的非安全 SMMU 编程。安全或领域 SMMU 编程类似。如果 SMMU 实现了 RME 扩展并且启用了 GPC根世界运行的软件需要首先初始化 GPT。