本讲是Camera KMD ISP子系统专题的第28讲,我们讲解Camera KMD ISP子系统SMMU之Buffer Map流程详解。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
Camera SMMU Buffer Map详解
buffer map/unmap 概述
qcom smmu map流程
dma_buf_attach()接口流程
dma_buf_map_attachment()接口流程
iommu_map接口
递归调用__arm_lpae_map函数根据 映射物理内存size创建各级pte之后,填充pgd及pte页表内容,建立好映射关系
1. 第一次进来__arm_lpae_map lvl为1, block_size为1G,这个函数会递归调用直到map size与某一级页表能表示block size相等为止
2. 如果传入size不等于block_size,就会再次递归进入__arm_lpae_map lvl为2, block_size为2M
3. 如果传入size不等于block_size,就会再次递归进入__arm_lpae_map lvl为3, block_size为4K
图解map过程
39位[38:0]虚拟地址解释
如何map一块4K的物理内存
Level2 PTE entry
每个level2 pte能标识4K的空间, level2 pte指向的是物理内存
如何map一块2M的物理内存
Level1 PTE entry
每个level1 pte能标识2M的空间,level1 pte可以指向2M物理内存,或者储存level2 pte的物理页
完成map之后整个SMMU ste,cd, 页表
完成map之后整个SMMU ste,cd, 页表可能的样子(每级页表项是8个字节,所以每级页表有512个页表项 )