[IOMMU]面向芯片/SoC验证工程的IOMMU全景速览
面向芯片/SoC验证工程的IOMMU全景速览
摘要:面向芯片/SoC 验证工程的 IOMMU 全景速览:包含基础概念、主流架构要点(ARM SMMU、Intel VT‑d、RISC‑V IOMMU),Linux 软件栈关系,SoC 上的验证方法(功能、错误、性能、系统化流程和覆盖),以及一个可用的“通用 IOMMU C 参考模型”(便于接入 UVM/系统级仿真做对比/记分)。
一、IOMMU 是什么,解决什么问题
-
作用
- DMA 虚实地址转换:把设备发出的 IOVA(IO 虚拟地址)转换为物理地址(PA)或中间物理地址(IPA),并施加权限检查(R/W/X)与内存属性。
- 隔离与安全:把设备划入不同隔离域(domain),防御恶意/越界 DMA。
- 虚拟化:两阶段翻译(Stage‑1/Stage‑2),支撑来宾 OS(S1)和宿主/管理程序(S2)共管地址空间。
- SVA(Shared Virtual Addressing):设备和进程共享同一虚拟地址空间,通常通过 PASID 识别进程上下文。
- 端到端地址服务:配合 PCIe ATS/PRI/PASID,降低 IOTLB 缺失开销,支持按进程页请求。
- 中断重映射:将设备发出的 MSI/MSI‑X 重定向到平台中断控制器,施加隔离。
-
关键术语
- IOVA/GVA/IPA/PA:设备看到的虚拟地址/进程虚拟地址/中间物理/最终物理地址。
- RID/BDF、Stream ID/SSID、PASID:识别设备或其子流(substream/进程)的标识。
- Domain/Context:一组设备共享的地址空间与权限配置。
- IOTLB/ATC:IOMMU 侧 TLB/设备侧地址转换缓存(PCIe ATS)。
- ATS/PRI:Address Translation Service / Page Request Interface(设备在缺页时向主机申请映射)。
- TLBI/Sync:IOMMU TLB 失效与屏障,同步页表更新的可见性。
二、主流架构速记
-
ARM SMMU
- v2:以 Stream ID 映射到 Context Bank;支持 S1/S2;典型 AXI 接口。
- v3:面向 PCIe 原生生态,Stream Table Entry(STE)→ Context Descriptor Table(CD);支持 PASID/SSID、ATS/PRI、命令队列(CMDQ)、事件队列(EVTQ)、PRI 队列(PRIQ)与 MSI doorbell;TLB 失效与 CMD_SYNC 时序保证。
- 页表格式与权限模型近似 ARMv8 VMSA;叶子/块映射(4K/2M/1G)。
-
Intel VT‑d(DMA Remapping)
- Root/Context/PASID 表层次,支持 Scalable Mode、Device‑TLB、Posted Interrupts、基于队列的失效指令与事件上报。
- 可与 PCIe ATS/PRI 协同,隔离粒度到函数级(RID)或 PASID。
-
RISC‑V IOMMU(1.0 规范背景)
- 与 Sv39/Sv48 协作的两阶段翻译;PASID/SVA;设备页请求与错误上报机制;属性/权限对齐 RISC‑V MMU 语义。
三、Linux 软件栈与调试要点
- iommu 子系统:iommu‑api、iommu‑groups、domains、attach/detach。
- 驱动:arm_smmu/arm_smmu_v3、intel‑iommu、riscv‑iommu。
- VFIO/virtio‑iommu、DMA‑API(dma_map_*)、SVA(绑定 PASID 到 mm)。
- 调试:dmesg 的 IOMMU faults、debugfs/sysfs(如 arm_smmu_v3 下的 cmdq/evtq 统计)、perf/ftrace 采样缺页/失效路径。
四、SoC 上验证 IOMMU 的方法
4.1 环境搭建(建议)
-
事务源
- PCIe 设备 BFMs/Agent(含 ATS/PRI/PASID 能力,或 AXI 主设备代理)。
- 多主并发:不同 RID/StreamID/SSID/PASID。
-
内存/页表
- 可编程 DRAM 模型,暴露页表区域;提供“OS 代理”驱动页表更新、IOMMU 命令队列写入和 TLBI。
-
监测与对比
- 总线监测:AXI/PCIe Monitor 获取 IOVA 事务与 IOMMU 翻译后的 PA 事务。
- 参考模型:C Model 做期望翻译;Scoreboard 比对,记录属性/权限/错误一致性。
- 队列/中断监测:CMDQ/EVTQ/PRIQ 的内存写入与 doorbell MSI;中断控制器接收情况。
4.2 典型功能用例与覆盖点
-
翻译成功路径
- 页尺寸:4K/2M/1G(或平台支持的所有块/页);跨页/跨块连续与非连续;边界对齐/非对齐突发。
- 权限:R/W/X 组合;设备特权/非特权;不可缓存/可缓存、内存类型/可共享性传播。
- Stage‑1/Stage‑2 各自启停与组合;直通/旁路模式。
-
错误/异常
- 不存在页(PTE invalid)、权限拒绝、访问超范围、页表对齐错误、页表循环/保留位错误、长度超页、设备未配置 Context。
- PRI/ATS 路径:ATC 命中/未命中;PRI 请求、完成;设备在 IOMMU PRIQ 背压/溢出处理。
- 事件/故障上报:队列满、队列指针错误、doorbell 丢失、MSI 映射错误。