因此,SMMU 使用两组不同的结构:• Configuration structures, which map from the StreamID of a transaction (a device originator identifier) to the translation table base pointers, configuration, and context under which the translation tables are accessed.• 配置结构:它将一次事务的 StreamID (Stream...
输入给 SMMU 的信息包含地址、大小、属性(如如读/写、安全/非安全、是否可共享、是否可缓存)。如果超过一个客户端设备使用 SMMU,则信息中还必须包含一个边带 StreamID 以区分是哪个客户端设备。StreamID 是通过系统的实施定义构建和承载的。每个客户端设备对应一个 StreamID。 Note: The mapping of a physical ...
【精选】IOMMU/SMMUV3代码分析(4)IO设备与SMMU的关联1_iommu_ops_linux解码者的博客 iort_iommu_configure_id iort_pci_iommu_init iort_iommu_xlate //根据SMMU类型的acpi_iort_node 找出fwnode_handle,再找出iommu_ops arm_smmu_iort_xlate iommu_fwspec_init //kzalloc 创建iommu_fwspec ,关联iommu_fwspec fws...
第一个eventq中断,smmu的一个队列叫event队列,这个队列是给挂在smmu上的platform设备用的,当platform设备使用smmu翻译dma 的iova的时候,如果发生了一场smmu会首先将异常的消息填到event队列中,随后上报一个eventq的中断给 smmu 驱动,smmu驱动接到这个中断后,开始执行中断处理程序,从event队列中将异常的消息读出来,显示...
arm_smmu_v3 io页表相关操作分析 1staticstructarm_lpae_io_pgtable *2arm_lpae_alloc_pgtable(structio_pgtable_cfg *cfg)3{4structarm_lpae_io_pgtable *data;5intlevels, va_bits, pg_shift;67arm_lpae_restrict_pgsizes(cfg);89if(!(cfg->pgsize_bitmap & (SZ_4K | SZ_16K |SZ_64K)))10...
smmuv3的在内核中的代码路径:drivers/iommu/arm-smmu-v3.c: 上面是smmu驱动中初始化流程的前半部分,从中可以很容易看出来,内核中每个smmu都有一个结构体struct arm_smmu_device来管理,实际上初始化的流程就是在填充着个结构。看上图,首先就是从slub/slab中分配一个对象空间,随后一个比较重要的是函数 ...
1 change: 1 addition & 0 deletions 1 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h Original file line numberDiff line numberDiff line change @@ -650,6 +650,7 @@ struct arm_smmu_device { #define ARM_SMMU_OPT_SKIP_PREFETCH (1 << 0) #define ARM_SMMU_OPT_PAGE0_REGS_ONLY (1 <...
如上如所示,红框中就是smmu中一个steentry的全貌了,从红框中能看出来,这个ste entry同时管理了stage1 和 stage2的数据结构;其中config是表示ste有关的配置项,这个不需要理解也不需要记忆,不知道的查一下smmuv3的手册即可,里面的VMID是指虚拟机ID,这里我们重点关注一下S1ContextPtr和S2TTB。
如上如所示,红框中就是smmu中一个ste entry的全貌了,从红框中能看出来,这个ste entry同时管理了stage1 和 stage2的数据结构;其中config是表示ste有关的配置项,这个不需要理解也不需要记忆,不知道的查一下smmuv3的手册即可,里面的VMID是指虚拟机ID,这里我们重点关注一下S1ContextPtr和S2TTB。
系统I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs()等接口。dma_alloc_coherent()/dma_alloc_attrs()等接口通过 DMA IOMMU 的回调分配内存,并为经过 IOMMU 的 DMA 内存访问准备转换表。之后经过 IOMMU 的 DMA 内存访问所需的...