SMMU概述
来源:互联网 发布:淘宝详情编辑不用神笔 编辑:程序博客网 时间:2024/05/23 12:45
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
API 描述 arm_iommu_create_mappingconfigure a VA rangearm_iommu_attach_deviceassociate a VA range with a device and enable SMMU translationsdma_alloc_coherentallocate buffer and map into SMMU for devicedma_map_sgmap existing buffer (by struct scatterlist) into SMMU for deviceion_share_dma_bufConvert an Ion handle to a dma bufdma_buf_attachPrepare a dma buf for dma on the given devicedma_buf_map_attachmentGet the scatterlist for the given attachmentmsm_iommu_get_busGet proper bus for your domain针对上述的疑问,目前的理解如下:
关键术语
-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
1)SMMU并不是MMU,而是按照相同原理工作在QSEE环境中的一个硬件。
2)加入安全访问控制的关键设备,通过增加SMMU额外实现了一层安全防护措施。而Context Bank就是与要访问的设备有关的上下文标志,因为在MMU阶段就可以通过地址来过滤出设备相关的信息,并应用这些新增的策略。
3)第一阶段的HLOS是在MMU完成地址转换的基础上对地址的又一次修正,可以假定的认为MMU转换出的地址增加上Context Bank相关的信息生成了一个全新的地址,而SMMU就是完成这个全新地址到最终地址的转换。至于增加SMMU之后是否对MMU转换出的地址进行修正,还不得而知。
参考文档:80-p2055-1_b
阅读全文
0 0
- SMMU概述
- smmu学习笔记之smmu v3 初始化
- PCI SMMU parse in ACPI
- smmu 学习笔记 之初始化
- smmu 学习笔记之domain_alloc
- smmu 学习笔记之attach_dev
- smmu学习笔记之streamtable
- smmu学习笔记之arm_smmu_init_one_queue
- smmu学习笔记之alloc_iova
- smmu学习笔记之bus_set_iommu
- smmu 学习笔记之get_sgtable
- smmu 学习笔记之map_page
- PCIe/SMMU ATS analysis note
- smmu 学习笔记之attach_dev 2
- smmu学习笔记之streamtable 2
- 如何判断smmu是否初始化成功呢?
- smmu 学习笔记之mmap函数.
- smmu 学习笔记之ias和oas
- 利用java循环输出近似圆
- 线程之间通讯之AsyncTask与Handler的区别
- Linux vmstat命令实战详解
- Vector,ArrayList,LinkedList的特点和区别
- java字符串处理将品牌和型号分开
- SMMU概述
- android中EventBus发消息
- 关于stm32中bool类型定义的问题
- opencv学习笔记(1):基于balser相机的视频流显示通过opencv实现
- 安卓调试之log日志
- zImage和uImage的区别
- python学习(20)——正则表达式及各类常用内建模块
- Linux unzip解压多个文件
- 算法-->递归