IOMMU
文章平均质量分 90
学习和记录IOMMU知识
业余程序员plus
分享知识,传播开源精神,致敬郝斌老师!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
IOMMU技术简介(十四)
IOMMU全称为 Input-Output Memory Management Unit,即输入输出内存管理单元。IOMMU是连接在系统I/O总线和主内存之间的一个硬件单元,其主要功能是将设备DMA访问请求中的虚拟地址转换为物理内存地址,并在此过程中执行访问权限检查。原创 2025-12-21 22:37:27 · 456 阅读 · 0 评论 -
SMMUv3中断处理过程分析(十三)
SMMUv3驱动初始化的时候,会注册事件队列中断处理函数、错误中断处理函数和PRIQ中断处理函数。下面分析这些中断处理函数。原创 2025-10-02 22:07:02 · 443 阅读 · 0 评论 -
SMMUv3驱动重要宏和函数解析(十二)
宏计算第l级页表在虚拟地址中的偏移。原创 2025-09-27 21:30:48 · 675 阅读 · 0 评论 -
DMA-API(map和unmap)调用流程分析(十一)
当使用IOMMU且使能DMA-IOMMU中间层时,使用DMA API接口alloc、free、map、unmap内存时,底层都会调用到IOMMU API,最终调用到SMMUv3驱动,完成内存的map和unmap。调用流程如下图所示。原创 2025-09-14 22:38:37 · 906 阅读 · 0 评论 -
DMA-API(alloc和free)调用流程分析(十)
当使用IOMMU且使能DMA-IOMMU中间层时,使用DMA API接口alloc、free、map、unmap内存时,底层都会调用到IOMMU API,最终调用到SMMUv3驱动,完成内存的map和unmap。调用流程如下图所示。原创 2025-08-24 22:23:23 · 955 阅读 · 0 评论 -
IOMMU Client设备DMA配置过程分析(九)
cp0_pcie0是一个PCIe RC控制器,使用SMMU将PCIe设备的IOVA转换成物理地址,使用和iommu-map定义PCIe设备使用的Stream ID。设备树定义如下所示。原创 2025-08-01 21:15:13 · 484 阅读 · 0 评论 -
ARM SMMUv3控制器注册过程分析(八)
中描述了IOMMU控制器初始化过程。SMMU驱动最后调用将其注册到内核中,下面分析一下SMMU控制器注册过程中都做了那些工作。如下代码所示,函数会遍历定义的所有总线,初始化其中使用SMMU的设备。原创 2025-07-26 18:22:37 · 1223 阅读 · 0 评论 -
ARM SMMUv3控制器初始化及设备树分析(七)
SMMUv3驱动的入口函数如下代码所示。原创 2025-07-26 11:21:50 · 1399 阅读 · 0 评论 -
Linux系统IOMMU软件架构分析(六)
IOMMU核心层使用iommu_group管理使用IOMMU的设备,一个iommu_group里面可能只有一个设备,也可能有多个设备。iommu_group中的所有设备使用同一张IO页表,也即共享一个IOVA地址空间,可以互相访问。iommu_group内有三个iommu_domain,但同一个时刻只能使用一个iommu_domain。// 设备链表......// 使用默认iommu_domain// 使用blocking_domain,阻止dma访问// 使用的domain。原创 2025-07-10 21:36:26 · 1569 阅读 · 0 评论 -
ARM SMMUv3简介(一)
SMMU(System Memory Management Unit,系统内存管理单元)是ARM架构中用于管理设备访问系统内存的硬件模块。SMMU和MMU的功能类似,都是将虚拟地址转换成物理地址,不同的是MMU转换的虚拟地址来自CPU,SMMU转换的虚拟地址来自Device(比如DMA、PCIe等)。起到地址隔离作用。DMA只能访问页表中的地址,非法地址将会被拦截。支持设备使用连续虚拟地址访问离散物理地址,消除了传统DMA直接访问物理内存要求地址连续的限制,以及32位DMA访问4GB地址空间的限制。原创 2025-06-07 22:27:34 · 1936 阅读 · 0 评论 -
ARM SMMUv3故障和错误(五)
提交给SMMU命令在某些情况下不正确时,命令队列有机制报告这些错误。事件队列中记录了一些错误和故障。包括了来自设备流量(traffic)引起的错误和故障,比如配置错误或者设备地址引起的缺页异常。一种基于全局寄存器的SMMU_GERROR机制用于上报以下情况引发的事件:当无法将记录写入事件队列或PRI队列时,以及其他无法写入内存的灾难性事件。这种情况可能发生在事件队列指针错误的指向不存在的内存,或发生队列溢出的情况下。原创 2025-07-03 21:43:16 · 1151 阅读 · 0 评论 -
ARM SMMUv3 STE表和CD表数据格式分析(三)
SMMUv3的Stream Table由STE(Stream Table Entry)表和CD(Context Descriptor)表组成。STE表如果是一级表,则全部由STE组成,每个STE占用64字节,如果是二级表,则第一级表由L1STD组成,每个L1STD占用8字节,L1STD保存了STE表的基地址,第二级表由STE组成。CD表如果是一级表,则表全部由CD组成,每个CD占用64字节,如果是二级表,则第一级表由L1CD组成,每个L1CD占用8字节,保存了CD表的基地址,第二级表由CD组成。原创 2025-06-08 20:01:29 · 1461 阅读 · 0 评论 -
ARM SMMUv3 Stream Table分析(二)
Stream Table中记录了SMMU转换设备地址所需的信息,比如TTB页表基地址、ASID、VMID、配置信息、内存属性等。SMMU使用StreamID和SubstreamID索引Stream Table。Stream Table由STE表和CD表组成,STE表用于第一阶段和第二阶段地址转换,CD表用于第一阶段地址转换。原创 2025-06-08 10:14:05 · 1131 阅读 · 0 评论 -
ARM SMMUv3命令和事件队列分析(四)
SMMUv3新增了命令和事件队列(Command and Event queues),可选的PRI队列,用于和软件进行交互。软件将要执行的命令提交到Command队列,比如预取配置、Invalidate STE命令等,SMMU从Command队列取出Command并执行。当命令不正确或配置出错等错误发生时,SMMU将会将这些事件写入到Event队列,软件从Event队列取出Event进行处理。PRI队列用于接收PCIe page requests。原创 2025-06-12 21:53:35 · 1487 阅读 · 0 评论
分享