SMMU概述

SMMU本质上就是一个MMU设备,它的内存转换逻辑与CPU的MMU采用相同的逻辑,都允许将物理上非连续的页虚拟为连续的内存页。SMMU和IOMMU可以交替使用。

关键术语
-Context Bank
 定义转换上下文的寄存器集,系统中的每个Context Bank都有相同的寄存器集。
 PS:这里要记录的有哪些信息?
-Stream ID
 SMMU的输入源,用于唯一标记当前转换流的标记符。
 PS:有哪些转换流?
-IOVA
 I/O虚拟地址
-Page Tables
 定义虚拟到物理内存映射的表格,SMMU依靠这些表格完成转换。
-TTBR0
 保存Page Tables基地址的寄存器
-Page Level
 Page Table走过的级别(目前理解是转换过程中当前所处的转换页表的级别),一半只有在转换出错时才会用到。
-Translation Stage
 转换进程的阶段,HLOS管理第一阶段,系统管理程序管理第二阶段。
 PS:分别完成什么功能?
-IPA
 中间物理地址,第一阶段的输出地址和第二阶段的输入地址
 PS:本身不是硬件过程吗,怎么HLOS还会生成中间地址?
-TLB
 转换后援缓存器,也称页表缓存,用于加快地址转换过程,缓存着IOVA到物理地址的映射。
-Bypass

 用于某个阶段(Stage 1/2或全部)不进行转换,即输出等于输入。

重要API

API 描述
arm_iommu_create_mapping configure a VA range
arm_iommu_attach_device associate a VA range with a device and enable SMMU translations
dma_alloc_coherent allocate buffer and map into SMMU for device
dma_map_sg map existing buffer (by struct scatterlist) into SMMU for device
ion_share_dma_buf Convert an Ion handle to a dma buf
dma_buf_attach Prepare a dma buf for dma on the given device
dma_buf_map_attachment Get the scatterlist for the given attachment
msm_iommu_get_bus Get proper bus for your domain
针对上述的疑问,目前的理解如下:

1)SMMU并不是MMU,而是按照相同原理工作在QSEE环境中的一个硬件。

2)加入安全访问控制的关键设备,通过增加SMMU额外实现了一层安全防护措施。而Context Bank就是与要访问的设备有关的上下文标志,因为在MMU阶段就可以通过地址来过滤出设备相关的信息,并应用这些新增的策略。

3)第一阶段的HLOS是在MMU完成地址转换的基础上对地址的又一次修正,可以假定的认为MMU转换出的地址增加上Context Bank相关的信息生成了一个全新的地址,而SMMU就是完成这个全新地址到最终地址的转换。至于增加SMMU之后是否对MMU转换出的地址进行修正,还不得而知。

参考文档:80-p2055-1_b


你可能感兴趣的:(SMMU概述)