当前位置: 首页 > news >正文

RISC-V IOMMU 硬件设计学习计划|第 1 天:IOMMU 在 RISC-V SoC 中解决什么问题

RISC-V IOMMU 硬件设计学习计划|第 1 天:IOMMU 在 RISC-V SoC 中解决什么问题

> 计划日期:2026-07-27。本系列基于官方 RISC-V IOMMU Architecture Specification 与官方 `riscv-iommu/iommu_ref_model` C 参考模型整理。本文自包含阅读,不要求读者同时打开规范或代码仓库。

当日主题

今天建立全局视图:IOMMU 位于 IO bridge 与系统内存之间,拦截设备发出的 DMA、ATS 翻译请求、PRI Page Request 和 MSI 写请求。它的核心任务不是“让设备更快访问内存”,而是在可控性能成本下,把设备访问纳入和 CPU MMU 类似的地址翻译、权限检查、隔离、虚拟化与故障报告框架。

核心概念与原理讲解

没有 IOMMU 时,DMA-capable 设备通常可以用总线地址直接访问内存。一旦设备固件、驱动或硬件出错,就可能覆盖内核、其他进程或其他虚拟机的内存。RISC-V IOMMU 通过每个设备的 `device_id` 查找 Device Context(DC),并按 DC 中的控制字段决定该设备的 IOVA 应怎样被翻译。

四类典型模式:

1. `Bare/Bare`:第一阶段和第二阶段都关闭,IOVA 近似作为 SPA 使用,主要用于早期启动或受信任设备。

2. 第一阶段开启、第二阶段 Bare:设备使用进程/内核虚拟地址,IOMMU 执行 S-stage 翻译,适合 native OS 下的 DMA remap 或 SVA。

3. 第一阶段 Bare、第二阶段开启:设备被直通给 VM,guest 驱动看到 GPA,IOMMU 用 G-stage 把 GPA 限制到该 VM 的 SPA。

4. 两阶段都开启:设备请求 VA,先 VS/S-stage 得到 GPA,再 G-stage 得到 SPA,适合带 PASID/SVA 的虚拟化直通。

设备侧有三类地址类型:Untranslated、Translated、PCIe ATS Translation Request。Untranslated 表示设备提交的地址仍需 IOMMU 判断;Translated 表示设备声称地址已由设备 ATC 缓存翻译;ATS Translation Request 表示设备请求 IOMMU 返回翻译结果以填充 DevATC。

关键流程与硬件行为分析

一个普通 DMA 读写进入 IOMMU 后,硬件可抽象为流水线:

```text

IO bridge request

-> 解析 device_id / process_id / transaction type

-> 检查 ddtp.iommu_mode

-> DDT walk 定位 Device Context

-> 如有 PASID/process_id,PDT walk 定位 Process Context

-> 查询 IOATC;miss 时执行一阶段/二阶段 page-table walk

-> 可选 MSI 识别与 MSI page-table 翻译

-> 返回 SPA、权限、PBMT、MSI/MRIF 标志或报告 fault

```

从硬件实现角度,要把 IOMMU 看成一个带内存读端口的翻译协处理器。它不只处理设备请求,还会主动发起隐式内存访问:读取 DDT、PDT、页表、命令队列、故障队列、页请求队列和 MSI 表。这些访问需要 QoS、endianness、PMA/PMP/总线错误处理,并且不能被原始设备请求阻塞到死锁。

对应代码片段解读

参考模型的请求结构浓缩了硬件输入面:

```c

// host bridge 输入到 IOMMU 的抽象请求,参考 iommu_req_rsp.h

typedef struct {

uint32_t device_id; // 最多 24 位设备身份,PCIe 可映射为 BDF/RID+DSEG

uint8_t pid_valid; // 是否携带 process_id/PASID

uint32_t process_id; // 最多 20 位进程身份

uint8_t no_write; // ATS translation request 可请求 no-write

uint8_t exec_req; // 读是否带 execute intent

uint8_t priv_req; // 1=Supervisor, 0=User

iommu_trans_req_t tr; // 地址类型、IOVA、长度、读写属性

} hb_to_iommu_req_t;

```

主入口在 `iommu_translate.c`。它先统计请求类型,再从 `ddtp.iommu_mode` 判断 Off/Bare/DDT 模式;随后调用 `locate_device_context()`、`locate_process_context()`、`lookup_ioatc_iotlb()` 和 `two_stage_address_translation()`。这正好对应硬件中的配置检查、上下文缓存、TLB lookup 和 page-walk pipeline。

当天掌握要点小结

- IOMMU 的基本角色是把设备 DMA 纳入地址翻译、权限检查、隔离和虚拟化。

- `device_id` 选择 DC,`process_id/PASID` 选择 PC;它们共同决定地址空间。

- Untranslated、Translated、ATS Translation Request 是硬件入口分类的第一层。

- 实现 IOMMU 时要同时考虑设备请求路径和 IOMMU 自身的隐式内存访问路径。

http://www.jsqmd.com/news/1277270/

相关文章:

  • 教你如何在2026年找到性价比高的酒店 - 工具软件使用方法推荐
  • 地下水数值模拟软件Visual modflow Flex实践技术应用
  • Python计算机毕设之基于Python的数字化智能停车场综合运维系统设计 基于 B/S 架构的智能停车服务管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • DeepSeek LeetCode 3753. 范围内总波动值 II Java实现
  • 2026 年沿河土家族自治热门的铅衣平台哪家可靠,拍胸片时穿的那件“铁马甲”,居然藏着你不知道的辐射防护猫腻?-汇生新型建材 - 行业甄选官
  • 揭秘秘塔AI学术搜索底层逻辑:3步实现文献查全率提升47%的实战方法
  • 2026年靠谱的环保除油剂厂商有哪些实用选型参考指南 - 热点品牌推荐
  • 【电赛上分利器】用 AI 零代码配置 TI MSPM0?天猛星 MSPM0G3507 专属 Agent Skill 开源发布!
  • 2026年挑选可靠休闲食品油炸生产线工厂实用参考指南 - 热点品牌推荐
  • LangChain 表达式语言 (LCEL):从序列链接到并行执行
  • 抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽
  • 动图转视频原来这么简单 2026手把手教程 - 软件工具教程方法
  • Python计算机毕设之 基于 Python 的毕业生就业动态追踪系统智慧校园毕业生就业信息采集管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • TPS65982BB芯片解析:集成USB Billboard、数据MUX与5V负载开关的设计指南
  • 如何将Codex、Claude Code等多个AI Agent组合起来,搭建一个能协同工作、自动执行复杂任务的一套可迁移到任何课题的“AI科研团队”。
  • 教你如何巧妙领取外卖优惠券,享受更多优惠 - 工具软件使用方法推荐
  • 抖音批量下载器完整教程:三步免费获取无水印视频
  • 旅行省钱小窍门:2026年最佳酒店预订软件盘点 - 工具软件使用方法推荐
  • 深度解析:mac-precision-touchpad如何让苹果触控板在Windows上获得原生级体验
  • 2026年精密裁切水口机生产厂家哪家靠谱实测解析 - 热点品牌推荐
  • 找璧山厂房耐磨固化地坪厂家 靠谱筛选攻略帮你少走弯路 - 热点品牌推荐
  • 打通业务闭环,飞书AI多维表格+审批+机器人集成方案,企业级落地实录
  • 谁说的YOLO只能目标检测?手把手教你解锁它隐藏的热力图视野!
  • 2026视频转音频App推荐盘点:手机电脑免费工具怎么选,看这篇就够了
  • 如何快速压缩游戏ISO文件:tochd让你的游戏收藏节省50%硬盘空间
  • Django计算机毕设之基于Django的在线课程选择与教学信息管理系统设计 学生选课志愿填报与课程分配系统(完整前后端 代码+说明文档+LW,调试定制等)
  • 解锁魂系游戏模组新境界:ModEngine2智能运行时注入库完全指南
  • 教你如何用工具高效领取京东外卖红包 - 工具软件使用方法推荐
  • 鸽姆智库官方声明关于“未被主流学术认可“的回应
  • 融合CNN-LSTM-MHA的多元异构数据处理技术解析